https://github.com/chaifeng/docker-postgres-backup-s3-gpg
Backup PostgreSQL database to S3/Minio with PGP encryption
https://github.com/chaifeng/docker-postgres-backup-s3-gpg
Last synced: about 1 month ago
JSON representation
Backup PostgreSQL database to S3/Minio with PGP encryption
- Host: GitHub
- URL: https://github.com/chaifeng/docker-postgres-backup-s3-gpg
- Owner: chaifeng
- License: gpl-3.0
- Created: 2018-02-18T03:32:34.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2018-11-24T08:48:07.000Z (over 7 years ago)
- Last Synced: 2025-11-18T03:32:33.309Z (8 months ago)
- Language: Shell
- Size: 35.2 KB
- Stars: 1
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Backup PostgreSQL Database to S3/Minio
This docker image backup and encrypt PostgreSQL database to S3/Minio periodically.
## Usage
### Backup to S3
docker run -d --restart unless-stopped \
--name postgres_backup \
-e AWS_ACCESS_KEY_ID="your-access-key" \
-e AWS_SECRET_ACCESS_KEY="your-secret-access-keys" \
-e PGP_KEY=YOUR_PGP_PUBLIC_KEY \
-e BACKUP_SCHEDULE="0 * * * *" \
-e POSTGRES_DB=your-dbname \
-e POSTGRES_HOST=your-postgres-container \
-e POSTGRES_USER=your-postgres-username \
-e POSTGRES_PASSWORD="your-postgres-password" \
--network your-network \
chaifeng/postgres-backup-s3-gpg
### Backup to your own Minio server
docker run -d --restart unless-stopped \
--name postgres_backup \
-e AWS_ENDPOINT="https://your.minio.server.example.com" \
-e AWS_ACCESS_KEY_ID="your-access-key" \
-e AWS_SECRET_ACCESS_KEY="your-secret-access-keys" \
-e PGP_KEY=YOUR_PGP_PUBLIC_KEY \
-e BACKUP_SCHEDULE="0 * * * *" \
-e POSTGRES_DB=your-dbname \
-e POSTGRES_HOST=your-postgres-container \
-e POSTGRES_USER=root \
-e POSTGRES_PASSWORD="your-postgres-password" \
--network your-network \
chaifeng/postgres-backup-s3-gpg
### Use a local PGP public key file
docker run -d --restart unless-stopped \
--name postgres_backup \
-e AWS_ACCESS_KEY_ID="your-access-key" \
-e AWS_SECRET_ACCESS_KEY="your-secret-access-keys" \
-v /path/to/your/pgp-key.txt:/pgp.txt \
-e PGP_KEY=/pgp.txt \
-e BACKUP_SCHEDULE="0 * * * *" \
-e POSTGRES_DB=your-dbname \
-e POSTGRES_HOST=your-postgres-container \
-e POSTGRES_USER=your-postgres-username \
-e POSTGRES_PASSWORD="your-postgres-password" \
--network your-network \
chaifeng/postgres-backup-s3-gpg
### Use a remote PGP public key file
docker run -d --restart unless-stopped \
--name postgres_backup \
-e AWS_ACCESS_KEY_ID="your-access-key" \
-e AWS_SECRET_ACCESS_KEY="your-secret-access-keys" \
-e PGP_KEY=https://exaple.com/pgp-key.txt \
-e BACKUP_SCHEDULE="0 * * * *" \
-e POSTGRES_DB=your-dbname \
-e POSTGRES_HOST=your-postgres-container \
-e POSTGRES_USER=your-postgres-username \
-e POSTGRES_PASSWORD="your-postgres-password" \
chaifeng/postgres-backup-s3-gpg
## Variables
- `AWS_ACCESS_KEY_ID`
Access Key
- `AWS_SECRET_ACCESS_KEY`
Securet Access Key
- `PGP_KEY`
Your PGP public key ID, used to encrypt your backups
- `POSTGRES_HOST`
the host/ip of your postgres database
- `POSTGRES_DB`
the database name to dump.
- `POSTGRES_USER`
the username of your postgres database
- `POSTGRES_PASSWORD`
the password of your postgres database
### Optional variables
- `AWS_DEFAULT_REGION`
`us-east-1` by default
- `AWS_ENDPOINT`
Customize this variable if you are using Minio, the url of your Minio server
- `PGP_KEYSERVER`
the PGP key server used to retrieve you PGP public key
- `BACKUP_SCHEDULE`
the interval of cron job to run postgresdump. `0 0 * * *` by default
- `BACKUP_BUCKET`
the bucket of your S3/Minio
- `BACKUP_PREFIX`
the default value is `postgres/%Y/%m/%d/postgres-`, please see the strftime(3) manual page
- `BACKUP_SUFFIX`
the default value is `-%Y%m%d-%H%M.sql.gz.gpg`, please see the strftime(3) manual page
## Decrypt
gpg --decrypt your-backup.gpg
aws s3 cp s3://your-bucket/path/to/your/backup.gpg - | gpg --output backup.sql --decrypt
mc cat minio/your-bucket/path/to/your/backup.gpg | gpg --output backup.sql --decrypt