Warum betreibst du ein Ticketsystem? Weil ich´s kann, wäre die treffende Antwort – ich bin schließlich Sysadmin. Spaß beiseite: ich habe viele kleinere Projekte, die teils über ein eigenes Mail-Konto verfügen, teils auf meine private Mail gehen. Manche Dialoge wandern ins Archiv, andere in den Papierkorb – es ist auf Dauer etwas unübersichtlich, schlecht durchsuchbar und es fehlt die gewisse Prise Professionalität. Deswegen habe ich mich nach einem Open Source Ticketsystem / Helpdesk umgesehen.
OsTicket und Zammad sind mir als größere Systeme ins Auge gesprungen. OsTicket kenne ich noch von früher und es hat mich nicht wirklich überzeugt und wirkt auch etwas altbacken bzw. schwerfällig. Zammad hingegen wirkt sehr modern, ist ein Nachfolger von OTRS und besitzt bereits interessante Businessintegrationen: SLAs, Formulare für die Webseite, Integration von Telegram und Facebook Bots etc. Hinzu kommt ein eigenes Reporting-Tool über elasticsearch.
Die Installation von Zammad wirkte relativ einfach, aber bis es endlich mal lief, vergingen trotzdem drei Tage, daher hier meine Installationsdokumentation für eine From Source-Installation unter Debian 9. Ich würde euch zwar empfehlen, die Repo Pakete zu verwenden, aber die haben bei mir anfangs für Debian nicht funktioniert. Und als sie dann funktionierten, hat der Installer nicht erkannt, dass ich einen kompilierten nginx am Laufen hatte und wollte einen eigenen nginx bzw. Apache2 installieren. Da das Markieren der zwei Pakete als nicht-installierbar über apt nicht wirklich funktioniert, habe ich auch den Rat aus der Community erhalten, eben mit den Source Paketen zu arbeiten.
Postgresql installieren
Als erstes brauchen wir PostgreSQL. Auch wenn in der offiziellen Installationsanleitung steht, dass MySQL genauso funktioniert, ist das leider bei den Source Paketen nicht so (Grund ist meistens: “If you like to use MySQL/MariaDB get sure to use UTF8 encoding. utf8mb4 for example will fail.”). Außerdem arbeitet PostgreSQL wesentlich performanter. Die Installation von PostgreSQL ist relativ einfach. Ich würde empfehlen, PostgreSQL einmal nach außen zu öffnen, um mittels PG Admin Datenbank und Nutzer anzulegen. Auf Konsole ist das mit PostgreSQL etwas frickelig.
Zusätzlich benötigt zammad folgendes Verbindungspaket zwischen PostgreSQL und Rails:
apt install libpq-dev curl git-core patch build-essential bison zlib1g-dev libssl-dev libxml2-dev libxml2-dev sqlite3 libsqlite3-dev autotools-dev libxslt1-dev libyaml-0-2 autoconf automake libreadline6-dev libyaml-dev libtool libgmp-dev libgdbm-dev libncurses5-dev pkg-config libffi-dev libmysqlclient-dev mysql-server nginx gawk
Zammad herunterladen
Als erstes benötigt Zammad einen Nutzer, der bash ausführen darf, aber selbst nicht root ist. Danach laden wir ins Home Verzeichnis dieses Users die Software und entpacken sie.
useradd zammad -m -d /opt/zammad -s /bin/bash su zammad cd ~ wget https://ftp.zammad.com/zammad-latest.tar.gz tar -xzf zammad-latest.tar.gz -C zammad
RVM installieren
Damit Zammad läuft, muss rvm installiert sein. Anschließend konfigurieren wir zammad und installieren es. Beachtet bitte, dass ihr unter config/database.yml die Logindaten für die PostgreSQL Datenbank einstellt.
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 curl -L https://get.rvm.io | bash -s stable source $HOME/.rvm/scripts/rvm rvm requirements rvm install 2.4.4 rvm use 2.4.4 --default gem install bundler rake rails bundle install --without test development mysql cp config/database.yml.pkgr config/database.yml nano config/database.yml export RAILS_ENV=production export RAILS_SERVE_STATIC_FILES=true rake db:migrate rake db:seed
Nun wieder nach root wechseln und das Startup Skript für Zammad installieren:
cd script/systemd ./install-zammad-systemd-services.sh
Elasticsearch installieren
Für Auswertungen in Zammad wird elasticsearch verwendet. Die Installation und Einrichtung würde ich folgendermaßen vornehmen – natürlich das Passwort ändern!
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list apt-get update && sudo apt-get install elasticsearch /usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-attachment cd /opt/zammad rails r "Setting.set('es_url', 'http://127.0.0.1:9200')" rails r "Setting.set('es_user', 'elasticsearch')" rails r "Setting.set('es_password', 'zammad')" rails r "Setting.set('es_index', 'zammad')"
Starten
Nachdem nun alles installiert wurde, einmal alle Services von Zammad durchstarten.
service zammad restart service zammad-rails restart service zammad-websocket restart service zammad-scheduler restart
Nginx Vhost
Als letztes richten wir für nginx einen Vhost ein.
upstream zammad-railsserver { server 127.0.0.1:3000; } upstream zammad-websocket { server 127.0.0.1:6042; } server { listen 80; listen [::]:80; server_name ticket.xy.de; return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name ticket.xy.de; ssl_certificate /etc/letsencrypt/live/ticket.xy.de/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/ticket.xy.de/privkey.pem; add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"; add_header X-Frame-Options DENY; add_header X-Content-Type-Options nosniff; pagespeed off; root /opt/zammad/public; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; client_max_body_size 50M; location ~ ^/(assets/|robots.txt|humans.txt|favicon.ico) { expires max; } location /ws { proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header CLIENT_IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 86400; proxy_pass http://zammad-websocket; } location / { proxy_set_header Host $http_host; proxy_set_header CLIENT_IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 300; proxy_pass http://zammad-railsserver; gzip on; gzip_types text/plain text/xml text/css image/svg+xml application/javascript application/x-javascript application/json application/xml; gzip_proxied any; } }
Abschließend
Nun könnt ihr Zammad im Browser aufrufen und die abschließenden Konfigurationen direkt im Websetup treffen.
Updates
Bei Updates folge ich 1:1 der Dokumentation. Die alte Zammad Installation verschiebe ich in einen Backup Ordner. Wichtig: solltet ihr Postgresql updaten bzw. neustarten, bitte alle Zammad Services neustarten.