From 8bed51d2435aafdf6c9bc01004c46b12ee6d0472 Mon Sep 17 00:00:00 2001 From: Sander Apweiler Date: Wed, 12 Feb 2020 10:41:06 +0100 Subject: [PATCH 1/2] Add container for creating regular DB dumps --- backup/Dockerfile | 19 +++++++++++++++++++ backup/crontab | 1 + backup/pgsqlbackup.sh | 30 ++++++++++++++++++++++++++++++ docker-compose.yml | 9 +++++++++ 4 files changed, 59 insertions(+) create mode 100644 backup/Dockerfile create mode 100644 backup/crontab create mode 100644 backup/pgsqlbackup.sh diff --git a/backup/Dockerfile b/backup/Dockerfile new file mode 100644 index 0000000..5839205 --- /dev/null +++ b/backup/Dockerfile @@ -0,0 +1,19 @@ +FROM alpine + +RUN apk add postgresql-client +RUN apk add dcron + +COPY pgsqlbackup.sh /usr/local/bin/pgsqlbackup.sh + +ENV DB_NAME="b2share" +ENV DB_HOST="postgres" +ENV DB_PORT="5432" + +# Create cron job +COPY crontab /etc/cron.d/pgsqlbackup-cron +RUN chmod 0644 /etc/cron.d/pgsqlbackup-cron + +RUN touch /test.txt + +CMD crond -s /etc/cron.d -b && tail -f /test.txt + diff --git a/backup/crontab b/backup/crontab new file mode 100644 index 0000000..5429279 --- /dev/null +++ b/backup/crontab @@ -0,0 +1 @@ +0 1 * * * /bin/sh /usr/local/bin/pgsqlbackup.sh 2>&1 diff --git a/backup/pgsqlbackup.sh b/backup/pgsqlbackup.sh new file mode 100644 index 0000000..143f5b7 --- /dev/null +++ b/backup/pgsqlbackup.sh @@ -0,0 +1,30 @@ +#!/bin/bash +# +# PostgreSQL Backup Script +# Dumps postgresql databases to a file for another backup tool to pick up. +# + +PATH=/usr/bin:/usr/sbin:/bin:/sbin +IFS=' ' + +##### START CONFIG ################################################### + +DBHOST=$DB_HOST +DBPORT=$DB_PORT +DBNAME=$DB_NAME +DBUSER=$POSTGRES_USER + +DIR=/usr/local/share/pgsql_dumps + +# Ensure backup directory exist. +if [ ! -d "${DIR}" ]; then + /bin/mkdir -p ${DIR} +fi + +PREFIX=pgsql_backup_ + +##### STOP CONFIG #################################################### +FILE="${DIR}/${PREFIX}${DBNAME}_`date +%Y%m%d-%H%M%S`.sql" +COMMAND="/usr/bin/pg_dump --file=${FILE} --blobs --dbname=${DBNAME} --host=${DBHOST} --port=${DBPORT} --username=${DBUSER}" +/bin/echo ${COMMAND} >> /test.txt +/usr/bin/pg_dump --file=${FILE} --blobs --dbname=${DBNAME} --host=${DBHOST} --port=${DBPORT} --username=${DBUSER} diff --git a/docker-compose.yml b/docker-compose.yml index d53cf99..80b9506 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -75,3 +75,12 @@ services: - "5672" volumes: - "${B2SHARE_DATADIR}/rabbitmq-data:/var/lib/rabbitmq" + + backup: + build: backup + environment: + - "PGPASSWORD=${B2SHARE_POSTGRESQL_PASSWORD}" + - "POSTGRES_USER=${B2SHARE_POSTGRESQL_USER}" + volumes: + - "${B2SHARE_DATADIR}/db_dump:/usr/local/share/pgsql_dumps" + From 8170124b6a5b9c9363855f5815343cc12dddbf36 Mon Sep 17 00:00:00 2001 From: Sander Apweiler Date: Thu, 24 Jun 2021 09:01:32 +0200 Subject: [PATCH 2/2] Add automized deletion of old database dumps --- backup/Dockerfile | 2 ++ backup/crontab | 1 + backup/drop_old_dumps.sh | 6 ++++++ docker-compose.yml | 1 + 4 files changed, 10 insertions(+) create mode 100644 backup/drop_old_dumps.sh diff --git a/backup/Dockerfile b/backup/Dockerfile index 5839205..d275a30 100644 --- a/backup/Dockerfile +++ b/backup/Dockerfile @@ -4,10 +4,12 @@ RUN apk add postgresql-client RUN apk add dcron COPY pgsqlbackup.sh /usr/local/bin/pgsqlbackup.sh +COPY drop_old_dumps.sh /usr/local/bin/drop_old_dumps.sh ENV DB_NAME="b2share" ENV DB_HOST="postgres" ENV DB_PORT="5432" +ENV NUMBER_OF_DUMPS="30" # Create cron job COPY crontab /etc/cron.d/pgsqlbackup-cron diff --git a/backup/crontab b/backup/crontab index 5429279..2e173b7 100644 --- a/backup/crontab +++ b/backup/crontab @@ -1 +1,2 @@ 0 1 * * * /bin/sh /usr/local/bin/pgsqlbackup.sh 2>&1 +0 2 * * * /bin/sh /usr/local/bin/drop_old_dumps.sh 2>&1 diff --git a/backup/drop_old_dumps.sh b/backup/drop_old_dumps.sh new file mode 100644 index 0000000..edda268 --- /dev/null +++ b/backup/drop_old_dumps.sh @@ -0,0 +1,6 @@ +#!/bin/bash +# +# Drop old database dumps. + +/usr/bin/find /usr/local/share/pgsql_dumps -type f -mtime +${NUMBER_OF_DUMPS} -delete + diff --git a/docker-compose.yml b/docker-compose.yml index 6ae73ae..e18e3f3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -112,6 +112,7 @@ services: # environment: # - "PGPASSWORD=${B2SHARE_POSTGRESQL_PASSWORD}" # - "POSTGRES_USER=${B2SHARE_POSTGRESQL_USER}" + # - "NUMBER_OF_DUMPS=30" # volumes: # - "${B2SHARE_DATADIR}/db_dump:/usr/local/share/pgsql_dumps"