diff --git a/zammad/README.md b/zammad/README.md index fc963a8..f699398 100644 --- a/zammad/README.md +++ b/zammad/README.md @@ -1,5 +1,7 @@ # Zammad +Proxy port: 8080 on zammad-nginx + Zammad has good support for their own repo, probably better to use that one. This is just Zammad for my own @@ -7,3 +9,4 @@ Official Documenation: https://docs.zammad.org/en/latest/install/docker-compose. Official Repository: https://github.com/zammad/zammad-docker-compose/blob/master/docker-compose.yml +chmod data directory to 1000:1000 diff --git a/zammad/docker-compose.yml b/zammad/docker-compose.yml index 3f1d3db..2166783 100644 --- a/zammad/docker-compose.yml +++ b/zammad/docker-compose.yml @@ -1,9 +1,9 @@ --- -version: "3.8" 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} @@ -11,70 +11,71 @@ x-shared: POSTGRESQL_PASS: ${POSTGRES_PASS:-zammad} POSTGRESQL_PORT: ${POSTGRES_PORT:-5432} POSTGRESQL_OPTIONS: ${POSTGRESQL_OPTIONS:-?pool=50} - POSTGRESQL_DB_CREATE: + POSTGRESQL_DB_CREATE: ${POSTGRESQL_DB_CREATE:-true} REDIS_URL: ${REDIS_URL:-redis://zammad-redis:6379} - S3_URL: + # 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}" - # Allow passing in these variables via .env: - 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_PROCESS_SESSIONS_JOBS_WORKERS: - ZAMMAD_PROCESS_SCHEDULED_JOBS_WORKERS: - ZAMMAD_PROCESS_DELAYED_JOBS_WORKERS: - # ZAMMAD_SESSION_JOBS_CONCURRENT is deprecated, please use ZAMMAD_PROCESS_SESSIONS_JOBS_WORKERS instead. - ZAMMAD_SESSION_JOBS_CONCURRENT: - # Variables used by ngingx-proxy container for reverse proxy creations - # for docs refer to https://github.com/nginx-proxy/nginx-proxy - VIRTUAL_HOST: - VIRTUAL_PORT: - # Variables used by acme-companion for retrieval of LetsEncrypt certificate - # for docs refer to https://github.com/nginx-proxy/acme-companion - LETSENCRYPT_HOST: - LETSENCRYPT_EMAIL: + # 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.1} + image: ${IMAGE_REPO:-ghcr.io/zammad/zammad}:${VERSION:-6.5.2} restart: ${RESTART:-always} volumes: - - zammad-storage:/opt/zammad/storage + - ${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: - - zammad-backup:/var/tmp/zammad - - zammad-storage:/opt/zammad/storage:ro + - ${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: - - elasticsearch-data:/usr/share/elasticsearch/data + - ${VOL_PATH:-./data}/elasticsearch:/usr/share/elasticsearch/data environment: discovery.type: single-node xpack.security.enabled: 'false' @@ -85,6 +86,9 @@ services: command: ["zammad-init"] depends_on: - zammad-postgresql + - zammad-memcached + - zammad-redis + - zammad-elasticsearch # Ensures full init if enabled restart: on-failure user: 0:0 @@ -98,8 +102,8 @@ services: command: ["zammad-nginx"] expose: - "${NGINX_PORT:-8080}" - ports: - - "${NGINX_EXPOSE_PORT:-8080}:${NGINX_PORT:-8080}" + #ports: + # - "${NGINX_EXPOSE_PORT:-8080}:${NGINX_PORT:-8080}" depends_on: - zammad-railsserver @@ -111,7 +115,7 @@ services: image: postgres:${POSTGRES_VERSION:-17.5-alpine} restart: ${RESTART:-always} volumes: - - postgresql-data:/var/lib/postgresql/data + - ${VOL_PATH:-./data}/postgresql:/var/lib/postgresql/data zammad-railsserver: <<: *zammad-service @@ -121,7 +125,7 @@ services: image: redis:${REDIS_VERSION:-7.4.5-alpine} restart: ${RESTART:-always} volumes: - - redis-data:/data + - ${VOL_PATH:-./data}/redis:/data zammad-scheduler: <<: *zammad-service @@ -131,14 +135,4 @@ services: <<: *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 \ No newline at end of file +# No named volumes defined; using bind mounts to ./data/* subdirs for easy local access \ No newline at end of file diff --git a/zammad/env-sample b/zammad/env-sample index da710a1..e931b4c 100644 --- a/zammad/env-sample +++ b/zammad/env-sample @@ -9,15 +9,21 @@ # 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 + # 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. # VERSION=6.5.1 # You can also use floating versions that will give you automatic updates: # VERSION=6.2 # all patchlevel updates # VERSION=6 # including minor updates # VERSION=latest # all updates of stable versions, including major # VERSION=develop # bleeding-edge development version -# IMAGE_REPO=ghcr.io/zammad/zammad +# IMAGE_REPO=zammad/zammad-docker-compose # ELASTICSEARCH_VERSION=8.19.2 # MEMCACHE_SERVERS=zammad-memcached:11211 @@ -26,37 +32,55 @@ # REDIS_VERSION=7.4.5-alpine # POSTGRES_VERSION=17.5-alpine -# RAILS_TRUSTED_PROXIES= -# ZAMMAD_HTTP_TYPE= -# ZAMMAD_FQDN= - -# NGINX_PORT=8080 -# NGINX_EXPOSE_PORT=8080 -# NGINX_CLIENT_MAX_BODY_SIZE=50M # POSTGRES_DB=zammad_production # POSTGRES_PASS=zammad # POSTGRES_USER=zammad # POSTGRES_HOST=zammad-postgresql # POSTGRES_PORT=5432 # POSTGRESQL_OPTIONS=?pool=50 +# POSTGRESQL_DB_CREATE=true +# ELASTICSEARCH_ENABLED=true # ELASTICSEARCH_SCHEMA=http # ELASTICSEARCH_HOST=zammad-elasticsearch # ELASTICSEARCH_PORT=9200 -# ELASTICSEARCH_USER=elastic -# ELASTICSEARCH_PASS=zammad +# ELASTICSEARCH_USER= # Leave empty if no auth (xpack.security.enabled=false) +# ELASTICSEARCH_PASS= # ELASTICSEARCH_NAMESPACE=zammad -# ELASTICSEARCH_REINDEX=true +# ELASTICSEARCH_REINDEX= # Set to 'true' to force reindex # ELASTICSEARCH_JAVA_OPTS=-Xms1g -Xmx1g -# Variables used by ngingx-proxy container for reverse proxy creations, +# RAILS_TRUSTED_PROXIES= # Default: ['127.0.0.1', '::1'] +# ZAMMAD_HTTP_TYPE= # e.g., 'https' +# ZAMMAD_FQDN= # e.g., yourdomain.com + +# 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 +# NGINX_SERVER_SCHEME=$scheme # Or force 'http'/'https' + +# Backup settings +# BACKUP_DIR=/var/tmp/zammad +# BACKUP_TIME=03:00 +# HOLD_DAYS=10 +# TZ=Europe/Berlin + +# App tuning (scale workers as needed) +# ZAMMAD_WEB_CONCURRENCY= # e.g., 4 for more concurrent web connections +# ZAMMAD_PROCESS_SESSIONS_JOBS_WORKERS= # e.g., 2 +# ZAMMAD_PROCESS_SCHEDULED_JOBS_WORKERS=1 +# ZAMMAD_PROCESS_DELAYED_JOBS_WORKERS= # e.g., 3 + +# Variables used by nginx-proxy container for reverse proxy creations, # for docs refer to https://github.com/nginx-proxy/nginx-proxy. -# VIRTUAL_HOST= -# VIRTUAL_PORT= +# VIRTUAL_HOST=yourdomain.com +# VIRTUAL_PORT=80 + # Variables used by acme-companion for retrieval of LetsEncrypt certificate, # for docs refer to https://github.com/nginx-proxy/acme-companion. -# LETSENCRYPT_HOST= -# LETSENCRYPT_EMAIL= +# LETSENCRYPT_HOST=yourdomain.com +# LETSENCRYPT_EMAIL=admin@yourdomain.com ############################################# # scenarios/add-cloudflare-tunnel.yml