Browse Source

Maintenance: Add docker backup script to the Zammad image.

Martin Gruner 9 months ago
parent
commit
8061f84483
3 changed files with 52 additions and 1 deletions
  1. 43 0
      contrib/docker/backup.sh
  2. 8 0
      contrib/docker/docker-entrypoint.sh
  3. 1 1
      contrib/docker/setup.sh

+ 43 - 0
contrib/docker/backup.sh

@@ -0,0 +1,43 @@
+#!/bin/bash
+
+set -e
+
+: "${BACKUP_DIR:=/var/tmp/zammad}"
+: "${BACKUP_TIME:=03:00}"
+: "${HOLD_DAYS:=10}"
+
+function zammad_backup {
+  TIMESTAMP="$(date +'%Y%m%d%H%M%S')"
+
+  echo "${TIMESTAMP} - backing up zammad..."
+
+  # delete old backups
+  if [ -d "${BACKUP_DIR}" ] && [ -n "$(ls "${BACKUP_DIR}")" ]; then
+    find "${BACKUP_DIR}"/*_zammad_*.gz -type f -mtime +"${HOLD_DAYS}" -delete
+  fi
+
+  if [ "${NO_FILE_BACKUP}" != "yes" ]; then
+    # tar files
+    tar -czf "${BACKUP_DIR}"/"${TIMESTAMP}"_zammad_files.tar.gz /opt/zammad/storage
+  fi
+
+  #db backup
+  pg_dump --dbname=postgresql://"${POSTGRESQL_USER}:${POSTGRESQL_PASS}@${POSTGRESQL_HOST}:${POSTGRESQL_PORT}/${POSTGRESQL_DB}" | gzip > "${BACKUP_DIR}"/"${TIMESTAMP}"_zammad_db.psql.gz
+
+  echo "backup finished :)"
+}
+
+while true; do
+  NOW_TIMESTAMP=$(date +%s)
+  TOMORROW_DATE=$(date -d@"$((NOW_TIMESTAMP + 24*60*60))" +%Y-%m-%d)
+
+  zammad_backup
+
+  NEXT_TIMESTAMP=$(date -d "$TOMORROW_DATE $BACKUP_TIME" +%s)
+  NOW_TIMESTAMP=$(date +%s)
+  SLEEP_SECONDS=$((NEXT_TIMESTAMP - NOW_TIMESTAMP))
+
+  echo "sleeping $SLEEP_SECONDS seconds until the next backup run..."
+
+  sleep $SLEEP_SECONDS
+done

+ 8 - 0
contrib/docker/docker-entrypoint.sh

@@ -151,6 +151,14 @@ elif [ "$1" = 'zammad-websocket' ]; then
 
   exec bundle exec script/websocket-server.rb -b 0.0.0.0 -p "${ZAMMAD_WEBSOCKET_PORT}" start
 
+# zammad-backup
+elif [ "$1" = 'zammad-backup' ]; then
+  check_zammad_ready
+
+  echo "starting backup..."
+
+  exec contrib/docker/backup.sh
+
 # Pass all other container commands to shell
 else
   exec "$@"

+ 1 - 1
contrib/docker/setup.sh

@@ -4,7 +4,7 @@ set -e
 if [ "$1" = 'builder' ]; then
   PACKAGES="build-essential curl git libimlib2-dev libpq-dev shared-mime-info postgresql"
 elif [ "$1" = 'runner' ]; then
-  PACKAGES="curl libimlib2 libpq5 nginx gnupg"
+  PACKAGES="curl libimlib2 libpq5 nginx gnupg postgresql-client"
 fi
 
 apt-get update