Zammad ist ein open-source Ticket System. Man hat die Möglichkeit es auf seinem eigenen Server zu hosten oder gegen eine Gebühr von Zammad hosten zu lassen. In dieser Anleitung zeige ich euch, wie ihr es sehr einfach selbst hosten könnt.
Bei yml Dateien ist es sehr wichtig, dass die Zeilen alle richtig eingerückt sind. Die Zeilen MÜSSEN immer mit der Leertaste eingerückt werden. Es dürfen KEINE Tabs enthalten sein. Ihr könnt den nachfolgenden Code immer online „überprüfen“ lassen. Die meisten Fehler entstehen nämlich durch die falsche Formatierung. Ein Dienst zum Überprüfen ist zum Beispiel: https://codebeautify.org/yaml-validator
Diese Anleitung basiert auf dem aktuellen Debian 10 Betriebssystem. Zammad werden wir unter Docker realisieren. Dies ermöglicht uns später sehr schnelle Updates und eine schnelle Installation.
Um Zammad neben anderen Diensten auf unserem Server betreiben zu können, nutzen wir hier den Reverse Proxy Traefik. Die Anleitung dazu finden Sie hier: https://www.dogado.de/vps/vserver-anwendungsfaelle/traefik-reverseproxy-auf-vserver-installieren
Wir erstellen uns ein neues Verzeichnis, in welchem wir später alle Daten von Zammad abspeichen. Dazu geben wir folgendes in der Konsole ein:
mkdir -p /opt/containers/zammad/
Ihr könnt hier auch ein anderes Verzeichnis verwenden. Müsst dann aber die gesamte Anleitung entsprechend anpassen.
Nun können wir mit der eigentlichen „Installation“ von Zammad beginnen. Dazu öffnet ihr folgende Datei:
nano /opt/containers/zammad/docker-compose.yml
Nun kopiert ihr folgenden Code in die Datei. Dieser Code ist unser Bauplan für unseren Zammad Container.
version: '3'
services:
zammad-backup:
command: ["zammad-backup"]
depends_on:
- zammad-railsserver
- zammad-postgresql
entrypoint: /usr/local/bin/backup.sh
environment:
- BACKUP_SLEEP=86400
- HOLD_DAYS=10
- POSTGRESQL_USER=${POSTGRES_USER}
- POSTGRESQL_PASSWORD=${POSTGRES_PASS}
image: ${IMAGE_REPO}:zammad-postgresql${VERSION}
restart: ${RESTART}
volumes:
- zammad-backup:/var/tmp/zammad
- zammad-data:/opt/zammad
zammad-elasticsearch:
environment:
- discovery.type=single-node
image: ${IMAGE_REPO}:zammad-elasticsearch${VERSION}
restart: ${RESTART}
volumes:
- elasticsearch-data:/usr/share/elasticsearch/data
zammad-init:
command: ["zammad-init"]
depends_on:
- zammad-postgresql
environment:
- MEMCACHE_SERVERS=${MEMCACHE_SERVERS}
- POSTGRESQL_USER=${POSTGRES_USER}
- POSTGRESQL_PASS=${POSTGRES_PASS}
- REDIS_URL=${REDIS_URL}
image: ${IMAGE_REPO}:zammad${VERSION}
restart: on-failure
volumes:
- zammad-data:/opt/zammad
zammad-memcached:
command: memcached -m 256M
image: memcached:1.6.10-alpine
restart: ${RESTART}
zammad-nginx:
command: ["zammad-nginx"]
depends_on:
- zammad-railsserver
image: ${IMAGE_REPO}:zammad${VERSION}
restart: ${RESTART}
volumes:
- zammad-data:/opt/zammad
labels:
- "traefik.enable=true"
- "traefik.http.routers.zammad.entrypoints=http"
- "traefik.http.routers.zammad.rule=Host(`zammad.euredomain.de`)"
- "traefik.http.middlewares.zammad-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.zammad.middlewares=zammad-https-redirect"
- "traefik.http.routers.zammad-secure.entrypoints=https"
- "traefik.http.routers.zammad-secure.rule=Host(`zammad.euredomain.de`)"
- "traefik.http.routers.zammad-secure.tls=true"
- "traefik.http.routers.zammad-secure.tls.certresolver=http"
- "traefik.http.routers.zammad-secure.service=zammad"
- "traefik.http.services.zammad.loadbalancer.server.port=8080"
- "traefik.docker.network=proxy"
- "traefik.http.routers.zammad-secure.middlewares=secHeaders@file"
networks:
- proxy
- default
zammad-postgresql:
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASS}
image: ${IMAGE_REPO}:zammad-postgresql${VERSION}
restart: ${RESTART}
volumes:
- postgresql-data:/var/lib/postgresql/data
zammad-railsserver:
command: ["zammad-railsserver"]
depends_on:
- zammad-memcached
- zammad-postgresql
- zammad-redis
environment:
- MEMCACHE_SERVERS=${MEMCACHE_SERVERS}
- REDIS_URL=${REDIS_URL}
image: ${IMAGE_REPO}:zammad${VERSION}
restart: ${RESTART}
volumes:
- zammad-data:/opt/zammad
zammad-redis:
image: redis:6.2.5-alpine
restart: ${RESTART}
zammad-scheduler:
command: ["zammad-scheduler"]
depends_on:
- zammad-memcached
- zammad-railsserver
- zammad-redis
environment:
- MEMCACHE_SERVERS=${MEMCACHE_SERVERS}
- REDIS_URL=${REDIS_URL}
image: ${IMAGE_REPO}:zammad${VERSION}
restart: ${RESTART}
volumes:
- zammad-data:/opt/zammad
zammad-websocket:
command: ["zammad-websocket"]
depends_on:
- zammad-memcached
- zammad-railsserver
- zammad-redis
environment:
- MEMCACHE_SERVERS=${MEMCACHE_SERVERS}
- REDIS_URL=${REDIS_URL}
image: ${IMAGE_REPO}:zammad${VERSION}
restart: ${RESTART}
volumes:
- zammad-data:/opt/zammad
volumes:
elasticsearch-data:
driver: local
postgresql-data:
driver: local
zammad-backup:
driver: local
zammad-data:
driver: local
networks:
proxy:
external: true
Nun müssen wir noch einiges anpassen.
Nun müsst ihr noch den Hostnamen anpassen, über welchen später Zammad erreichbar sein soll.
Diese beiden Zeilen müsst ihr anpassen.
- "traefik.http.routers.zammad.rule=Host(`zammad.euredomain.de `)"
- "traefik.http.routers.zammad-secure.rule=Host(`zammad.euredomain.de`)"
In meinem Fall also:
- "traefik.http.routers.zammad.rule=Host(`zammad.testbereich.net`)"
- "traefik.http.routers.zammad-secure.rule=Host(`zammad.testbereich.net`)"
Wenn ihr Zammad direkt auf eurer „Hauptdomain“ betreiben wollt, dann ändert ihr es folgendermaßen ab:
"traefik.http.routers.zammad.rule=Host(`www.euredomain.de`,`euredomain.de`)"
"traefik.http.routers.zammad-secure.rule=Host(`www.euredomain.de`,`euredomain.de`)"
Nun müssten wir noch einige Einstellungen festlegen. Dazu brauchen wir eine weitere Datei. Gebt nun folgendes ein:
nano /opt/containers/zammad/.env
Nun kopiert ihr den Code in die Datei:
IMAGE_REPO=zammad/zammad-docker-compose
MEMCACHE_SERVERS=zammad-memcached:11211
POSTGRES_PASS=zammad
POSTGRES_USER=zammad
REDIS_URL=redis://zammad-redis:6379
RESTART= unless-stopped
VERSION=-5.0.2-1
In der Datei könnt ihr auch noch den Postgress Benutzer / Passwort anpassen. Momentan ist beides „zammad“. Ändert hier einfach die Werte ab.
Gebt nun folgendes ein, um euren Zammad Container zu starten:
docker compose -f /opt/containers/zammad/docker-compose.yml up -d
Beim ersten Start des Containers wird Zammad initialisiert. Dies bedeutet, dass die Datenbank eingerichtet, eure Einstellungen übernommen werden und vieles mehr. Daher dauert es einige Minuten, bis der Container dann über die Webseite erreichbar ist. Bei mir hat es ca. 4 Minuten gedauert. Auf eurer Webseite (z.B. zammad.euredomain.de) solltet ihr dann folgendes sehen:
Klickt dazu auf „Neues System aufsetzen“.
Nun gebt ihr die Daten des Administrators ein:
Anschließend gebt ihr noch den Namen eueres Unternehmens an und könnt ein Logo hochladen. Die „System URL“ sollte dieselbe sein, welche ihr hier im Schritt 1.3.3 vergeben habt.
Nun könnt ihr noch euren E-Mail-Server einbinden. Klickt dazu auf den „Pfeil“ und wählt „SMTP“ aus.
Nun gebt ihr die Daten eures E-Mail Servers an. Diese könnt ihr beispielsweise bei gmail.com, web.de nachlesen.
Nun seid ihr fertig mit der Einrichtung. Nun seht ihr zum ersten Mal das Zammad Dashboard.
Nun könnt ihr noch weitere Benutzer anlegen. Klickt dazu auf das „Zahnrad“ im unteren linken Bereich.
Nun erscheinen die Optionen und der Bereich „Benutzer“ ist direkt ausgewählt.
Als erstes entfernen wir den bereits angelegten Benutzer „Nicole“. Klickt dazu auf die „3 Punkte“ hinter „Nicole“.
Wählt nun „löschen“ aus.
Nun müsst ihr noch die Löschung bestätigen. Gebt dazu in das untere Feld „LÖSCHEN“ ein.
Anschließend legen wir einen neuen Benutzer an. Klickt dazu auf „Neuer Benutzer“ im oberen Bereich.
Gebt nun alle Daten des Nutzers ein. Ihr könnt hier noch wählen, um es sich um einen „Admin“, „Agent“ oder „Kunden“ handelt.
Ihr könnt unter Zammad leicht weitere Kommunikationskanäle wie Google, Twitter oder Facebook hinzufügen. Klickt dazu auf das „Zahnrad“ im unteren Bereich.
Hier seht ihr im linken Bereich die Überschrift „Kanäle“. Dort könnt ihr die einzelnen Dienste in Zammad einbinden.