From 756362e74681029b926799461d50ae5a2a4d5da1 Mon Sep 17 00:00:00 2001 From: Nick Yeoman Date: Tue, 28 Oct 2025 10:36:57 -0700 Subject: [PATCH] Updated Zammad --- zammad/docker-compose.yml | 400 ++++++++++++++++++++++++++++++-------- zammad/sample.env | 20 +- 2 files changed, 330 insertions(+), 90 deletions(-) diff --git a/zammad/docker-compose.yml b/zammad/docker-compose.yml index 20028fb..1ca7d2a 100644 --- a/zammad/docker-compose.yml +++ b/zammad/docker-compose.yml @@ -1,9 +1,50 @@ ---- +services: + zammad-postgresql: + image: postgres:${POSTGRES_VERSION:-17.5-alpine} + restart: ${ZAMMAD_RESTART:-always} + volumes: + - ${VOL_PATH:-./data}/postgresql:/var/lib/postgresql/data + environment: + POSTGRES_DB: ${POSTGRES_DB:-zammad_production} + POSTGRES_USER: ${POSTGRES_USER:-zammad} + POSTGRES_PASSWORD: ${POSTGRES_PASS:-zammad} + networks: + - zammad -x-shared: - zammad-service: &zammad-service - environment: &zammad-environment - # Core database and caching + zammad-redis: + image: redis:${REDIS_VERSION:-7.4.5-alpine} + restart: ${ZAMMAD_RESTART:-always} + volumes: + - ${VOL_PATH:-./data}/redis:/data + networks: + - zammad + + zammad-memcached: + image: memcached:${MEMCACHE_VERSION:-1.6.39-alpine} + restart: ${ZAMMAD_RESTART:-always} + command: memcached -m 256M + networks: + - zammad + + zammad-elasticsearch: + image: elasticsearch:${ELASTICSEARCH_VERSION:-8.19.2} + restart: ${ZAMMAD_RESTART:-always} + volumes: + - ${VOL_PATH:-./data}/elasticsearch:/usr/share/elasticsearch/data + environment: + discovery.type: single-node + xpack.security.enabled: 'false' + ES_JAVA_OPTS: ${ELASTICSEARCH_JAVA_OPTS:--Xms1g -Xmx1g} + networks: + - zammad + + zammad-init: + image: ${ZAMMAD_IMAGE:-ghcr.io/zammad/zammad:latest} + restart: on-failure + volumes: + - ${VOL_PATH:-./data}/zammad/storage:/opt/zammad/storage + environment: + TZ: ${TZ:-America/Vancouver} MEMCACHE_SERVERS: ${MEMCACHE_SERVERS:-zammad-memcached:11211} POSTGRESQL_DB: ${POSTGRES_DB:-zammad_production} POSTGRESQL_HOST: ${POSTGRES_HOST:-zammad-postgresql} @@ -13,14 +54,10 @@ x-shared: POSTGRESQL_OPTIONS: ${POSTGRESQL_OPTIONS:-?pool=50} POSTGRESQL_DB_CREATE: ${POSTGRESQL_DB_CREATE:-true} REDIS_URL: ${REDIS_URL:-redis://zammad-redis:6379} - # Storage (S3 optional; leave empty for local) - S3_URL: ${S3_URL:-dummy} - # Backup settings + S3_URL: ${S3_URL:-} BACKUP_DIR: "${BACKUP_DIR:-/var/tmp/zammad}" BACKUP_TIME: "${BACKUP_TIME:-03:00}" HOLD_DAYS: "${HOLD_DAYS:-10}" - TZ: "${TZ:-Europe/Berlin}" - # Elasticsearch (defaults enable it with basic config) ELASTICSEARCH_ENABLED: ${ELASTICSEARCH_ENABLED:-true} ELASTICSEARCH_SCHEMA: ${ELASTICSEARCH_SCHEMA:-http} ELASTICSEARCH_HOST: ${ELASTICSEARCH_HOST:-zammad-elasticsearch} @@ -29,7 +66,6 @@ x-shared: ELASTICSEARCH_PASS: ${ELASTICSEARCH_PASS:-} ELASTICSEARCH_NAMESPACE: ${ELASTICSEARCH_NAMESPACE:-zammad} ELASTICSEARCH_REINDEX: ${ELASTICSEARCH_REINDEX:-} - # Zammad app config (no strict defaults; override in .env) AUTOWIZARD_JSON: ${AUTOWIZARD_JSON:-} AUTOWIZARD_RELATIVE_PATH: ${AUTOWIZARD_RELATIVE_PATH:-} ZAMMAD_HTTP_TYPE: ${ZAMMAD_HTTP_TYPE:-} @@ -38,101 +74,307 @@ x-shared: ZAMMAD_PROCESS_SESSIONS_JOBS_WORKERS: ${ZAMMAD_PROCESS_SESSIONS_JOBS_WORKERS:-} ZAMMAD_PROCESS_SCHEDULED_JOBS_WORKERS: ${ZAMMAD_PROCESS_SCHEDULED_JOBS_WORKERS:-} ZAMMAD_PROCESS_DELAYED_JOBS_WORKERS: ${ZAMMAD_PROCESS_DELAYED_JOBS_WORKERS:-} - # Deprecated (kept for compatibility) ZAMMAD_SESSION_JOBS_CONCURRENT: ${ZAMMAD_SESSION_JOBS_CONCURRENT:-} - # NGINX defaults NGINX_PORT: ${NGINX_PORT:-8080} NGINX_CLIENT_MAX_BODY_SIZE: ${NGINX_CLIENT_MAX_BODY_SIZE:-50M} NGINX_SERVER_NAME: ${NGINX_SERVER_NAME:-_} NGINX_SERVER_SCHEME: $scheme RAILS_TRUSTED_PROXIES: ${RAILS_TRUSTED_PROXIES:-"['127.0.0.1', '::1']"} - # Proxy vars (for nginx-proxy/acme-companion integration) VIRTUAL_HOST: ${VIRTUAL_HOST:-} VIRTUAL_PORT: ${VIRTUAL_PORT:-} LETSENCRYPT_HOST: ${LETSENCRYPT_HOST:-} LETSENCRYPT_EMAIL: ${LETSENCRYPT_EMAIL:-} - - image: ${IMAGE_REPO:-ghcr.io/zammad/zammad}:${VERSION:-6.5.2} - restart: ${RESTART:-always} - volumes: - - ${VOL_PATH:-./data}/zammad/storage:/opt/zammad/storage + networks: + - zammad depends_on: - - zammad-memcached - zammad-postgresql - zammad-redis - - zammad-elasticsearch # Conditional via ELASTICSEARCH_ENABLED, but include for safety + - zammad-memcached + - zammad-elasticsearch + command: ["zammad-init"] + user: 0:0 + + zammad-railsserver: + image: ${ZAMMAD_IMAGE:-ghcr.io/zammad/zammad:latest} + restart: ${ZAMMAD_RESTART:-always} + volumes: + - ${VOL_PATH:-./data}/zammad/storage:/opt/zammad/storage + environment: + TZ: ${TZ:-America/Vancouver} + 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: ${POSTGRESQL_DB_CREATE:-true} + REDIS_URL: ${REDIS_URL:-redis://zammad-redis:6379} + S3_URL: ${S3_URL:-} + BACKUP_DIR: "${BACKUP_DIR:-/var/tmp/zammad}" + BACKUP_TIME: "${BACKUP_TIME:-03:00}" + HOLD_DAYS: "${HOLD_DAYS:-10}" + ELASTICSEARCH_ENABLED: ${ELASTICSEARCH_ENABLED:-true} + ELASTICSEARCH_SCHEMA: ${ELASTICSEARCH_SCHEMA:-http} + ELASTICSEARCH_HOST: ${ELASTICSEARCH_HOST:-zammad-elasticsearch} + ELASTICSEARCH_PORT: ${ELASTICSEARCH_PORT:-9200} + ELASTICSEARCH_USER: ${ELASTICSEARCH_USER:-} + ELASTICSEARCH_PASS: ${ELASTICSEARCH_PASS:-} + ELASTICSEARCH_NAMESPACE: ${ELASTICSEARCH_NAMESPACE:-zammad} + ELASTICSEARCH_REINDEX: ${ELASTICSEARCH_REINDEX:-} + AUTOWIZARD_JSON: ${AUTOWIZARD_JSON:-} + AUTOWIZARD_RELATIVE_PATH: ${AUTOWIZARD_RELATIVE_PATH:-} + ZAMMAD_HTTP_TYPE: ${ZAMMAD_HTTP_TYPE:-} + ZAMMAD_FQDN: ${ZAMMAD_FQDN:-} + ZAMMAD_WEB_CONCURRENCY: ${ZAMMAD_WEB_CONCURRENCY:-} + ZAMMAD_PROCESS_SESSIONS_JOBS_WORKERS: ${ZAMMAD_PROCESS_SESSIONS_JOBS_WORKERS:-} + ZAMMAD_PROCESS_SCHEDULED_JOBS_WORKERS: ${ZAMMAD_PROCESS_SCHEDULED_JOBS_WORKERS:-} + ZAMMAD_PROCESS_DELAYED_JOBS_WORKERS: ${ZAMMAD_PROCESS_DELAYED_JOBS_WORKERS:-} + ZAMMAD_SESSION_JOBS_CONCURRENT: ${ZAMMAD_SESSION_JOBS_CONCURRENT:-} + NGINX_PORT: ${NGINX_PORT:-8080} + NGINX_CLIENT_MAX_BODY_SIZE: ${NGINX_CLIENT_MAX_BODY_SIZE:-50M} + NGINX_SERVER_NAME: ${NGINX_SERVER_NAME:-_} + NGINX_SERVER_SCHEME: $scheme + RAILS_TRUSTED_PROXIES: ${RAILS_TRUSTED_PROXIES:-"['127.0.0.1', '::1']"} + VIRTUAL_HOST: ${VIRTUAL_HOST:-} + VIRTUAL_PORT: ${VIRTUAL_PORT:-} + LETSENCRYPT_HOST: ${LETSENCRYPT_HOST:-} + LETSENCRYPT_EMAIL: ${LETSENCRYPT_EMAIL:-} + networks: + - zammad + depends_on: + - zammad-postgresql + - zammad-redis + - zammad-memcached + - zammad-elasticsearch + command: ["zammad-railsserver"] + + zammad-scheduler: + image: ${ZAMMAD_IMAGE:-ghcr.io/zammad/zammad:latest} + restart: ${ZAMMAD_RESTART:-always} + volumes: + - ${VOL_PATH:-./data}/zammad/storage:/opt/zammad/storage + environment: + TZ: ${TZ:-America/Vancouver} + 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: ${POSTGRESQL_DB_CREATE:-true} + REDIS_URL: ${REDIS_URL:-redis://zammad-redis:6379} + S3_URL: ${S3_URL:-} + BACKUP_DIR: "${BACKUP_DIR:-/var/tmp/zammad}" + BACKUP_TIME: "${BACKUP_TIME:-03:00}" + HOLD_DAYS: "${HOLD_DAYS:-10}" + ELASTICSEARCH_ENABLED: ${ELASTICSEARCH_ENABLED:-true} + ELASTICSEARCH_SCHEMA: ${ELASTICSEARCH_SCHEMA:-http} + ELASTICSEARCH_HOST: ${ELASTICSEARCH_HOST:-zammad-elasticsearch} + ELASTICSEARCH_PORT: ${ELASTICSEARCH_PORT:-9200} + ELASTICSEARCH_USER: ${ELASTICSEARCH_USER:-} + ELASTICSEARCH_PASS: ${ELASTICSEARCH_PASS:-} + ELASTICSEARCH_NAMESPACE: ${ELASTICSEARCH_NAMESPACE:-zammad} + ELASTICSEARCH_REINDEX: ${ELASTICSEARCH_REINDEX:-} + AUTOWIZARD_JSON: ${AUTOWIZARD_JSON:-} + AUTOWIZARD_RELATIVE_PATH: ${AUTOWIZARD_RELATIVE_PATH:-} + ZAMMAD_HTTP_TYPE: ${ZAMMAD_HTTP_TYPE:-} + ZAMMAD_FQDN: ${ZAMMAD_FQDN:-} + ZAMMAD_WEB_CONCURRENCY: ${ZAMMAD_WEB_CONCURRENCY:-} + ZAMMAD_PROCESS_SESSIONS_JOBS_WORKERS: ${ZAMMAD_PROCESS_SESSIONS_JOBS_WORKERS:-} + ZAMMAD_PROCESS_SCHEDULED_JOBS_WORKERS: ${ZAMMAD_PROCESS_SCHEDULED_JOBS_WORKERS:-} + ZAMMAD_PROCESS_DELAYED_JOBS_WORKERS: ${ZAMMAD_PROCESS_DELAYED_JOBS_WORKERS:-} + ZAMMAD_SESSION_JOBS_CONCURRENT: ${ZAMMAD_SESSION_JOBS_CONCURRENT:-} + NGINX_PORT: ${NGINX_PORT:-8080} + NGINX_CLIENT_MAX_BODY_SIZE: ${NGINX_CLIENT_MAX_BODY_SIZE:-50M} + NGINX_SERVER_NAME: ${NGINX_SERVER_NAME:-_} + NGINX_SERVER_SCHEME: $scheme + RAILS_TRUSTED_PROXIES: ${RAILS_TRUSTED_PROXIES:-"['127.0.0.1', '::1']"} + VIRTUAL_HOST: ${VIRTUAL_HOST:-} + VIRTUAL_PORT: ${VIRTUAL_PORT:-} + LETSENCRYPT_HOST: ${LETSENCRYPT_HOST:-} + LETSENCRYPT_EMAIL: ${LETSENCRYPT_EMAIL:-} + networks: + - zammad + depends_on: + - zammad-postgresql + - zammad-redis + - zammad-memcached + - zammad-elasticsearch + command: ["zammad-scheduler"] + + zammad-websocket: + image: ${ZAMMAD_IMAGE:-ghcr.io/zammad/zammad:latest} + restart: ${ZAMMAD_RESTART:-always} + volumes: + - ${VOL_PATH:-./data}/zammad/storage:/opt/zammad/storage + environment: + TZ: ${TZ:-America/Vancouver} + 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: ${POSTGRESQL_DB_CREATE:-true} + REDIS_URL: ${REDIS_URL:-redis://zammad-redis:6379} + S3_URL: ${S3_URL:-} + BACKUP_DIR: "${BACKUP_DIR:-/var/tmp/zammad}" + BACKUP_TIME: "${BACKUP_TIME:-03:00}" + HOLD_DAYS: "${HOLD_DAYS:-10}" + ELASTICSEARCH_ENABLED: ${ELASTICSEARCH_ENABLED:-true} + ELASTICSEARCH_SCHEMA: ${ELASTICSEARCH_SCHEMA:-http} + ELASTICSEARCH_HOST: ${ELASTICSEARCH_HOST:-zammad-elasticsearch} + ELASTICSEARCH_PORT: ${ELASTICSEARCH_PORT:-9200} + ELASTICSEARCH_USER: ${ELASTICSEARCH_USER:-} + ELASTICSEARCH_PASS: ${ELASTICSEARCH_PASS:-} + ELASTICSEARCH_NAMESPACE: ${ELASTICSEARCH_NAMESPACE:-zammad} + ELASTICSEARCH_REINDEX: ${ELASTICSEARCH_REINDEX:-} + AUTOWIZARD_JSON: ${AUTOWIZARD_JSON:-} + AUTOWIZARD_RELATIVE_PATH: ${AUTOWIZARD_RELATIVE_PATH:-} + ZAMMAD_HTTP_TYPE: ${ZAMMAD_HTTP_TYPE:-} + ZAMMAD_FQDN: ${ZAMMAD_FQDN:-} + ZAMMAD_WEB_CONCURRENCY: ${ZAMMAD_WEB_CONCURRENCY:-} + ZAMMAD_PROCESS_SESSIONS_JOBS_WORKERS: ${ZAMMAD_PROCESS_SESSIONS_JOBS_WORKERS:-} + ZAMMAD_PROCESS_SCHEDULED_JOBS_WORKERS: ${ZAMMAD_PROCESS_SCHEDULED_JOBS_WORKERS:-} + ZAMMAD_PROCESS_DELAYED_JOBS_WORKERS: ${ZAMMAD_PROCESS_DELAYED_JOBS_WORKERS:-} + ZAMMAD_SESSION_JOBS_CONCURRENT: ${ZAMMAD_SESSION_JOBS_CONCURRENT:-} + NGINX_PORT: ${NGINX_PORT:-8080} + NGINX_CLIENT_MAX_BODY_SIZE: ${NGINX_CLIENT_MAX_BODY_SIZE:-50M} + NGINX_SERVER_NAME: ${NGINX_SERVER_NAME:-_} + NGINX_SERVER_SCHEME: $scheme + RAILS_TRUSTED_PROXIES: ${RAILS_TRUSTED_PROXIES:-"['127.0.0.1', '::1']"} + VIRTUAL_HOST: ${VIRTUAL_HOST:-} + VIRTUAL_PORT: ${VIRTUAL_PORT:-} + LETSENCRYPT_HOST: ${LETSENCRYPT_HOST:-} + LETSENCRYPT_EMAIL: ${LETSENCRYPT_EMAIL:-} + networks: + - zammad + depends_on: + - zammad-postgresql + - zammad-redis + - zammad-memcached + - zammad-elasticsearch + command: ["zammad-websocket"] -services: zammad-backup: - <<: *zammad-service - command: ["zammad-backup"] + image: ${ZAMMAD_IMAGE:-ghcr.io/zammad/zammad:latest} + restart: ${ZAMMAD_RESTART:-always} volumes: - ${VOL_PATH:-./data}/zammad/backup:${BACKUP_DIR:-/var/tmp/zammad} - ${VOL_PATH:-./data}/zammad/storage:/opt/zammad/storage:ro - user: 0:0 - - zammad-elasticsearch: - image: elasticsearch:${ELASTICSEARCH_VERSION:-8.19.2} - restart: ${RESTART:-always} - volumes: - - ${VOL_PATH:-./data}/elasticsearch:/usr/share/elasticsearch/data environment: - discovery.type: single-node - xpack.security.enabled: 'false' - ES_JAVA_OPTS: ${ELASTICSEARCH_JAVA_OPTS:--Xms1g -Xmx1g} - - zammad-init: - <<: *zammad-service - command: ["zammad-init"] + TZ: ${TZ:-America/Vancouver} + 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: ${POSTGRESQL_DB_CREATE:-true} + REDIS_URL: ${REDIS_URL:-redis://zammad-redis:6379} + S3_URL: ${S3_URL:-} + BACKUP_DIR: "${BACKUP_DIR:-/var/tmp/zammad}" + BACKUP_TIME: "${BACKUP_TIME:-03:00}" + HOLD_DAYS: "${HOLD_DAYS:-10}" + ELASTICSEARCH_ENABLED: ${ELASTICSEARCH_ENABLED:-true} + ELASTICSEARCH_SCHEMA: ${ELASTICSEARCH_SCHEMA:-http} + ELASTICSEARCH_HOST: ${ELASTICSEARCH_HOST:-zammad-elasticsearch} + ELASTICSEARCH_PORT: ${ELASTICSEARCH_PORT:-9200} + ELASTICSEARCH_USER: ${ELASTICSEARCH_USER:-} + ELASTICSEARCH_PASS: ${ELASTICSEARCH_PASS:-} + ELASTICSEARCH_NAMESPACE: ${ELASTICSEARCH_NAMESPACE:-zammad} + ELASTICSEARCH_REINDEX: ${ELASTICSEARCH_REINDEX:-} + AUTOWIZARD_JSON: ${AUTOWIZARD_JSON:-} + AUTOWIZARD_RELATIVE_PATH: ${AUTOWIZARD_RELATIVE_PATH:-} + ZAMMAD_HTTP_TYPE: ${ZAMMAD_HTTP_TYPE:-} + ZAMMAD_FQDN: ${ZAMMAD_FQDN:-} + ZAMMAD_WEB_CONCURRENCY: ${ZAMMAD_WEB_CONCURRENCY:-} + ZAMMAD_PROCESS_SESSIONS_JOBS_WORKERS: ${ZAMMAD_PROCESS_SESSIONS_JOBS_WORKERS:-} + ZAMMAD_PROCESS_SCHEDULED_JOBS_WORKERS: ${ZAMMAD_PROCESS_SCHEDULED_JOBS_WORKERS:-} + ZAMMAD_PROCESS_DELAYED_JOBS_WORKERS: ${ZAMMAD_PROCESS_DELAYED_JOBS_WORKERS:-} + ZAMMAD_SESSION_JOBS_CONCURRENT: ${ZAMMAD_SESSION_JOBS_CONCURRENT:-} + NGINX_PORT: ${NGINX_PORT:-8080} + NGINX_CLIENT_MAX_BODY_SIZE: ${NGINX_CLIENT_MAX_BODY_SIZE:-50M} + NGINX_SERVER_NAME: ${NGINX_SERVER_NAME:-_} + NGINX_SERVER_SCHEME: $scheme + RAILS_TRUSTED_PROXIES: ${RAILS_TRUSTED_PROXIES:-"['127.0.0.1', '::1']"} + VIRTUAL_HOST: ${VIRTUAL_HOST:-} + VIRTUAL_PORT: ${VIRTUAL_PORT:-} + LETSENCRYPT_HOST: ${LETSENCRYPT_HOST:-} + LETSENCRYPT_EMAIL: ${LETSENCRYPT_EMAIL:-} + networks: + - zammad depends_on: - zammad-postgresql - - zammad-memcached - zammad-redis - - zammad-elasticsearch # Ensures full init if enabled - restart: on-failure + - zammad-memcached + - zammad-elasticsearch + command: ["zammad-backup"] user: 0:0 - zammad-memcached: - command: memcached -m 256M - image: memcached:${MEMCACHE_VERSION:-1.6.39-alpine} - restart: ${RESTART:-always} - zammad-nginx: - <<: *zammad-service - command: ["zammad-nginx"] + image: ${ZAMMAD_IMAGE:-ghcr.io/zammad/zammad:latest} + restart: ${ZAMMAD_RESTART:-always} + volumes: + - ${VOL_PATH:-./data}/zammad/storage:/opt/zammad/storage + environment: + TZ: ${TZ:-America/Vancouver} + 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: ${POSTGRESQL_DB_CREATE:-true} + REDIS_URL: ${REDIS_URL:-redis://zammad-redis:6379} + S3_URL: ${S3_URL:-} + BACKUP_DIR: "${BACKUP_DIR:-/var/tmp/zammad}" + BACKUP_TIME: "${BACKUP_TIME:-03:00}" + HOLD_DAYS: "${HOLD_DAYS:-10}" + ELASTICSEARCH_ENABLED: ${ELASTICSEARCH_ENABLED:-true} + ELASTICSEARCH_SCHEMA: ${ELASTICSEARCH_SCHEMA:-http} + ELASTICSEARCH_HOST: ${ELASTICSEARCH_HOST:-zammad-elasticsearch} + ELASTICSEARCH_PORT: ${ELASTICSEARCH_PORT:-9200} + ELASTICSEARCH_USER: ${ELASTICSEARCH_USER:-} + ELASTICSEARCH_PASS: ${ELASTICSEARCH_PASS:-} + ELASTICSEARCH_NAMESPACE: ${ELASTICSEARCH_NAMESPACE:-zammad} + ELASTICSEARCH_REINDEX: ${ELASTICSEARCH_REINDEX:-} + AUTOWIZARD_JSON: ${AUTOWIZARD_JSON:-} + AUTOWIZARD_RELATIVE_PATH: ${AUTOWIZARD_RELATIVE_PATH:-} + ZAMMAD_HTTP_TYPE: ${ZAMMAD_HTTP_TYPE:-} + ZAMMAD_FQDN: ${ZAMMAD_FQDN:-} + ZAMMAD_WEB_CONCURRENCY: ${ZAMMAD_WEB_CONCURRENCY:-} + ZAMMAD_PROCESS_SESSIONS_JOBS_WORKERS: ${ZAMMAD_PROCESS_SESSIONS_JOBS_WORKERS:-} + ZAMMAD_PROCESS_SCHEDULED_JOBS_WORKERS: ${ZAMMAD_PROCESS_SCHEDULED_JOBS_WORKERS:-} + ZAMMAD_PROCESS_DELAYED_JOBS_WORKERS: ${ZAMMAD_PROCESS_DELAYED_JOBS_WORKERS:-} + ZAMMAD_SESSION_JOBS_CONCURRENT: ${ZAMMAD_SESSION_JOBS_CONCURRENT:-} + NGINX_PORT: ${NGINX_PORT:-8080} + NGINX_CLIENT_MAX_BODY_SIZE: ${NGINX_CLIENT_MAX_BODY_SIZE:-50M} + NGINX_SERVER_NAME: ${NGINX_SERVER_NAME:-_} + NGINX_SERVER_SCHEME: $scheme + RAILS_TRUSTED_PROXIES: ${RAILS_TRUSTED_PROXIES:-"['127.0.0.1', '::1']"} + VIRTUAL_HOST: ${VIRTUAL_HOST:-} + VIRTUAL_PORT: ${VIRTUAL_PORT:-} + LETSENCRYPT_HOST: ${LETSENCRYPT_HOST:-} + LETSENCRYPT_EMAIL: ${LETSENCRYPT_EMAIL:-} + networks: + - zammad + - proxy + depends_on: + - zammad-railsserver expose: - "${NGINX_PORT:-8080}" ports: - "${NGINX_PORT:-8080}:${NGINX_PORT:-8080}" - depends_on: - - zammad-railsserver + command: ["zammad-nginx"] - zammad-postgresql: - environment: - POSTGRES_DB: ${POSTGRES_DB:-zammad_production} - POSTGRES_USER: ${POSTGRES_USER:-zammad} - POSTGRES_PASSWORD: ${POSTGRES_PASS:-zammad} - image: postgres:${POSTGRES_VERSION:-17.5-alpine} - restart: ${RESTART:-always} - volumes: - - ${VOL_PATH:-./data}/postgresql:/var/lib/postgresql/data - - zammad-railsserver: - <<: *zammad-service - command: ["zammad-railsserver"] - - zammad-redis: - image: redis:${REDIS_VERSION:-7.4.5-alpine} - restart: ${RESTART:-always} - volumes: - - ${VOL_PATH:-./data}/redis:/data - - zammad-scheduler: - <<: *zammad-service - command: ["zammad-scheduler"] - - zammad-websocket: - <<: *zammad-service - command: ["zammad-websocket"] - -# No named volumes defined; using bind mounts to ./data/* subdirs for easy local access \ No newline at end of file +networks: + proxy: + external: true + zammad: + driver: bridge \ No newline at end of file diff --git a/zammad/sample.env b/zammad/sample.env index 9676d48..a249be2 100644 --- a/zammad/sample.env +++ b/zammad/sample.env @@ -3,16 +3,18 @@ # https://docs.zammad.org/en/latest/install/docker-compose/environment.html ############################################# -############################################# -# docker-compose.yml - These variables only need to be set if they do not have the default value. -############################################# - -# RESTART=always - -# Base path for all persistent data (defaults to ./data relative to docker-compose.yml) VOL_PATH=./data +TZ=America/Vancouver COMPOSE_PROJECT_NAME=zammad +ZAMMAD_RAILS_IMAGE=ghcr.io/zammad/zammad:latest +ZAMMAD_RESTART=always +scheme=http +AWS_REGION=dummy + +# From Zammad Documentation +# Base path for all persistent data (defaults to ./data relative to docker-compose.yml) + # Use a fixed Zammad version rather than the default. If you do so, # you are responsible to update this to newer patch level versions yourself. # The tag format is zammad-VERSION-BUILD (e.g., zammad-6.5.1-1). Check https://hub.docker.com/r/zammad/zammad-docker-compose/tags for latest. @@ -57,14 +59,12 @@ NGINX_PORT=8080 # NGINX_EXPOSE_PORT=8080 # NGINX_CLIENT_MAX_BODY_SIZE=50M # NGINX_SERVER_NAME=_ # '_' matches all; set to your FQDN/IP for restriction -scheme=http NGINX_SERVER_SCHEME=$scheme # Or force 'http'/'https' # Backup settings # BACKUP_DIR=/var/tmp/zammad # BACKUP_TIME=03:00 # HOLD_DAYS=10 -TZ=America/Vancouver # App tuning (scale workers as needed) # ZAMMAD_WEB_CONCURRENCY= # e.g., 4 for more concurrent web connections @@ -140,5 +140,3 @@ TZ=America/Vancouver # ZAMMAD_SCHEDULER_RESOURCES_LIMITS_MEMORY=500M # ZAMMAD_WEBSOCKET_RESOURCES_LIMITS_CPUS=1.0 # ZAMMAD_WEBSOCKET_RESOURCES_LIMITS_MEMORY=500M - -AWS_REGION=dummy \ No newline at end of file