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.
Étapes de configuration
Section intitulée « Étapes de configuration »- Cliquez Deploy. Le premier démarrage est lent (2-3 min) — Elasticsearch et les migrations Rails se lancent au démarrage.
- Visitez votre domaine Zammad. Complétez l’assistant de configuration (compte admin, nom d’organisation).
- (Optionnel) Activez Keycloak SSO : Settings -> Security -> Third-party authentication -> OpenID Connect -> collez
OIDC_CLIENT_ID,OIDC_CLIENT_SECRET,OIDC_ISSUER_URLdepuis 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.
Variables d’environnement
Section intitulée « Variables d’environnement »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.
| Variable | Valeur par défaut |
|---|---|
ZAMMAD_HOSTNAME | help.yourdomain.com |
DB_PASSWORD | valeur 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.
Fichier compose
Section intitulée « Fichier compose »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