diff --git a/Makefile b/Makefile index c749911..c84016c 100644 --- a/Makefile +++ b/Makefile @@ -18,32 +18,32 @@ docker-build: docker build -f docker/Dockerfile -t ${IMAGE_NAME}:latest . docker-run: docker-build - docker run --rm --network web --name pg-bkup -v "./backup:/backup" -e "DB_HOST=${DB_HOST}" -e "DB_NAME=${DB_NAME}" -e "DB_USERNAME=${DB_USERNAME}" -e "DB_PASSWORD=${DB_PASSWORD}" -e "GPG_PASSPHRASE=${GPG_PASSPHRASE}" ${IMAGE_NAME} bkup backup --prune --keep-last 2 + docker run --rm --network web --name pg-bkup -v "./backup:/backup" -e "DB_HOST=${DB_HOST}" -e "DB_NAME=${DB_NAME}" -e "DB_USERNAME=${DB_USERNAME}" -e "DB_PASSWORD=${DB_PASSWORD}" -e "GPG_PASSPHRASE=${GPG_PASSPHRASE}" ${IMAGE_NAME} backup --prune --keep-last 2 docker-restore: docker-build - docker run --rm --network web --user 1000:1000 --name pg-bkup -v "./backup:/backup" -e "DB_HOST=${DB_HOST}" -e "DB_NAME=${DB_NAME}" -e "DB_USERNAME=${DB_USERNAME}" -e "DB_PASSWORD=${DB_PASSWORD}" -e "GPG_PASSPHRASE=${GPG_PASSPHRASE}" ${IMAGE_NAME} bkup restore -f ${FILE_NAME} + docker run --rm --network web --user 1000:1000 --name pg-bkup -v "./backup:/backup" -e "DB_HOST=${DB_HOST}" -e "DB_NAME=${DB_NAME}" -e "DB_USERNAME=${DB_USERNAME}" -e "DB_PASSWORD=${DB_PASSWORD}" -e "GPG_PASSPHRASE=${GPG_PASSPHRASE}" ${IMAGE_NAME} restore -f ${FILE_NAME} docker-run-scheduled: docker-build - docker run --rm --network web --name pg-bkup -v "./backup:/backup" -e "DB_HOST=${DB_HOST}" -e "DB_NAME=${DB_NAME}" -e "DB_USERNAME=${DB_USERNAME}" -e "DB_PASSWORD=${DB_PASSWORD}" -e "GPG_PASSPHRASE=${GPG_PASSPHRASE}" ${IMAGE_NAME} bkup backup --mode scheduled --period "* * * * *" + docker run --rm --network web --name pg-bkup -v "./backup:/backup" -e "DB_HOST=${DB_HOST}" -e "DB_NAME=${DB_NAME}" -e "DB_USERNAME=${DB_USERNAME}" -e "DB_PASSWORD=${DB_PASSWORD}" -e "GPG_PASSPHRASE=${GPG_PASSPHRASE}" ${IMAGE_NAME} backup --mode scheduled --period "* * * * *" docker-run-scheduled-s3: docker-build docker run --rm --network web --name pg-bkup -v "./backup:/backup" -e "DB_HOST=${DB_HOST}" -e "DB_NAME=${DB_NAME}" -e "DB_USERNAME=${DB_USERNAME}" -e "DB_PASSWORD=${DB_PASSWORD}" -e "ACCESS_KEY=${ACCESS_KEY}" -e "SECRET_KEY=${SECRET_KEY}" -e "BUCKET_NAME=${BUCKET_NAME}" -e "S3_ENDPOINT=${AWS_S3_ENDPOINT}" -e "GPG_PASSPHRASE=${GPG_PASSPHRASE}" ${IMAGE_NAME} backup --storage s3 --mode scheduled --path /custom-path --period "* * * * *" docker-run-s3: docker-build - docker run --rm --network web --name pg-bkup -e "DB_HOST=${DB_HOST}" -e "DB_NAME=${DB_NAME}" -e "DB_USERNAME=${DB_USERNAME}" -e "DB_PASSWORD=${DB_PASSWORD}" -e "ACCESS_KEY=${ACCESS_KEY}" -e "SECRET_KEY=${SECRET_KEY}" -e "AWS_S3_BUCKET_NAME=${AWS_S3_BUCKET_NAME}" -e "S3_ENDPOINT=${AWS_S3_ENDPOINT}" -e "GPG_PASSPHRASE=${GPG_PASSPHRASE}" ${IMAGE_NAME} bkup backup --storage s3 --mode scheduled --path custom-path --period "* * * * *" + docker run --rm --network web --name pg-bkup -e "DB_HOST=${DB_HOST}" -e "DB_NAME=${DB_NAME}" -e "DB_USERNAME=${DB_USERNAME}" -e "DB_PASSWORD=${DB_PASSWORD}" -e "ACCESS_KEY=${ACCESS_KEY}" -e "SECRET_KEY=${SECRET_KEY}" -e "AWS_S3_BUCKET_NAME=${AWS_S3_BUCKET_NAME}" -e "S3_ENDPOINT=${AWS_S3_ENDPOINT}" -e "GPG_PASSPHRASE=${GPG_PASSPHRASE}" ${IMAGE_NAME} backup --storage s3 --mode scheduled --path custom-path --period "* * * * *" docker-restore-s3: docker-build - docker run --rm --network web --privileged --device /dev/fuse --name pg-bkup -e "DB_HOST=${DB_HOST}" -e "DB_NAME=${DB_NAME}" -e "DB_USERNAME=${DB_USERNAME}" -e "DB_PASSWORD=${DB_PASSWORD}" -e "ACCESS_KEY=${ACCESS_KEY}" -e "SECRET_KEY=${SECRET_KEY}" -e "BUCKET_NAME=${AWS_S3_BUCKET_NAME}" -e "S3_ENDPOINT=${S3_ENDPOINT}" -e "AWS_REGION=eu2" -e "GPG_PASSPHRASE=${GPG_PASSPHRASE}" ${IMAGE_NAME} bkup restore --storage s3 -f ${FILE_NAME} #--path /custom-path + docker run --rm --network web --privileged --device /dev/fuse --name pg-bkup -e "DB_HOST=${DB_HOST}" -e "DB_NAME=${DB_NAME}" -e "DB_USERNAME=${DB_USERNAME}" -e "DB_PASSWORD=${DB_PASSWORD}" -e "ACCESS_KEY=${ACCESS_KEY}" -e "SECRET_KEY=${SECRET_KEY}" -e "BUCKET_NAME=${AWS_S3_BUCKET_NAME}" -e "S3_ENDPOINT=${S3_ENDPOINT}" -e "AWS_REGION=eu2" -e "GPG_PASSPHRASE=${GPG_PASSPHRASE}" ${IMAGE_NAME} restore --storage s3 -f ${FILE_NAME} #--path /custom-path docker-run-ssh: docker-build - docker run --rm --network web --name pg-bkup -e "DB_HOST=${DB_HOST}" -e "DB_NAME=${DB_NAME}" -e "DB_USERNAME=${DB_USERNAME}" -e "DB_PASSWORD=${DB_PASSWORD}" -e "SSH_USER=${SSH_USER}" -e "SSH_HOST_NAME=${SSH_HOST_NAME}" -e "SSH_REMOTE_PATH=${SSH_REMOTE_PATH}" -e "SSH_PASSWORD=${SSH_PASSWORD}" -e "SSH_PORT=${SSH_PORT}" -e "SSH_IDENTIFY_FILE=${SSH_IDENTIFY_FILE}" -e "GPG_PASSPHRASE=${GPG_PASSPHRASE}" ${IMAGE_NAME} bkup backup --storage ssh + docker run --rm --network web --name pg-bkup -e "DB_HOST=${DB_HOST}" -e "DB_NAME=${DB_NAME}" -e "DB_USERNAME=${DB_USERNAME}" -e "DB_PASSWORD=${DB_PASSWORD}" -e "SSH_USER=${SSH_USER}" -e "SSH_HOST_NAME=${SSH_HOST_NAME}" -e "SSH_REMOTE_PATH=${SSH_REMOTE_PATH}" -e "SSH_PASSWORD=${SSH_PASSWORD}" -e "SSH_PORT=${SSH_PORT}" -e "SSH_IDENTIFY_FILE=${SSH_IDENTIFY_FILE}" -e "GPG_PASSPHRASE=${GPG_PASSPHRASE}" ${IMAGE_NAME} backup --storage ssh docker-run-scheduled-ssh: docker-build - docker run --rm --network web --name pg-bkup -e "DB_HOST=${DB_HOST}" -e "DB_NAME=${DB_NAME}" -e "DB_USERNAME=${DB_USERNAME}" -e "DB_PASSWORD=${DB_PASSWORD}" -e "SSH_USER=${SSH_USER}" -e "SSH_HOST_NAME=${SSH_HOST_NAME}" -e "SSH_REMOTE_PATH=${SSH_REMOTE_PATH}" -e "SSH_PASSWORD=${SSH_PASSWORD}" -e "SSH_PORT=${SSH_PORT}" -e "SSH_IDENTIFY_FILE=${SSH_IDENTIFY_FILE}" -e "GPG_PASSPHRASE=${GPG_PASSPHRASE}" ${IMAGE_NAME} bkup backup --storage ssh --mode scheduled --period "* * * * *" + docker run --rm --network web --name pg-bkup -e "DB_HOST=${DB_HOST}" -e "DB_NAME=${DB_NAME}" -e "DB_USERNAME=${DB_USERNAME}" -e "DB_PASSWORD=${DB_PASSWORD}" -e "SSH_USER=${SSH_USER}" -e "SSH_HOST_NAME=${SSH_HOST_NAME}" -e "SSH_REMOTE_PATH=${SSH_REMOTE_PATH}" -e "SSH_PASSWORD=${SSH_PASSWORD}" -e "SSH_PORT=${SSH_PORT}" -e "SSH_IDENTIFY_FILE=${SSH_IDENTIFY_FILE}" -e "GPG_PASSPHRASE=${GPG_PASSPHRASE}" ${IMAGE_NAME} backup --storage ssh --mode scheduled --period "* * * * *" docker-restore-ssh: docker-build - docker run --rm --network web --name pg-bkup -e "DB_HOST=${DB_HOST}" -e "DB_NAME=${DB_NAME}" -e "DB_USERNAME=${DB_USERNAME}" -e "DB_PASSWORD=${DB_PASSWORD}" -e "SSH_USER=${SSH_USER}" -e "SSH_HOST_NAME=${SSH_HOST_NAME}" -e "SSH_REMOTE_PATH=${SSH_REMOTE_PATH}" -e "SSH_PASSWORD=${SSH_PASSWORD}" -e "SSH_PORT=${SSH_PORT}" -e "GPG_PASSPHRASE=${GPG_PASSPHRASE}" -e "SSH_IDENTIFY_FILE=${SSH_IDENTIFY_FILE}" ${IMAGE_NAME} bkup restore --storage ssh -f ${FILE_NAME} + docker run --rm --network web --name pg-bkup -e "DB_HOST=${DB_HOST}" -e "DB_NAME=${DB_NAME}" -e "DB_USERNAME=${DB_USERNAME}" -e "DB_PASSWORD=${DB_PASSWORD}" -e "SSH_USER=${SSH_USER}" -e "SSH_HOST_NAME=${SSH_HOST_NAME}" -e "SSH_REMOTE_PATH=${SSH_REMOTE_PATH}" -e "SSH_PASSWORD=${SSH_PASSWORD}" -e "SSH_PORT=${SSH_PORT}" -e "GPG_PASSPHRASE=${GPG_PASSPHRASE}" -e "SSH_IDENTIFY_FILE=${SSH_IDENTIFY_FILE}" ${IMAGE_NAME} restore --storage ssh -f ${FILE_NAME} run-docs: cd docs && bundle exec jekyll serve -H 0.0.0.0 -t \ No newline at end of file diff --git a/README.md b/README.md index 0c0b6d8..361ac52 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # PostgreSQL Backup -pg-bkup is a Docker container image that can be used to backup and restore Postgres database. It supports local storage, AWS S3 or any S3 Alternatives for Object Storage, and SSH compatible storage. +PostgreSQL Backup is a Docker container image that can be used to backup and restore Postgres database. It supports local storage, AWS S3 or any S3 Alternatives for Object Storage, and SSH compatible storage. It also supports __encrypting__ your backups using GPG. The [jkaninda/pg-bkup](https://hub.docker.com/r/jkaninda/pg-bkup) Docker image can be deployed on Docker, Docker Swarm and Kubernetes. @@ -13,6 +13,7 @@ It also supports __encrypting__ your backups using GPG. ![Docker Pulls](https://img.shields.io/docker/pulls/jkaninda/pg-bkup?style=flat-square) - Docker +- Docker Swarm - Kubernetes ## Documentation is found at @@ -36,7 +37,7 @@ It also supports __encrypting__ your backups using GPG. ### Simple backup using Docker CLI -To run a one time backup, bind your local volume to `/backup` in the container and run the `pg-bkup backup` command: +To run a one time backup, bind your local volume to `/backup` in the container and run the `backup` command: ```shell docker run --rm --network your_network_name \ @@ -44,7 +45,7 @@ To run a one time backup, bind your local volume to `/backup` in the container a -e "DB_HOST=dbhost" \ -e "DB_USERNAME=username" \ -e "DB_PASSWORD=password" \ - jkaninda/pg-bkup pg-bkup backup -d database_name + jkaninda/pg-bkup backup -d database_name ``` Alternatively, pass a `--env-file` in order to use a full config as described below. @@ -61,10 +62,7 @@ services: # for a list of available releases. image: jkaninda/pg-bkup container_name: pg-bkup - command: - - /bin/sh - - -c - - pg-bkup backup + command: backup volumes: - ./backup:/backup environment: @@ -89,7 +87,7 @@ For Kubernetes, you don't need to run it in scheduled mode. You can deploy it as apiVersion: batch/v1 kind: CronJob metadata: - name: bkup-job + name: backup-job spec: schedule: "0 1 * * *" jobTemplate: @@ -98,11 +96,17 @@ spec: spec: containers: - name: pg-bkup + # In production, it is advised to lock your image tag to a proper + # release version instead of using `latest`. + # Check https://github.com/jkaninda/pg-bkup/releases + # for a list of available releases. image: jkaninda/pg-bkup command: - - /bin/sh - - -c - - pg-bkup backup -s s3 --path /custom_path + - bkup + - backup + - --storage + - s3 + - --disable-compression env: - name: DB_PORT value: "5432" diff --git a/cmd/root.go b/cmd/root.go index d3688ec..613a335 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -35,7 +35,6 @@ func init() { rootCmd.PersistentFlags().StringP("dbname", "d", "", "Database name") rootCmd.PersistentFlags().IntP("port", "p", 5432, "Database port") rootCmd.PersistentFlags().StringVarP(&operation, "operation", "o", "", "Set operation, for old version only") - rootCmd.AddCommand(VersionCmd) rootCmd.AddCommand(BackupCmd) rootCmd.AddCommand(RestoreCmd) diff --git a/docker/Dockerfile b/docker/Dockerfile index 632a1b4..5bad1be 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -31,7 +31,7 @@ ENV SSH_HOST_NAME="" ENV SSH_IDENTIFY_FILE="" ENV SSH_PORT="22" ARG DEBIAN_FRONTEND=noninteractive -ENV VERSION="v1.2.0" +ENV VERSION="v1.2.1" ARG WORKDIR="/app" ARG BACKUPDIR="/backup" ARG BACKUP_TMP_DIR="/tmp/backup" @@ -65,4 +65,4 @@ RUN ln -s /usr/local/bin/pg-bkup /usr/local/bin/bkup ADD docker/supervisord.conf /etc/supervisor/supervisord.conf WORKDIR $WORKDIR -#ENTRYPOINT ["/usr/local/bin/pg-bkup"] +ENTRYPOINT ["/usr/local/bin/pg-bkup"] diff --git a/docs/how-tos/backup-to-s3.md b/docs/how-tos/backup-to-s3.md index 312e9ee..5fe120b 100644 --- a/docs/how-tos/backup-to-s3.md +++ b/docs/how-tos/backup-to-s3.md @@ -22,10 +22,7 @@ services: # for a list of available releases. image: jkaninda/pg-bkup container_name: pg-bkup - command: - - /bin/sh - - -c - - pg-bkup backup --storage s3 -d database --path /my-custom-path + command: backup --storage s3 -d database --path /my-custom-path environment: - DB_PORT=5432 - DB_HOST=postgres @@ -62,10 +59,7 @@ services: # for a list of available releases. image: jkaninda/pg-bkup container_name: pg-bkup - command: - - /bin/sh - - -c - - pg-bkup backup --storage s3 -d my-database --mode scheduled --period "0 1 * * *" + command: backup --storage s3 -d my-database --mode scheduled --period "0 1 * * *" environment: - DB_PORT=5432 - DB_HOST=postgres diff --git a/docs/how-tos/backup-to-ssh.md b/docs/how-tos/backup-to-ssh.md index 4d75030..2ba01d9 100644 --- a/docs/how-tos/backup-to-ssh.md +++ b/docs/how-tos/backup-to-ssh.md @@ -23,10 +23,7 @@ services: # for a list of available releases. image: jkaninda/pg-bkup container_name: pg-bkup - command: - - /bin/sh - - -c - - pg-bkup backup --storage remote -d database + command: backup --storage remote -d database volumes: - ./id_ed25519:/tmp/id_ed25519" environment: diff --git a/docs/how-tos/backup.md b/docs/how-tos/backup.md index bf43d42..703fe8a 100644 --- a/docs/how-tos/backup.md +++ b/docs/how-tos/backup.md @@ -7,7 +7,7 @@ nav_order: 1 # Backup database -To backup the database, you need to add `backup` subcommand to `pg-bkup` or `bkup`. +To backup the database, you need to add `backup` command. {: .note } The default storage is local storage mounted to __/backup__. The backup is compressed by default using gzip. The flag __`disable-compression`__ can be used when you need to disable backup compression. @@ -15,7 +15,9 @@ The default storage is local storage mounted to __/backup__. The backup is compr {: .warning } Creating a user for backup tasks who has read-only access is recommended! -The backup process can be run in scheduled mode for the recurring backups. +The backup process can be run in scheduled mode for the recurring backups on Docker or Docker Swarm. +On Kubernetes it can be run as CronJob, you don't need to run it in Scheduled mode. + It handles __recurring__ backups of postgres database on Docker and can be deployed as __CronJob on Kubernetes__ using local, AWS S3 or SSH compatible storage. ```yml @@ -27,10 +29,7 @@ services: # for a list of available releases. image: jkaninda/pg-bkup container_name: pg-bkup - command: - - /bin/sh - - -c - - pg-bkup backup -d database + command: backup -d database volumes: - ./backup:/backup environment: @@ -54,7 +53,7 @@ networks: -e "DB_HOST=dbhost" \ -e "DB_USERNAME=username" \ -e "DB_PASSWORD=password" \ - jkaninda/pg-bkup pg-bkup backup -d database_name + jkaninda/pg-bkup backup -d database_name ``` In case you need to use recurring backups, you can use `--mode scheduled` and specify the periodical backup time by adding `--period "0 1 * * *"` flag as described below. @@ -68,10 +67,7 @@ services: # for a list of available releases. image: jkaninda/pg-bkup container_name: pg-bkup - command: - - /bin/sh - - -c - - pg-bkup backup -d database --mode scheduled --period "0 1 * * *" + #command: backup -d database --mode scheduled --period "0 1 * * *" volumes: - ./backup:/backup environment: diff --git a/docs/how-tos/deploy-on-kubernetes.md b/docs/how-tos/deploy-on-kubernetes.md new file mode 100644 index 0000000..964e855 --- /dev/null +++ b/docs/how-tos/deploy-on-kubernetes.md @@ -0,0 +1,244 @@ +--- +title: Deploy on Kubernetes +layout: default +parent: How Tos +nav_order: 8 +--- + +## Deploy on Kubernetes + +To deploy PostgreSQL Backup on Kubernetes, you can use Job to backup or Restore your database. +For recurring backup you can use CronJob, you don't need to run it in scheduled mode. as described bellow. + +## Backup Job + +```yaml +apiVersion: batch/v1 +kind: Job +metadata: + name: backup +spec: + ttlSecondsAfterFinished: 100 + template: + spec: + containers: + - name: pg-bkup + # In production, it is advised to lock your image tag to a proper + # release version instead of using `latest`. + # Check https://github.com/jkaninda/pg-bkup/releases + # for a list of available releases. + image: jkaninda/pg-bkup + command: + - bkup + - backup + - --storage + - ssh + - --disable-compression + resources: + limits: + memory: "128Mi" + cpu: "500m" + env: + - name: DB_PORT + value: "5432" + - name: DB_HOST + value: "" + - name: DB_NAME + value: "dbname" + - name: DB_USERNAME + value: "postgres" + # Please use secret! + - name: DB_PASSWORD + value: "" + - name: SSH_HOST_NAME + value: "xxx" + - name: SSH_PORT + value: "22" + - name: SSH_USER + value: "xxx" + - name: SSH_PASSWORD + value: "xxxx" + - name: SSH_REMOTE_PATH + value: "/home/toto/backup" + # Optional, required if you want to encrypt your backup + - name: GPG_PASSPHRASE + value: "xxxx" + restartPolicy: Never +``` + +## Restore Job + +```yaml +apiVersion: batch/v1 +kind: Job +metadata: + name: restore-job +spec: + ttlSecondsAfterFinished: 100 + template: + spec: + containers: + - name: pg-bkup + # In production, it is advised to lock your image tag to a proper + # release version instead of using `latest`. + # Check https://github.com/jkaninda/pg-bkup/releases + # for a list of available releases. + image: jkaninda/pg-bkup + command: + - bkup + - restore + - --storage + - ssh + - --file store_20231219_022941.sql.gz + resources: + limits: + memory: "128Mi" + cpu: "500m" + env: + - name: DB_PORT + value: "5432" + - name: DB_HOST + value: "" + - name: DB_NAME + value: "dbname" + - name: DB_USERNAME + value: "postgres" + # Please use secret! + - name: DB_PASSWORD + value: "" + - name: SSH_HOST_NAME + value: "xxx" + - name: SSH_PORT + value: "22" + - name: SSH_USER + value: "xxx" + - name: SSH_PASSWORD + value: "xxxx" + - name: SSH_REMOTE_PATH + value: "/home/toto/backup" + # Optional, required if your backup was encrypted + #- name: GPG_PASSPHRASE + # value: "xxxx" + restartPolicy: Never +``` + +## Recurring backup + +```yaml +apiVersion: batch/v1 +kind: CronJob +metadata: + name: backup-job +spec: + schedule: "* * * * *" + jobTemplate: + spec: + template: + spec: + containers: + - name: pg-bkup + # In production, it is advised to lock your image tag to a proper + # release version instead of using `latest`. + # Check https://github.com/jkaninda/pg-bkup/releases + # for a list of available releases. + image: jkaninda/pg-bkup + command: + - bkup + - backup + - --storage + - ssh + - --disable-compression + resources: + limits: + memory: "128Mi" + cpu: "500m" + env: + - name: DB_PORT + value: "5432" + - name: DB_HOST + value: "" + - name: DB_NAME + value: "test" + - name: DB_USERNAME + value: "postgres" + # Please use secret! + - name: DB_PASSWORD + value: "" + - name: SSH_HOST_NAME + value: "192.168.1.16" + - name: SSH_PORT + value: "2222" + - name: SSH_USER + value: "jkaninda" + - name: SSH_REMOTE_PATH + value: "/config/backup" + - name: SSH_PASSWORD + value: "password" + # Optional, required if you want to encrypt your backup + #- name: GPG_PASSPHRASE + # value: "xxx" + restartPolicy: Never +``` + +## Kubernetes Rootless + + +```yaml +apiVersion: batch/v1 +kind: CronJob +metadata: + name: backup-job +spec: + schedule: "* * * * *" + jobTemplate: + spec: + template: + spec: + securityContext: + runAsUser: 1000 + runAsGroup: 3000 + fsGroup: 2000 + containers: + - name: pg-bkup + # In production, it is advised to lock your image tag to a proper + # release version instead of using `latest`. + # Check https://github.com/jkaninda/pg-bkup/releases + # for a list of available releases. + image: jkaninda/pg-bkup + command: + - bkup + - backup + - --storage + - ssh + - --disable-compression + resources: + limits: + memory: "128Mi" + cpu: "500m" + env: + - name: DB_PORT + value: "5432" + - name: DB_HOST + value: "" + - name: DB_NAME + value: "test" + - name: DB_USERNAME + value: "postgres" + # Please use secret! + - name: DB_PASSWORD + value: "" + - name: SSH_HOST_NAME + value: "192.168.1.16" + - name: SSH_PORT + value: "2222" + - name: SSH_USER + value: "jkaninda" + - name: SSH_REMOTE_PATH + value: "/config/backup" + - name: SSH_PASSWORD + value: "password" + # Optional, required if you want to encrypt your backup + #- name: GPG_PASSPHRASE + # value: "xxx" + restartPolicy: OnFailure +``` diff --git a/docs/how-tos/encrypt-backup.md b/docs/how-tos/encrypt-backup.md index 8213aaf..4dea4b1 100644 --- a/docs/how-tos/encrypt-backup.md +++ b/docs/how-tos/encrypt-backup.md @@ -30,10 +30,7 @@ services: # for a list of available releases. image: jkaninda/pg-bkup container_name: pg-bkup - command: - - /bin/sh - - -c - - pg-bkup backup -d database + command: backup -d database volumes: - ./backup:/backup environment: diff --git a/docs/how-tos/restore-from-s3.md b/docs/how-tos/restore-from-s3.md index 2580ac8..dff1909 100644 --- a/docs/how-tos/restore-from-s3.md +++ b/docs/how-tos/restore-from-s3.md @@ -7,7 +7,7 @@ nav_order: 5 # Restore database from S3 storage -To restore the database, you need to add `restore` subcommand to `pg-bkup` or `bkup` and specify the file to restore by adding `--file store_20231219_022941.sql.gz`. +To restore the database, you need to add `restore` command and specify the file to restore by adding `--file store_20231219_022941.sql.gz`. {: .note } It supports __.sql__ and __.sql.gz__ compressed file. @@ -23,10 +23,7 @@ services: # for a list of available releases. image: jkaninda/pg-bkup container_name: pg-bkup - command: - - /bin/sh - - -c - - bkup restore --storage s3 -d my-database -f store_20231219_022941.sql.gz --path /my-custom-path + command: restore --storage s3 -d my-database -f store_20231219_022941.sql.gz --path /my-custom-path volumes: - ./backup:/backup environment: diff --git a/docs/how-tos/restore-from-ssh.md b/docs/how-tos/restore-from-ssh.md index 12810e4..b6ffc81 100644 --- a/docs/how-tos/restore-from-ssh.md +++ b/docs/how-tos/restore-from-ssh.md @@ -6,7 +6,7 @@ nav_order: 6 --- # Restore database from SSH remote server -To restore the database from your remote server, you need to add `restore` subcommand to `pg-bkup` or `bkup` and specify the file to restore by adding `--file store_20231219_022941.sql.gz`. +To restore the database from your remote server, you need to add `restore` command and specify the file to restore by adding `--file store_20231219_022941.sql.gz`. {: .note } It supports __.sql__ and __.sql.gz__ compressed file. @@ -22,10 +22,7 @@ services: # for a list of available releases. image: jkaninda/pg-bkup container_name: pg-bkup - command: - - /bin/sh - - -c - - pg-bkup restore --storage ssh -d my-database -f store_20231219_022941.sql.gz --path /home/jkaninda/backups + command: restore --storage ssh -d my-database -f store_20231219_022941.sql.gz --path /home/jkaninda/backups volumes: - ./backup:/backup environment: diff --git a/docs/how-tos/restore.md b/docs/how-tos/restore.md index 8acc16f..d8f8f56 100644 --- a/docs/how-tos/restore.md +++ b/docs/how-tos/restore.md @@ -7,7 +7,7 @@ nav_order: 4 # Restore database -To restore the database, you need to add `restore` subcommand to `pg-bkup` or `bkup` and specify the file to restore by adding `--file store_20231219_022941.sql.gz`. +To restore the database, you need to add `restore` command and specify the file to restore by adding `--file store_20231219_022941.sql.gz`. {: .note } It supports __.sql__ and __.sql.gz__ compressed file. @@ -23,10 +23,7 @@ services: # for a list of available releases. image: jkaninda/pg-bkup container_name: pg-bkup - command: - - /bin/sh - - -c - - pg-bkup restore -d database -f store_20231219_022941.sql.gz + command: restore -d database -f store_20231219_022941.sql.gz volumes: - ./backup:/backup environment: diff --git a/docs/index.md b/docs/index.md index ace5e52..320f55b 100644 --- a/docs/index.md +++ b/docs/index.md @@ -6,7 +6,7 @@ nav_order: 1 # About pg-bkup {:.no_toc} -pg-bkup is a Docker container image that can be used to backup and restore Postgres database. It supports local storage, AWS S3 or any S3 Alternatives for Object Storage, and SSH compatible storage. +PostreSQL Backup is a Docker container image that can be used to backup and restore Postgres database. It supports local storage, AWS S3 or any S3 Alternatives for Object Storage, and SSH compatible storage. It also supports __encrypting__ your backups using GPG. We are open to receiving stars, PRs, and issues! @@ -32,7 +32,7 @@ Code and documentation for `v1` version on [this branch][v1-branch]. ### Simple backup using Docker CLI -To run a one time backup, bind your local volume to `/backup` in the container and run the `pg-bkup backup` command: +To run a one time backup, bind your local volume to `/backup` in the container and run the `backup` command: ```shell docker run --rm --network your_network_name \ @@ -40,7 +40,7 @@ To run a one time backup, bind your local volume to `/backup` in the container a -e "DB_HOST=dbhost" \ -e "DB_USERNAME=username" \ -e "DB_PASSWORD=password" \ - jkaninda/pg-bkup pg-bkup backup -d database_name + jkaninda/pg-bkup backup -d database_name ``` Alternatively, pass a `--env-file` in order to use a full config as described below. @@ -56,10 +56,7 @@ services: # for a list of available releases. image: jkaninda/pg-bkup container_name: pg-bkup - command: - - /bin/sh - - -c - - pg-bkup backup + command: backup volumes: - ./backup:/backup environment: @@ -81,8 +78,8 @@ This Docker image is published to both Docker Hub and the GitHub container regis Depending on your preferences and needs, you can reference both `jkaninda/pg-bkup` as well as `ghcr.io/jkaninda/pg-bkup`: ``` -docker pull jkaninda/pg-bkup:v1.2.0 -docker pull ghcr.io/jkaninda/pg-bkup:v1.2.0 +docker pull jkaninda/pg-bkup +docker pull ghcr.io/jkaninda/pg-bkup ``` Documentation references Docker Hub, but all examples will work using ghcr.io just as well. diff --git a/examples/docker-compose.s3.yaml b/examples/docker-compose.s3.yaml index 15ac3d1..8d4d6ea 100644 --- a/examples/docker-compose.s3.yaml +++ b/examples/docker-compose.s3.yaml @@ -6,10 +6,7 @@ services: # for a list of available releases. image: jkaninda/pg-bkup container_name: pg-bkup - command: - - /bin/sh - - -c - - pg-bkup backup --storage s3 -d my-database" + command: backup --storage s3 -d my-database" environment: - DB_PORT=5432 - DB_HOST=postgres diff --git a/examples/docker-compose.scheduled.local.yaml b/examples/docker-compose.scheduled.local.yaml index d04fe9e..8e2ccf4 100644 --- a/examples/docker-compose.scheduled.local.yaml +++ b/examples/docker-compose.scheduled.local.yaml @@ -3,10 +3,7 @@ services: pg-bkup: image: jkaninda/pg-bkup container_name: pg-bkup - command: - - /bin/sh - - -c - - pg-bkup backup --dbname database_name --mode scheduled --period "0 1 * * *" + command: backup --dbname database_name --mode scheduled --period "0 1 * * *" volumes: - ./backup:/backup environment: diff --git a/examples/docker-compose.scheduled.s3.yaml b/examples/docker-compose.scheduled.s3.yaml index b69e689..6e4e049 100644 --- a/examples/docker-compose.scheduled.s3.yaml +++ b/examples/docker-compose.scheduled.s3.yaml @@ -6,10 +6,7 @@ services: # for a list of available releases. image: jkaninda/pg-bkup container_name: pg-bkup - command: - - /bin/sh - - -c - - pg-bkup backup --storage s3 -d my-database --mode scheduled --period "0 1 * * *" + command: backup --storage s3 -d my-database --mode scheduled --period "0 1 * * *" environment: - DB_PORT=5432 - DB_HOST=postgres diff --git a/examples/docker-compose.yaml b/examples/docker-compose.yaml index 4807a69..895ac99 100644 --- a/examples/docker-compose.yaml +++ b/examples/docker-compose.yaml @@ -3,10 +3,7 @@ services: pg-bkup: image: jkaninda/pg-bkup container_name: pg-bkup - command: - - /bin/sh - - -c - - pg-bkup backup --dbname database_name + command: backup --dbname database_name volumes: - ./backup:/backup environment: