diff --git a/.env.template b/.env.template index 11281e9..5f59ce1 100644 --- a/.env.template +++ b/.env.template @@ -3,8 +3,6 @@ DATABASE_PORT=5432 DATABASE_NAME=databaseofbabel DATABASE_USERNAME=metakgp_user DATABASE_PASSWORD=somerandomstringfordevelopment -# Path to secret file containing database access information(username, password, etc.) -DBPASSFILE= # Dropbox api variables(used for storing backups) DROPBOX_APP_KEY= DROPBOX_APP_SECRET= diff --git a/Dockerfile b/Dockerfile index 9a1a0f9..cb84776 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1 +1,9 @@ FROM postgres:16 + +RUN apt-get update && apt-get install -y curl python3 python3-pip gzip + +WORKDIR /backup + +COPY ./backup . + +RUN pip3 install -qr requirements.txt --break-system-packages \ No newline at end of file diff --git a/backup/Dockerfile b/backup/Dockerfile deleted file mode 100644 index 938798a..0000000 --- a/backup/Dockerfile +++ /dev/null @@ -1,28 +0,0 @@ -FROM postgres:16 - -RUN apt-get update && apt-get install -y curl python3 python3-pip gzip - -ENV TZ=Asia/Kolkata -RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone - -# install supercronic as cron replacement : https://github.com/aptible/supercronic?tab=readme-ov-file#why-supercronic -ENV SUPERCRONIC_URL=https://github.com/aptible/supercronic/releases/download/v0.2.30/supercronic-linux-amd64 \ - SUPERCRONIC=supercronic-linux-amd64 \ - SUPERCRONIC_SHA1SUM=9f27ad28c5c57cd133325b2a66bba69ba2235799 - -RUN curl -fsSLO "$SUPERCRONIC_URL" \ - && echo "${SUPERCRONIC_SHA1SUM} ${SUPERCRONIC}" | sha1sum -c - \ - && chmod +x "$SUPERCRONIC" \ - && mv "$SUPERCRONIC" "/usr/local/bin/${SUPERCRONIC}" \ - && ln -s "/usr/local/bin/${SUPERCRONIC}" /usr/local/bin/supercronic - -WORKDIR /root - -ARG DBPASSFILE - -COPY ./backup ./backup -COPY ${DBPASSFILE} ./.pgpass - -RUN pip3 install -qr ./backup/requirements.txt --break-system-packages - -CMD ["supercronic", "/root/backup/crontab"] diff --git a/backup/crontab b/backup/crontab deleted file mode 100644 index 7e8dcd7..0000000 --- a/backup/crontab +++ /dev/null @@ -1 +0,0 @@ -20 4 * * * /root/backup/run_backup.sh >> /var/log/backups.log 2>&1 diff --git a/backup/run_backup.sh b/backup/run_backup.sh index ca5661a..d85db6d 100755 --- a/backup/run_backup.sh +++ b/backup/run_backup.sh @@ -1,18 +1,18 @@ #!/usr/bin/env bash -echo -e "\n-- Database of Babel Backup and Rotation START --\n" +echo -e "\n-- Backup and Rotation started at `date +"%Y/%m/%d %H:%M:%S"` --\n" timestamp=$(date +%Y_%m_%d_%H_%M_%S) -backup_to_dropbox="python3 /root/backup/backup_to_dropbox.py" -rotate_backup="python3 /root/backup/rotate_backups.py" -backups_dir="/root/backup/backups" +backup_to_dropbox="python3 /backup/backup_to_dropbox.py" +rotate_backup="python3 /backup/rotate_backups.py" +backups_dir="/backup/backups" dump_file="dob_dump_$timestamp.sql" backup_file="$dump_file.gz" mkdir -p "${backups_dir}" cd "$backups_dir" -if ! pg_dumpall -U $POSTGRES_USER --no-password >$dump_file; then +if ! PGPASSWORD=$POSTGRES_PASSWORD pg_dumpall -U $POSTGRES_USER >$dump_file; then echo "pgdump failure!" exit 1 fi @@ -50,4 +50,4 @@ if ! $backup_to_dropbox $backup_file; then exit 1 fi -echo -e "\n-- Database of Babel Backup and Rotation END --\n" \ No newline at end of file +echo -e "\n-- Backup and Rotation finished at `date +"%Y/%m/%d %H:%M:%S"` --\n" diff --git a/docker-compose.yml b/docker-compose.yml index 72cba2e..ee33bfb 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -13,25 +13,6 @@ services: - POSTGRES_DB=${DATABASE_NAME} - PGPORT=${DATABASE_PORT} - PGHOST=${DATABASE_HOST} - volumes: - - db-volume:/var/lib/postgresql/data - restart: always - - backup: - build: - context: ./ - dockerfile: ./backup/Dockerfile - args: - - DBPASSFILE=${DBPASSFILE} - restart: always - networks: - metaploy-private-network: - depends_on: - - database - environment: - - PGHOST=database - - POSTGRES_USER=${DATABASE_USERNAME} - - PGPASSFILE=/root/.pgpass - DROPBOX_APP_KEY=${DROPBOX_APP_KEY} - DROPBOX_APP_SECRET=${DROPBOX_APP_SECRET} - DROPBOX_ACCESS_TOKEN=${DROPBOX_ACCESS_TOKEN} @@ -39,6 +20,16 @@ services: - SLACK_INCIDENTS_WH_URL=${SLACK_INCIDENTS_WH_URL} volumes: - db-volume:/var/lib/postgresql/data + healthcheck: + test: + [ + "CMD-SHELL", + "/backup/run_backup.sh >> /var/log/pg_dump.log 2>&1 || exit 1", + ] + interval: 24h + timeout: 2m + retries: 5 + restart: always networks: metaploy-private-network: