A handy Docker container to periodically backup PostgreSQL to S3.
320
This project provides Docker images to periodically back up a PostgreSQL database to AWS S3, and to restore from the backup as needed.
The Docker & Docker Compose system requirements are Linux Ubuntu as the OS (other operating systems are supported as well), an absolute minimum 512MB RAM (2GB recommended)
In order to install docker Ubuntu, you will need to meet the following requirements:
14, 15 or 16.SCHEDULE variable determines backup frequency. See go-cron schedules
documentation here. Omit to run the backup
immediately and then exit.PASSPHRASE is provided, the backup will be encrypted using GPG.docker exec <container name> sh backup.sh to trigger a backup ad-hoc.BACKUP_KEEP_DAYS is set, backups older than this many days will be deleted from S3.S3_ENDPOINT if you're using a non-AWS S3-compatible storage provider.git clone https://github.com/trants/postgres-backup.git \
&& cd postgres-backup \
&& cp .env.example .env
# PostgreSQL
POSTGRES_DATABASE=database
POSTGRES_USER=user
POSTGRES_PASSWORD=password
# Backup
SCHEDULE=@weekly
BACKUP_KEEP_DAYS=7
PASSPHRASE=platonic-subdued-curvy-tweet-backroom
S3_REGION=us-east-1
S3_BUCKET=my-s3-bucket
S3_PREFIX=prefix
S3_ACCESS_KEY_ID=
S3_SECRET_ACCESS_KEY=
POSTGRES_HOST=postgres
docker-compose up -d
Example compose.yaml
version: "3.9"
services:
postgres:
container_name: postgres
restart: unless-stopped
image: postgres:16
environment:
- POSTGRES_DATABASE=${POSTGRES_DATABASE:-database}
- POSTGRES_USER=${POSTGRES_USER:-user}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-password}
networks:
- network-bridge
backup:
container_name: postgres-backup
restart: unless-stopped
image: vnspc/postgres-backup:16
environment:
- SCHEDULE=${SCHEDULE:-@weekly}
- BACKUP_KEEP_DAYS=${BACKUP_KEEP_DAYS:-7}
- PASSPHRASE=${PASSPHRASE:-passphrase}
- S3_REGION=${S3_REGION:-region}
- S3_BUCKET=${S3_BUCKET:-bucket}
- S3_PREFIX=${S3_PREFIX:-prefix}
- S3_ACCESS_KEY_ID=${S3_ACCESS_KEY_ID:-key}
- S3_SECRET_ACCESS_KEY=${S3_SECRET_ACCESS_KEY:-secret}
- POSTGRES_HOST=${POSTGRES_HOST:-postgres}
depends_on:
- postgres
networks:
- network-bridge
networks:
network-bridge:
driver: bridge
name: network-bridge
WARNING: DATA LOSS! All database objects will be dropped and re-created.
docker exec <container name> sh restore.sh
NOTE: If your bucket has more than 1000 files, the latest may not be restored -- only one S3
lscommand is used
docker exec <container name> sh restore.sh <timestamp>
I hope you find this useful. If you have any questions, please create an issue.
If you discover any security related issues, please email [email protected] instead of using the issue tracker.
This software is released under the BSD 3-Clause License. Please see the LICENSE file or https://trants.me/LICENSE.txt for more information.
Thanks goes to these wonderful people (emoji key):
This project follows the all-contributors specification. Contributions of any kind welcome!
Content type
Image
Digest
sha256:31ae3002d…
Size
69.3 MB
Last updated
over 2 years ago
docker pull vnspc/postgres-backup:14