Zammad: Installation unter Debian 9

Open Source Ticketsystem

0

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.

Leave A Reply

Your email address will not be published.