From 8a9cd7a46cf5291723c5da37e2528d5d94709432 Mon Sep 17 00:00:00 2001 From: Charles Danesi Date: Tue, 2 Jun 2026 15:04:24 -0400 Subject: [PATCH] chore: add zammad --- zammad/docker-compose.yml | 227 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 227 insertions(+) create mode 100644 zammad/docker-compose.yml diff --git a/zammad/docker-compose.yml b/zammad/docker-compose.yml new file mode 100644 index 0000000..49ff8eb --- /dev/null +++ b/zammad/docker-compose.yml @@ -0,0 +1,227 @@ +--- +x-shared: + zammad-service: &zammad-service + environment: &zammad-environment + 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} + REDIS_SENTINELS: + REDIS_SENTINEL_NAME: + REDIS_USERNAME: + REDIS_PASSWORD: + REDIS_SENTINEL_USERNAME: + REDIS_SENTINEL_PASSWORD: + + S3_URL: + BACKUP_DIR: "${BACKUP_DIR:-/var/tmp/zammad}" + BACKUP_TIME: "${BACKUP_TIME:-03:00}" + BACKUP_ON_START: "${BACKUP_ON_START:-true}" + HOLD_DAYS: "${HOLD_DAYS:-10}" + TZ: "${TZ:-Europe/Berlin}" + + AUTOWIZARD_JSON: + AUTOWIZARD_RELATIVE_PATH: + ELASTICSEARCH_ENABLED: + ELASTICSEARCH_SCHEMA: + ELASTICSEARCH_HOST: + ELASTICSEARCH_PORT: + ELASTICSEARCH_USER: + ELASTICSEARCH_PASS: + ELASTICSEARCH_NAMESPACE: + ELASTICSEARCH_REINDEX: + NGINX_PORT: + NGINX_CLIENT_MAX_BODY_SIZE: + NGINX_SERVER_NAME: + NGINX_SERVER_SCHEME: + RAILS_TRUSTED_PROXIES: + ZAMMAD_HTTP_TYPE: + ZAMMAD_FQDN: + ZAMMAD_WEB_CONCURRENCY: + ZAMMAD_MANAGE_SESSIONS_JOBS_WORKERS: + ZAMMAD_PROCESS_SESSIONS_JOBS_WORKERS: + ZAMMAD_PROCESS_SCHEDULED_JOBS_WORKERS: + ZAMMAD_PROCESS_DELAYED_JOBS_WORKERS: + ZAMMAD_PROCESS_DELAYED_JOBS_WORKER_THREADS: + ZAMMAD_PROCESS_DELAYED_AI_JOBS_WORKERS: + ZAMMAD_PROCESS_DELAYED_AI_JOBS_WORKER_THREADS: + ZAMMAD_PROCESS_DELAYED_COMMUNICATION_INBOUND_JOBS_WORKERS: + ZAMMAD_PROCESS_DELAYED_COMMUNICATION_INBOUND_JOBS_WORKER_THREADS: + ZAMMAD_OTRS_IMPORT_READ_TIMEOUT: + ZAMMAD_OTRS_IMPORT_TOTAL_TIMEOUT: + ZAMMAD_HTTP_OPEN_TIMEOUT: + ZAMMAD_HTTP_READ_TIMEOUT: + ZAMMAD_HTTP_TOTAL_TIMEOUT: + ZAMMAD_HTTP_AI_READ_TIMEOUT: + ZAMMAD_HTTP_AI_TOTAL_TIMEOUT: + ZAMMAD_HTTP_ELASTICSEARCH_READ_TIMEOUT: + ZAMMAD_HTTP_ELASTICSEARCH_TOTAL_TIMEOUT: + ZAMMAD_HTTP_ELASTICSEARCH_REINDEX_READ_TIMEOUT: + ZAMMAD_HTTP_ELASTICSEARCH_REINDEX_TOTAL_TIMEOUT: + ZAMMAD_HTTP_IMPORT_ATTACHMENT_READ_TIMEOUT: + ZAMMAD_HTTP_IMPORT_ATTACHMENT_TOTAL_TIMEOUT: + ZAMMAD_HTTP_WEBHOOK_READ_TIMEOUT: + ZAMMAD_HTTP_WEBHOOK_TOTAL_TIMEOUT: + + ZAMMAD_PROCESS_SESSIONS_JOBS_DISABLE: + ZAMMAD_MANAGE_SESSIONS_JOBS_DISABLE: + ZAMMAD_PROCESS_SCHEDULED_JOBS_DISABLE: + ZAMMAD_PROCESS_DELAYED_JOBS_DISABLE: + ZAMMAD_PROCESS_DELAYED_AI_JOBS_DISABLE: + ZAMMAD_PROCESS_DELAYED_COMMUNICATION_INBOUND_JOBS_DISABLE: + + ZAMMAD_GRAPHQL_INTROSPECTION: + ZAMMAD_AI_API_URL: + ZAMMAD_AI_TOKEN: + ZAMMAD_UI_BULK_BACKGROUND_UPDATE_THRESHOLD: + ZAMMAD_SETTING_TTL: + ZAMMAD_SAFE_MODE: + ZAMMAD_WEBSOCKET_SESSION_STORE_FORCE_FS_BACKEND: + ZAMMAD_RAILSSERVER_PORT: + + ZAMMAD_SESSION_JOBS_CONCURRENT: + VIRTUAL_HOST: + VIRTUAL_PORT: + LETSENCRYPT_HOST: + LETSENCRYPT_EMAIL: + + # image: ${IMAGE_REPO:-ghcr.io/zammad/zammad}:${VERSION:-7.0.1-0053} + image: ghcr.io/zammad/zammad:6.5.0-101 + restart: ${RESTART:-always} + env_file: .env + volumes: + - zammad-backup:/var/tmp/zammad:ro + - zammad-storage:/opt/zammad/storage + depends_on: + zammad-memcached: + condition: service_healthy + zammad-postgresql: + condition: service_healthy + zammad-redis: + condition: service_healthy + +services: + zammad-backup: + <<: *zammad-service + command: ["zammad-backup"] + volumes: + - zammad-backup:/var/tmp/zammad + - zammad-storage:/opt/zammad/storage + user: 0:0 + + zammad-elasticsearch: + image: elasticsearch:${ELASTICSEARCH_VERSION:-9.4.2} + restart: ${RESTART:-always} + volumes: + - elasticsearch-data:/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: + condition: service_healthy + restart: on-failure + user: 0:0 + + zammad-memcached: + command: memcached -m 256M + image: memcached:${MEMCACHE_VERSION:-1.6.42-alpine} + restart: ${RESTART:-always} + healthcheck: + test: ["CMD", "nc", "-z", "127.0.0.1", "11211"] + interval: 10s + timeout: 5s + start_period: 10s + retries: 5 + + zammad-nginx: + <<: *zammad-service + command: ["zammad-nginx"] + expose: + - "${NGINX_PORT:-8080}" + networks: + - default + - proxy + depends_on: + zammad-railsserver: + condition: service_healthy + + zammad-postgresql: + environment: + POSTGRES_DB: ${POSTGRES_DB:-zammad_production} + POSTGRES_USER: ${POSTGRES_USER:-zammad} + POSTGRES_PASSWORD: ${POSTGRES_PASS:-zammad} + image: postgres:${POSTGRES_VERSION:-17.10-alpine} + restart: ${RESTART:-always} + volumes: + - postgresql-data:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] + interval: 10s + timeout: 5s + start_period: 60s + retries: 5 + + zammad-railsserver: + <<: *zammad-service + command: ["zammad-railsserver"] + healthcheck: + test: + [ + "CMD", + "curl", + "-sf", + "http://127.0.0.1:${ZAMMAD_RAILSSERVER_PORT:-3000}", + ] + interval: 30s + timeout: 5s + start_period: 120s + retries: 3 + + zammad-redis: + image: redis:${REDIS_VERSION:-8.8.0-alpine} + restart: ${RESTART:-always} + volumes: + - redis-data:/data + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 10s + timeout: 5s + start_period: 10s + retries: 5 + + zammad-scheduler: + <<: *zammad-service + command: ["zammad-scheduler"] + + zammad-websocket: + <<: *zammad-service + command: ["zammad-websocket"] + +volumes: + elasticsearch-data: + driver: local + postgresql-data: + driver: local + redis-data: + driver: local + zammad-backup: + driver: local + zammad-storage: + driver: local + +networks: + proxy: + external: true +