--- x-shared: zammad-service: &zammad-service environment: &zammad-environment # Core database and caching 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} # Storage (S3 optional; leave empty for local) S3_URL: ${S3_URL:-} # Backup settings 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} ELASTICSEARCH_PORT: ${ELASTICSEARCH_PORT:-9200} ELASTICSEARCH_USER: ${ELASTICSEARCH_USER:-} 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:-} 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:-} # 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 depends_on: - zammad-memcached - zammad-postgresql - zammad-redis - zammad-elasticsearch # Conditional via ELASTICSEARCH_ENABLED, but include for safety services: zammad-backup: <<: *zammad-service command: ["zammad-backup"] 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"] depends_on: - zammad-postgresql - zammad-memcached - zammad-redis - zammad-elasticsearch # Ensures full init if enabled restart: on-failure 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"] expose: - "${NGINX_PORT:-8080}" #ports: # - "${NGINX_EXPOSE_PORT:-8080}:${NGINX_PORT:-8080}" depends_on: - zammad-railsserver 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