diff --git a/.env b/.env index 35601328..5e9a6c85 100644 --- a/.env +++ b/.env @@ -1,19 +1,21 @@ -ELASTICSEARCH_VERSION=8.12.2 -IMAGE_REPO=ghcr.io/zammad/zammad -MEMCACHE_SERVERS=zammad-memcached:11211 -MEMCACHE_VERSION=1.6.25-alpine -POSTGRES_DB=zammad_production -POSTGRES_PASS=zammad -POSTGRES_USER=zammad -POSTGRES_HOST=zammad-postgresql -POSTGRES_PORT=5432 -POSTGRES_VERSION=15.6-alpine -POSTGRESQL_OPTIONS=?pool=50 -REDIS_URL=redis://zammad-redis:6379 -REDIS_VERSION=7.2.4-alpine -RESTART=always +# ELASTICSEARCH_VERSION=8.12.2 +# IMAGE_REPO=ghcr.io/zammad/zammad +# MEMCACHE_SERVERS=zammad-memcached:11211 +# MEMCACHE_VERSION=1.6.25-alpine +# NGINX_PORT=8080 +# NGINX_EXPOSE_PORT=8080 +# POSTGRES_DB=zammad_production +# POSTGRES_PASS=zammad +# POSTGRES_USER=zammad +# POSTGRES_HOST=zammad-postgresql +# POSTGRES_PORT=5432 +# POSTGRES_VERSION=15.6-alpine +# POSTGRESQL_OPTIONS=?pool=50 +# REDIS_URL=redis://zammad-redis:6379 +# REDIS_VERSION=7.2.4-alpine +# RESTART=always # Use a fixed version. You are responsible to update this to newer patch level versions yourself. -VERSION=6.3.1 +# VERSION=6.3.1-38 # You can also use floating versions that will give you automatic updates: # VERSION=6.2 # all patchlevel updates # VERSION=6 # including minor updates diff --git a/docker-compose.override-local.yml b/docker-compose.override-local.yml index b42070b1..ccd3a1c1 100644 --- a/docker-compose.override-local.yml +++ b/docker-compose.override-local.yml @@ -3,6 +3,9 @@ version: '3.8' services: + zammad-backup: + image: zammad-local + zammad-init: image: zammad-local diff --git a/docker-compose.override.yml b/docker-compose.override.yml deleted file mode 100644 index cccfd4d0..00000000 --- a/docker-compose.override.yml +++ /dev/null @@ -1,8 +0,0 @@ ---- -version: '3.8' - -services: - - zammad-nginx: - ports: - - "8080:8080" diff --git a/docker-compose.yml b/docker-compose.yml index 54387941..b4d927af 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,13 +4,20 @@ version: '3.8' x-shared: zammad-service: &zammad-service environment: &zammad-environment - MEMCACHE_SERVERS: ${MEMCACHE_SERVERS} - POSTGRESQL_DB: ${POSTGRES_DB} - POSTGRESQL_HOST: ${POSTGRES_HOST} - POSTGRESQL_USER: ${POSTGRES_USER} - POSTGRESQL_PASS: ${POSTGRES_PASS} - POSTGRESQL_PORT: ${POSTGRES_PORT} - REDIS_URL: ${REDIS_URL} + MEMCACHE_SERVERS: ${MEMCACHE_SERVERS:-zammad-memcached:11211} + POSTGRESQL_DB: ${POSTGRES_DB:-zammad_production} + POSTGRESQL_HOST: ${POSTGRES_HOST:-zammad-postgresql} + POSTGRESQL_USER: ${POSTGRES_USER:-zammad} + POSTGRESQL_PASS: ${POSTGRES_PASS:-zammad} + POSTGRESQL_PORT: ${POSTGRES_PORT:-5432} + POSTGRESQL_OPTIONS: ${POSTGRESQL_OPTIONS:-?pool=50} + POSTGRESQL_DB_CREATE: + REDIS_URL: ${REDIS_URL:-redis://zammad-redis:6379} + # Backup settings + BACKUP_DIR: "${BACKUP_DIR:-/var/tmp/zammad}" + BACKUP_TIME: "${BACKUP_TIME:-03:00}" + HOLD_DAYS: "${HOLD_DAYS:-10}" + TZ: "${TZ:-Europe/Berlin}" # Allow passing in these variables via .env: AUTOWIZARD_JSON: AUTOWIZARD_RELATIVE_PATH: @@ -24,15 +31,13 @@ x-shared: NGINX_PORT: NGINX_SERVER_NAME: NGINX_SERVER_SCHEME: - POSTGRESQL_DB_CREATE: - POSTGRESQL_OPTIONS: RAILS_TRUSTED_PROXIES: ZAMMAD_WEB_CONCURRENCY: ZAMMAD_SESSION_JOBS: ZAMMAD_PROCESS_SCHEDULED: ZAMMAD_PROCESS_DELAYED_JOBS_WORKERS: - image: ${IMAGE_REPO}:${VERSION} - restart: ${RESTART} + image: ${IMAGE_REPO:-ghcr.io/zammad/zammad}:${VERSION:-6.3.1-38} + restart: ${RESTART:-always} volumes: - zammad-storage:/opt/zammad/storage depends_on: @@ -43,26 +48,16 @@ x-shared: services: zammad-backup: + <<: *zammad-service command: ["zammad-backup"] - depends_on: - - zammad-railsserver - - zammad-postgresql - entrypoint: /usr/local/bin/backup.sh - environment: - <<: *zammad-environment - BACKUP_TIME: "03:00" - HOLD_DAYS: "10" - TZ: Europe/Berlin - image: postgres:${POSTGRES_VERSION} - restart: ${RESTART} volumes: - zammad-backup:/var/tmp/zammad - zammad-storage:/opt/zammad/storage:ro - - ./scripts/backup.sh:/usr/local/bin/backup.sh:ro + user: 0:0 zammad-elasticsearch: - image: bitnami/elasticsearch:${ELASTICSEARCH_VERSION} - restart: ${RESTART} + image: bitnami/elasticsearch:${ELASTICSEARCH_VERSION:-8.12.2} + restart: ${RESTART:-always} volumes: - elasticsearch-data:/bitnami/elasticsearch/data @@ -73,29 +68,29 @@ services: - zammad-postgresql restart: on-failure user: 0:0 - volumes: - - zammad-storage:/opt/zammad/storage zammad-memcached: command: memcached -m 256M - image: memcached:${MEMCACHE_VERSION} - restart: ${RESTART} + image: memcached:${MEMCACHE_VERSION:-1.6.25-alpine} + restart: ${RESTART:-always} zammad-nginx: <<: *zammad-service command: ["zammad-nginx"] expose: - - "8080" + - "${NGINX_PORT:-8080}" + ports: + - "${NGINX_EXPOSE_PORT:-8080}:${NGINX_PORT:-8080}" depends_on: - zammad-railsserver zammad-postgresql: environment: - POSTGRES_DB: ${POSTGRES_DB} - POSTGRES_USER: ${POSTGRES_USER} - POSTGRES_PASSWORD: ${POSTGRES_PASS} - image: postgres:${POSTGRES_VERSION} - restart: ${RESTART} + POSTGRES_DB: ${POSTGRES_DB:-zammad_production} + POSTGRES_USER: ${POSTGRES_USER:-zammad} + POSTGRES_PASSWORD: ${POSTGRES_PASS:-zammad} + image: postgres:${POSTGRES_VERSION:-15.6-alpine} + restart: ${RESTART:-always} volumes: - postgresql-data:/var/lib/postgresql/data @@ -104,8 +99,8 @@ services: command: ["zammad-railsserver"] zammad-redis: - image: redis:${REDIS_VERSION} - restart: ${RESTART} + image: redis:${REDIS_VERSION:-7.2.4-alpine} + restart: ${RESTART:-always} volumes: - redis-data:/data diff --git a/scripts/backup.sh b/scripts/backup.sh deleted file mode 100755 index e0bf4a2a..00000000 --- a/scripts/backup.sh +++ /dev/null @@ -1,74 +0,0 @@ -#!/bin/bash - -set -e - -: "${ZAMMAD_DIR:=/opt/zammad/storage}" -: "${BACKUP_DIR:=/var/tmp/zammad}" -: "${BACKUP_TIME:=03:00}" -: "${HOLD_DAYS:=10}" -: "${ZAMMAD_RAILSSERVER_HOST:=zammad-railsserver}" -: "${ZAMMAD_RAILSSERVER_PORT:=3000}" -: "${POSTGRESQL_DB:=zammad_production}" -: "${POSTGRESQL_HOST:=zammad-postgresql}" -: "${POSTGRESQL_PORT:=5432}" -: "${POSTGRESQL_USER:=zammad}" -: "${POSTGRESQL_PASS:=zammad}" - - -function check_railsserver_available { - until (echo > "/dev/tcp/$ZAMMAD_RAILSSERVER_HOST/$ZAMMAD_RAILSSERVER_PORT") &> /dev/null; do - echo "waiting for railsserver to be ready..." - sleep 60 - done -} - -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 "${ZAMMAD_DIR}" - 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 :)" -} - -if [ "$1" = 'zammad-backup' ]; then - - check_railsserver_available - - 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 $((NEXT_TIMESTAMP - NOW_TIMESTAMP)) - done - -elif [ "$1" = 'zammad-backup-once' ]; then - check_railsserver_available - - zammad_backup - -elif [ "$1" = 'zammad-backup-db' ]; then - NO_FILE_BACKUP="yes" - - zammad_backup - -else - exec "$@" -fi