Skip to content
Snippets Groups Projects
user avatar
Elliott Shugerman authored
0f1ad642
History
Name Last commit Last update
src
LICENSE.txt
README.md
render.py
template.Dockerfile

Introduction

This project provides Docker images to periodically backup a PostgreSQL database to AWS S3, and to restore from the backup as needed.

Credit where due

This repository is a fork and re-structuring of schickling's postgres-backup-s3 and postgres-restore-s3.

fork goals:

  • dedicated repository
  • automated builds
  • support multiple PostgreSQL versions
  • merge backup and restore images
  • support encrypted (password-protected) backups
  • option to restore from specific backup by timestamp

other changes:

  • uses pg_dump's custom format (see docs)
  • backup blobs and all schemas by default
  • recreate all database objects on restore
  • some env vars renamed
  • only scheduled backups supported, not ad-hoc
  • filter backups on S3 by database name

Usage

Backup

postgres:
  image: postgres:11
  environment:
    POSTGRES_USER: user
    POSTGRES_PASSWORD: password

pg_backup_s3:
  image: eeshugerman/postgres-backup-s3:11
  environment:
    SCHEDULE: '@weekly
    PASSPHRASE: passphrase
    S3_REGION: region
    S3_ACCESS_KEY_ID: key
    S3_SECRET_ACCESS_KEY: secret
    S3_BUCKET: my-bucket
    S3_PREFIX: backup
    POSTGRES_DATABASE: dbname
    POSTGRES_USER: user
    POSTGRES_PASSWORD: password
  • Images are tagged by the major PostgreSQL version they support: 9, 10, 11, or 12.
  • The SCHEDULE variable determines backup frequency. See go-cron schedules documentation here.
  • If PASSPHRASE is provided, the backup will be encrypted using GPG.

Restore

WARNING: DATA LOSS! All database objects will be dropped and re-created.

... from latest backup

docker exec <container name> sh restore.sh

NOTE: If your bucket has more than a 1000 files, the latest may not be restored -- only one S3 ls command is used

... from specific backup

docker exec <container name> sh restore.sh <timestamp>