Skip to content
Snippets Groups Projects
Commit c036e13e authored by Elliott Shugerman's avatar Elliott Shugerman
Browse files

readme

parent 5bd571cd
No related branches found
No related tags found
No related merge requests found
# 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](https://github.com/schickling/dockerfiles/tree/master/postgres-backup-s3) and [postgres-restore-s3](https://github.com/schickling/dockerfiles/tree/master/postgres-restore-s3).
fork goals:
- [x] dedicated repository
- [x] automated builds
- [x] support multiple PostgreSQL versions
- [x] merge backup and restore images
- [x] support encrypted (password-protected) backups
- [x] option to restore from specific backup by timestamp
other changes:
- uses `pg_dump`'s `custom` format (see [docs](https://www.postgresql.org/docs/10/app-pgdump.html))
- 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
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
......@@ -47,17 +27,36 @@ pg_backup_s3:
- 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](http://godoc.org/github.com/robfig/cron#hdr-Predefined_schedules).
- 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
## Restore
> **WARNING:** DATA LOSS! All database objects will be dropped and re-created.
### ... from latest backup
```sh
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
```sh
docker exec <container name> sh restore.sh <timestamp>
```
# It's a fork!
This project is a fork and re-structuring of schickling's [postgres-backup-s3](https://github.com/schickling/dockerfiles/tree/master/postgres-backup-s3) and [postgres-restore-s3](https://github.com/schickling/dockerfiles/tree/master/postgres-restore-s3).
## Fork goals
- [x] dedicated repository
- [x] automated builds
- [x] support multiple PostgreSQL versions
- [x] merge backup and restore images
- [x] support encrypted (password-protected) backups
- [x] option to restore from specific backup by timestamp
## Other changes
- uses `pg_dump`'s `custom` format (see [docs](https://www.postgresql.org/docs/10/app-pgdump.html))
- backup blobs and all schemas by default
- drop and re-create all database objects on restore
- some env vars renamed or removed
- `SCHEDULE` env var is required (but backups can still be triggered ad-hoc)
- filter backups on S3 by database name
......@@ -24,6 +24,7 @@ if [ -z "$POSTGRES_DATABASE" ]; then
fi
if [ -z "$POSTGRES_HOST" ]; then
# TODO: what is this?
if [ -n "$POSTGRES_PORT_5432_TCP_ADDR" ]; then
POSTGRES_HOST=$POSTGRES_PORT_5432_TCP_ADDR
POSTGRES_PORT=$POSTGRES_PORT_5432_TCP_PORT
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment