Skip to content

A handy Docker container to periodically backup PostgreSQL to S3

License

Notifications You must be signed in to change notification settings

solectrus/postgres-s3-backup

This branch is 6 commits ahead of eeshugerman/postgres-backup-s3:master.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

2b93825 · Feb 6, 2025

History

63 Commits
Jan 28, 2025
Dec 21, 2023
Sep 25, 2022
Jul 3, 2022
Jul 3, 2022
Jan 28, 2025
Nov 28, 2019
Feb 6, 2025
Jan 28, 2025
Jul 3, 2022

Repository files navigation

Introduction

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

Usage

Backup

services:
  postgres:
    image: postgres:17-alpine
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password

  backup:
    image: ghcr.io/solectrus/postgres-s3-backup:17
    environment:
      SCHEDULE: '@weekly' # optional
      BACKUP_KEEP_DAYS: 7 # optional
      PASSPHRASE: passphrase # optional
      S3_REGION: region
      S3_ACCESS_KEY_ID: key
      S3_SECRET_ACCESS_KEY: secret
      S3_BUCKET: my-bucket
      S3_PREFIX: backup
      POSTGRES_HOST: postgres
      POSTGRES_DATABASE: dbname
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
  • Images are tagged by the major PostgreSQL version supported: 13, 14, 15, 16 or 17.
  • The SCHEDULE variable determines backup frequency. See go-cron schedules documentation here. Omit to run the backup immediately and then exit.
  • If PASSPHRASE is provided, the backup will be encrypted using GPG.
  • Run docker exec <container name> sh backup.sh to trigger a backup ad-hoc.
  • If BACKUP_KEEP_DAYS is set, backups older than this many days will be deleted from S3.
  • Set S3_ENDPOINT if you're using a non-AWS S3-compatible storage provider.

Restore

Caution

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>

Development

Build the image locally

POSTGRES_VERSION determines Postgres version.

DOCKER_BUILDKIT=1 docker build --build-arg POSTGRES_VERSION=17 .

Run a simple test environment with Docker Compose

cp template.env .env
# fill out your secrets/params in .env
docker compose up -d

Acknowledgements

This project is a fork of @eeshugerman's postgres-backup-s3 repository. Since the original project is no longer maintained, I decided to fork it and merge an important pull request (#61) to add support for PostgreSQL 17.

The original repository itself is a fork and restructuring of @schickling's postgres-backup-s3 and postgres-restore-s3.

About

A handy Docker container to periodically backup PostgreSQL to S3

Resources

License

Stars

Watchers

Forks

Languages

  • Shell 84.7%
  • Dockerfile 12.6%
  • Emacs Lisp 2.7%