Aller au contenu

Zammad

Helpdesk orienté tickets. Email, Telegram, canaux sociaux, SLA, base de connaissances. OIDC natif.

  • Projet original : https://zammad.com/
  • Remplace : Zendesk, Freshdesk, Jira Service Desk
  • Connexion (SSO) : À activer via l’interface admin — collez les valeurs OIDC_* depuis l’onglet Environment une fois.
  1. Cliquez Deploy. Le premier démarrage est lent (2-3 min) — Elasticsearch et les migrations Rails se lancent au démarrage.
  2. Visitez votre domaine Zammad. Complétez l’assistant de configuration (compte admin, nom d’organisation).
  3. (Optionnel) Activez Keycloak SSO : Settings -> Security -> Third-party authentication -> OpenID Connect -> collez OIDC_CLIENT_ID, OIDC_CLIENT_SECRET, OIDC_ISSUER_URL depuis l’onglet Environment. Validez.

Ressources : Zammad intègre Elasticsearch qui réserve ~1,5 GB de RAM. Prévoyez un VPS ≥4 GB si vous lancez Zammad avec d’autres apps.

Ces valeurs se trouvent dans l’onglet Environment du compose Dokploy. Les secrets aléatoires sont générés automatiquement au premier semi du template — vous n’avez pas à les générer vous-même.

VariableValeur par défaut
ZAMMAD_HOSTNAMEhelp.yourdomain.com
DB_PASSWORDvaleur aléatoire auto-générée
  • Service et port : zammad-nginx:8080
  • Nom d’hôte : help.yourdomain.com

Le nom d’hôte est attaché automatiquement au semi du template ; modifiez-le dans l’onglet Domains avant de cliquer Deploy si vous souhaitez autre chose.

Pour référence — c’est ce que le template déploie. Ne collez ceci nulle part. Le compose est semé dans Dokploy automatiquement ; les ajustements côté client se font dans les onglets Environment et Domains (décrits plus haut), jamais dans le compose lui-même.

# Zammad -- ticket-first help desk / omnichannel support. Native OIDC
# support (configured in Settings -> Security -> Third-party
# authentication -> OIDC after first admin sign-in).
#
# Heavier than Chatwoot: bundles Elasticsearch (needs ~1.5 GB RAM), a
# dedicated scheduler, websocket process, nginx front-end, + the usual
# postgres/redis/memcached. Plan for a 4+ GB VPS tier.
x-zammad-env: &zammad-env
POSTGRESQL_HOST: db
POSTGRESQL_PORT: "5432"
POSTGRESQL_DB: zammad_production
POSTGRESQL_USER: zammad
POSTGRESQL_PASS: ${DB_PASSWORD}
REDIS_URL: redis://redis:6379
MEMCACHE_SERVERS: memcached:11211
ELASTICSEARCH_SCHEMA: http
ELASTICSEARCH_HOST: elasticsearch
ELASTICSEARCH_PORT: "9200"
ELASTICSEARCH_NAMESPACE: zammad
services:
zammad-init:
image: zammad/zammad:7.0.1-0035
restart: on-failure
command: ["zammad-init"]
environment: *zammad-env
volumes:
- zammad-storage:/opt/zammad/storage
depends_on:
db:
condition: service_healthy
elasticsearch:
condition: service_healthy
networks:
- default
zammad-railsserver:
image: zammad/zammad:7.0.1-0035
restart: unless-stopped
command: ["zammad-railsserver"]
environment: *zammad-env
volumes:
- zammad-storage:/opt/zammad/storage
depends_on:
- zammad-init
labels:
- "vps.auto-update=patch"
networks:
- default
zammad-websocket:
image: zammad/zammad:7.0.1-0035
restart: unless-stopped
command: ["zammad-websocket"]
environment: *zammad-env
depends_on:
- zammad-init
labels:
- "vps.auto-update=patch"
networks:
- default
zammad-scheduler:
image: zammad/zammad:7.0.1-0035
restart: unless-stopped
command: ["zammad-scheduler"]
environment: *zammad-env
volumes:
- zammad-storage:/opt/zammad/storage
depends_on:
- zammad-init
labels:
- "vps.auto-update=patch"
networks:
- default
# Public-facing: fronts railsserver + websocket under a single vhost.
zammad-nginx:
image: zammad/zammad:7.0.1-0035
restart: unless-stopped
command: ["zammad-nginx"]
environment:
<<: *zammad-env
NGINX_SERVER_NAME: ${ZAMMAD_HOSTNAME}
NGINX_CLIENT_MAX_BODY_SIZE: 50M
depends_on:
- zammad-railsserver
- zammad-websocket
labels:
- "vps.auth.mode=public"
- "vps.auth.oidc=true"
- "vps.auth.groups=staff"
- "vps.auth.oidc.redirect_uris=https://${ZAMMAD_HOSTNAME}/auth/openid_connect/callback"
- "vps.auth.oidc.scopes=openid email profile"
- "vps.auto-update=patch"
networks:
dokploy-network:
aliases:
- zammad
default: {}
db:
image: postgres:16.13-alpine
restart: unless-stopped
environment:
POSTGRES_USER: zammad
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: zammad_production
volumes:
- db-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U zammad"]
interval: 10s
timeout: 5s
retries: 5
labels:
- "vps.auto-update=patch"
networks:
- default
redis:
image: redis:8.6.3-alpine3.23
restart: unless-stopped
labels:
- "vps.auto-update=patch"
networks:
- default
memcached:
image: memcached:1.6.41-alpine3.23
restart: unless-stopped
command: ["memcached", "-m", "256"]
labels:
- "vps.auto-update=patch"
networks:
- default
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.19.15
restart: unless-stopped
environment:
discovery.type: single-node
xpack.security.enabled: "false"
ES_JAVA_OPTS: "-Xms512m -Xmx1024m"
volumes:
- es-data:/usr/share/elasticsearch/data
healthcheck:
test: ["CMD-SHELL", "curl -sf http://localhost:9200/_cluster/health | grep -qE '\"status\":\"(green|yellow)\"'"]
interval: 15s
timeout: 10s
retries: 10
start_period: 60s
labels:
- "vps.auto-update=off"
networks:
- default
volumes:
zammad-storage:
db-data:
es-data:
networks:
dokploy-network:
external: true

<- Retour au catalogue des applications pré-configurées