Zammad: Unterschied zwischen den Versionen

Aus Hostsharing Wiki
Zur Navigation springen Zur Suche springen
(Postgres über localhost)
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
{{Baustelle}}
 
Zammad ist ein relativ umfangreiches, mächtiges und modernes OSS Helpdesk Tool. Für die Instalation wird benötigt:
 
* 2+ User im HS Admin (einer für den Webspace und mindestens einen für die eingehenden Ticketmails als Postfach)
* eine (Sub)Domain
* 2 bis 4 GB RAM (Schätzung, eure Erfahrung kann abweichen, je nach Nutzung)
* ruby
* nodejs
* Optional: monit (für die hintergrund Dienste)
* Optional: elasticsearch (für die Statistiken und eine bessere Suche)


== Installation ==
== Installation ==


sollte nach einer Hostsharing-Variante der folgenden Beschreibung funktionieren:
Die Installation orientiert sich an dieser Anleitung und wurde für zammad 5.3 verfasst.
Einige HS spezifische Abweichungen gibt es jedoch.


* https://docs.zammad.org/en/latest/install/source.html  
* https://docs.zammad.org/en/latest/install/source.html  
=== User anlegen ===
Für diese Anleitung wird angenommen das der User unter dem zammad laufen soll xyz00-zammad im Packet xyz00 ist.


=== Installation ruby / ruby env ===
=== Installation ruby / ruby env ===
Zeile 26: Zeile 39:
   node -v  
   node -v  
dies sollte der herausgesuchten Versionsnummer entsprechen
dies sollte der herausgesuchten Versionsnummer entsprechen
=== Umgebungsvariablen ===
Meine `.profile`, `.bashrc`, `.bash_profile` sahen dann wie folgt aus (möglicherweise gibt es hier optimierungspotential)
Die Datei `.bash_profile`:
  . ~/.profile
  . ~/.bashrc
Die Datei `.profile` (vgl instalation ruby und nodejs):
  #ruby
  export PATH="$HOME/.rbenv/bin:$PATH"
  eval "$(rbenv init -)"
  #nodejs
  export NVM_DIR="$HOME/.nvm"
  [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
  [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
und die Datei `.bashrc`. Quellen vgl. [https://github.com/zammad/zammad/tree/develop/script/systemd/zammad.env] und  [https://docs.zammad.org/en/latest/appendix/configure-env-vars.html#performance-tuning]
  # zammad env config
  WEB_CONCURRENCY=4
  # service config
  BUNDLE_BINARY=bundle
  RAILS_ENV=production
  ZAMMAD_BIND_IP=127.0.0.1
  ZAMMAD_RAILS_PORT=3000
  ZAMMAD_WEBSOCKET_PORT=6042
Dann entweder alles neu einlesen oder einmal aus und wieder  einloggen. Wenn alles geklappt hat, sollten die folgenden Befehle alle sinnvolle Ausgaben liefern
  echo $RAILS_ENV # Ausgabe: production
  ruby -v # Ausgabe vgl. oben
  nodejs -v #  Ausgabe vgl. oben


=== Installation  von Zammad ===
=== Installation  von Zammad ===
Zuerst laden wir zammad herunter, entpacken es, und installieren die dependencies (nur production)
 
   wget -O - https://ftp.zammad.com/zammad-latest.tar.gz |tar -xvvz
   wget -O - https://ftp.zammad.com/zammad-latest.tar.gz |tar -xvvz
   cd zammad
   cd zammad
   bundle config set --local without 'test development mysql'
   bundle config set --local without 'test development mysql'
   bundle install
   bundle install
 
Dann tragen wir die zugangsdaten der postgres Datenbank ein (auf HS Admin selbst erstellen) hier: beides `xyz00_zammad`
Mit folgendem Inhalt (Einrückung beachten!):
   nano config/database.yml
   nano config/database.yml
 
 
Mit folgendem Inhalt:
  # config/database.yml
 
   production:
   production:
     adapter: postgresql
     adapter: postgresql
Zeile 46: Zeile 93:
     password: changeme
     password: changeme


Der Datenbank user und die Tabelle müssen in HS Admin entsprechend angelegt werden und in der config datei die entsprechenden Namen und Passwörter erstetzt werden. YAML einrückung beachten!
Wenn alles stimmt sollten sich die folgenden Befehle ohne Fehler ausführen lassen und die Datenbanktabellen  sowie die statischen Dateien zum ausliefern anlegen
    
    
  export RAILS_ENV=production
   rake db:migrate
   rake db:migrate
   rake assets:precompile
   rake assets:precompile


=== Zammad ausliefern ===  
=== Zammad ausliefern ===  
Um via Browser auf zammad zugreifen zu können muss es via [[Phusion Passenger]] ausgeliefert werden. Dazu muss die .htaccess wie dort im wiki Artikel beschrieben gesetzt werden. Zusätzlich muss der zammad ordner noch in app-ssl gelinkt werden und der statische content in htdocs-ssl. Optional kann das Domain Template noch um die subdomains bereinigt werden (2. Befehl)
Um via Browser auf zammad zugreifen zu können kann es via [[Phusion Passenger]] ausgeliefert werden. Dazu muss im HS Admin eine Domain aufgeschaltet werden. Dann wird:
* die .htaccess wie folgend gesetzt werden  
* der zammad ordner nach app-ssl gelinkt werden
* und der statische content in htdocs-ssl
* Optional kann das Domain Template noch um die subdomains bereinigt werden (2. Befehl)


   cd ~/doms/zammad.example.org/
   cd ~/doms/zammad.example.org/
Zeile 61: Zeile 111:
   ln -s ~/zammad app-ssl
   ln -s ~/zammad app-ssl
   ln -s ~/zammad/public htdocs-ssl
   ln -s ~/zammad/public htdocs-ssl
  nano .htaccess
  # Inhalt .htaccess
  #PassengerFriendlyErrorPages on # falls nötig zum debuggen einkommentieren
  RackEnv production
  RailsEnv production
  PassengerRuby /home/pacs/xyz00/users/zammad/.rbenv/shims/ruby
  # local websocket ssl forwarding
  RewriteCond %{HTTP:Connection} Upgrade [NC]
  RewriteCond %{HTTP:Upgrade} websocket [NC]
  RewriteRule /(.*) ws://127.0.0.1:6042/$1  [P,L]
Wenn alles geklappt hat sollte auf der Domain das restliche Web-basierte Setup zu sehen sein. Dort muss dann auch der andere HS Postfach User eingetragen werden. Theoretisch könnte man das auf dem gleichen Account abwickeln, ich persönlich würde es allerdings trennen. Piping wie bei manch andren Mailbasierten Anwendungen scheint nicht so einfach  möglich zu sein (needs more investigation)
=== Hintergrunddienste ===
Damit der Websocket-Server und der Hintergrund Worker ordentlich laufen müssen folgende Befehle ausgeführt werden. Die IP Adresse und der Port beim Socket werden aus den Enviroment Variablen von oben bezogen, können allerdings auch manuell  gesetzt werden.
  cd zammad
  bundle exec script/background-worker.rb start
  bundle exec script/websocket-server.rb -b ${ZAMMAD_BIND_IP} -p ${ZAMMAD_WEBSOCKET_PORT} start
=== Monit  ===
Ich habe alles monit spezifische in den ordner monit gepackt
  cd 
  mkdir monit
  cd monit
Zum starten habe ich ein kleines start und stop script (für monit) erstellt (lange zeile ggf. beachten)
  nano start-worker.sh
  #!/bin/bash
  . ~/.bash_profile
  cd ~/zammad
  exec  ${BUNDLE_BINARY} exec script/background-worker.rb start > ~/monit/worker.log 2>&1 &
  echo $! > ~/monit/worker.pid
  nano start-websocket.sh
  #!/bin/bash
  . ~/.bash_profile
  cd ~/zammad
  # warnung, der  socket  produziert relativ viel log output im normalen Betrieb ggf. anpassen
  exec ${BUNDLE_BINARY} exec script/websocket-server.rb -b ${ZAMMAD_BIND_IP} -p ${ZAMMAD_WEBSOCKET_PORT}  start > ~/monit/socket.log 2>&1 &
  echo $! > ~/monit/socket.pid
  nano stop-worker.sh
  kill $( cat ~/monit/worker.pid )
  nano stop-websocket.sh
  kill $( cat ~/monit/socket.pid )
Das dann alles noch in der `~/.monitrc` zusammenführen (achtung einige xyz00, zammad (user) und Mail Platzhalter):
  nano ~/.monitrc
  set daemon 60 with start delay 10
  set logfile /home/pacs/xyz00/users/zammad/monit/monit.log
  set idfile /home/pacs/xyz00/users/zammad/monit/monit.id
  set statefile /home/pacs/xyz00/users/zammad/monit/monit.state
  set mailserver localhost
  set mail-format { from: monit@your-domain.com }
  #set httpd port 39008 address localhost
  #    allow zammadadmin:ein-monit-passwort
  check process zammad_worker with pidfile /home/pacs/xyz00/users/zammad/monit/worker.pid
    start program "/home/pacs/xyz00/users/zammad/monit/start-worker.sh"
    stop program "/home/pacs/xyz00/users/zammad/monit/stop-worker.sh"
  check process zammad_socket with pidfile /home/pacs/opa00/users/zammad/monit/socket.pid
    start program "/home/pacs/xyz00/users/zammad/monit/start-websocket.sh"
    stop program "/home/pacs/xyz00/users/zammad/monit/stop-websocket.sh"
Noch schnell die rechte der 4 scripts anpassen:
  chmod u+x ~/monit/*.sh
Monit kann dann mit
  monit
gestartet werden.
Sobald monit einmal erfolgreich anlief sollte der monit Ordner so aussehen:
  ls -lh
  -rw-r--r-- 1 xyz00-zammad xyz00    32 Feb 23 11:59 monit.id
  -rw-r--r-- 1 xyz00-zammad xyz00  2867 Feb 24 23:46 monit.log
  -rw------- 1 xyz00-zammad xyz00  800 Feb 24 13:20 monit.state
  -rw-r--r-- 1 xyz00-zammad xyz00 41048 Feb 25 00:49 socket.log
  -rw-r--r-- 1 xyz00-zammad xyz00    5 Feb 24 23:45 socket.pid
  -rwxr--r-- 1 xyz00-zammad xyz00  209 Feb 24 23:45 start-websocket.sh
  -rwxr--r-- 1 xyz00-zammad xyz00  161 Feb 24 23:27 start-worker.sh
  -rwxr--r-- 1 xyz00-zammad xyz00    34 Feb 24 23:30 stop-websocket.sh
  -rwxr--r-- 1 xyz00-zammad xyz00    34 Feb 23 11:53 stop-worker.sh
  -rw-r--r-- 1 xyz00-zammad xyz00    0 Feb 24 23:38 worker.log
  -rw-r--r-- 1 xyz00-zammad xyz00    5 Feb 24 23:38 worker.pid
=== Optinal: Elasticsearch anbindung ===
Weiteren User nach [[Elasticsearch]] anlegen. Dieser muss dann mit zammad verknüpft werden. Hier wird der  Port 39200 angenommen.
  cd ~/zammad
  rails r "Setting.set('es_url', 'http://localhost:39200')"
  rails r "Setting.set('es_user', 'elasticsearch')"
  rails r "Setting.set('es_password', 'changeme')"


Durch aufrufen der Domain im Browser sollte das restliche Web-basierte Setup ablaufen.  
Um Elasticsearch wieder zu deaktivieren einfach die URL durch einen leeren string ersetzen.  


== Zammad Upgrade ==
== Zammad Upgrade ==

Version vom 25. Februar 2023, 00:08 Uhr

Zammad ist ein relativ umfangreiches, mächtiges und modernes OSS Helpdesk Tool. Für die Instalation wird benötigt:

  • 2+ User im HS Admin (einer für den Webspace und mindestens einen für die eingehenden Ticketmails als Postfach)
  • eine (Sub)Domain
  • 2 bis 4 GB RAM (Schätzung, eure Erfahrung kann abweichen, je nach Nutzung)
  • ruby
  • nodejs
  • Optional: monit (für die hintergrund Dienste)
  • Optional: elasticsearch (für die Statistiken und eine bessere Suche)

Installation

Die Installation orientiert sich an dieser Anleitung und wurde für zammad 5.3 verfasst. Einige HS spezifische Abweichungen gibt es jedoch.

User anlegen

Für diese Anleitung wird angenommen das der User unter dem zammad laufen soll xyz00-zammad im Packet xyz00 ist.

Installation ruby / ruby env

Prüfe die Version von ruby die zammad benötigt hier.

Für diese Anleitung nehmen wir Version 3.0.5 an für zammad 5.2+.

Die Installationsanleitung für rubyenv und ruby findet sich unter RubyRBEnv.

Verifiziere das die Installation geklappt hat mit

 ruby -v 

dies sollte der herausgesuchten Versionsnummer entsprechen

Installation nodejs

Prüfe die Version von nodejs die zammad benötigt hier.

Für diese Anleitung nehmen wir Version 16.0+ an für zammad 5.2+.

Verifiziere das die Installation geklappt hat mit

 node -v 

dies sollte der herausgesuchten Versionsnummer entsprechen

Umgebungsvariablen

Meine `.profile`, `.bashrc`, `.bash_profile` sahen dann wie folgt aus (möglicherweise gibt es hier optimierungspotential)

Die Datei `.bash_profile`:

 . ~/.profile
 . ~/.bashrc

Die Datei `.profile` (vgl instalation ruby und nodejs):

 #ruby
 export PATH="$HOME/.rbenv/bin:$PATH"
 eval "$(rbenv init -)"
 #nodejs
 export NVM_DIR="$HOME/.nvm"
 [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
 [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

und die Datei `.bashrc`. Quellen vgl. [1] und [2]

 # zammad env config
 WEB_CONCURRENCY=4
 # service config
 BUNDLE_BINARY=bundle
 RAILS_ENV=production
 ZAMMAD_BIND_IP=127.0.0.1
 ZAMMAD_RAILS_PORT=3000
 ZAMMAD_WEBSOCKET_PORT=6042

Dann entweder alles neu einlesen oder einmal aus und wieder einloggen. Wenn alles geklappt hat, sollten die folgenden Befehle alle sinnvolle Ausgaben liefern

 echo $RAILS_ENV # Ausgabe: production
 ruby -v # Ausgabe vgl. oben
 nodejs -v #  Ausgabe vgl. oben

Installation von Zammad

Zuerst laden wir zammad herunter, entpacken es, und installieren die dependencies (nur production)

 wget -O - https://ftp.zammad.com/zammad-latest.tar.gz |tar -xvvz
 cd zammad
 bundle config set --local without 'test development mysql'
 bundle install
 

Dann tragen wir die zugangsdaten der postgres Datenbank ein (auf HS Admin selbst erstellen) hier: beides `xyz00_zammad` Mit folgendem Inhalt (Einrückung beachten!):

 nano config/database.yml
 
 # config/database.yml
 production:
   adapter: postgresql
   host: localhost
   database: xyz00_zammad
   pool: 50
   timeout: 5000
   encoding: utf8
   username: xyz00_zammad
   password: changeme

Wenn alles stimmt sollten sich die folgenden Befehle ohne Fehler ausführen lassen und die Datenbanktabellen sowie die statischen Dateien zum ausliefern anlegen

  rake db:migrate
  rake assets:precompile

Zammad ausliefern

Um via Browser auf zammad zugreifen zu können kann es via Phusion Passenger ausgeliefert werden. Dazu muss im HS Admin eine Domain aufgeschaltet werden. Dann wird:

  • die .htaccess wie folgend gesetzt werden
  • der zammad ordner nach app-ssl gelinkt werden
  • und der statische content in htdocs-ssl
  • Optional kann das Domain Template noch um die subdomains bereinigt werden (2. Befehl)
 cd ~/doms/zammad.example.org/
 rm -r subs*
 rm -r htdocs-ssl
 rm -r app-ssl
 ln -s ~/zammad app-ssl
 ln -s ~/zammad/public htdocs-ssl
 nano .htaccess
 # Inhalt .htaccess
 #PassengerFriendlyErrorPages on # falls nötig zum debuggen einkommentieren
 RackEnv production
 RailsEnv production
 PassengerRuby /home/pacs/xyz00/users/zammad/.rbenv/shims/ruby
 # local websocket ssl forwarding
 RewriteCond %{HTTP:Connection} Upgrade [NC]
 RewriteCond %{HTTP:Upgrade} websocket [NC]
 RewriteRule /(.*) ws://127.0.0.1:6042/$1  [P,L]

Wenn alles geklappt hat sollte auf der Domain das restliche Web-basierte Setup zu sehen sein. Dort muss dann auch der andere HS Postfach User eingetragen werden. Theoretisch könnte man das auf dem gleichen Account abwickeln, ich persönlich würde es allerdings trennen. Piping wie bei manch andren Mailbasierten Anwendungen scheint nicht so einfach möglich zu sein (needs more investigation)

Hintergrunddienste

Damit der Websocket-Server und der Hintergrund Worker ordentlich laufen müssen folgende Befehle ausgeführt werden. Die IP Adresse und der Port beim Socket werden aus den Enviroment Variablen von oben bezogen, können allerdings auch manuell gesetzt werden.

 cd zammad
 bundle exec script/background-worker.rb start
 bundle exec script/websocket-server.rb -b ${ZAMMAD_BIND_IP} -p ${ZAMMAD_WEBSOCKET_PORT} start

Monit

Ich habe alles monit spezifische in den ordner monit gepackt

 cd   
 mkdir monit
 cd monit

Zum starten habe ich ein kleines start und stop script (für monit) erstellt (lange zeile ggf. beachten)

 nano start-worker.sh
 #!/bin/bash
 . ~/.bash_profile
 cd ~/zammad
 exec  ${BUNDLE_BINARY} exec script/background-worker.rb start > ~/monit/worker.log 2>&1 &
 echo $! > ~/monit/worker.pid
 nano start-websocket.sh
 #!/bin/bash
 . ~/.bash_profile
 cd ~/zammad
 # warnung, der  socket  produziert relativ viel log output im normalen Betrieb ggf. anpassen
 exec ${BUNDLE_BINARY} exec script/websocket-server.rb -b ${ZAMMAD_BIND_IP} -p ${ZAMMAD_WEBSOCKET_PORT}  start > ~/monit/socket.log 2>&1 & 
 echo $! > ~/monit/socket.pid
 nano stop-worker.sh
 kill $( cat ~/monit/worker.pid )
 nano stop-websocket.sh
 kill $( cat ~/monit/socket.pid )

Das dann alles noch in der `~/.monitrc` zusammenführen (achtung einige xyz00, zammad (user) und Mail Platzhalter):

 nano ~/.monitrc
 set daemon 60 with start delay 10
 set logfile /home/pacs/xyz00/users/zammad/monit/monit.log
 set idfile /home/pacs/xyz00/users/zammad/monit/monit.id
 set statefile /home/pacs/xyz00/users/zammad/monit/monit.state
 set mailserver localhost
 set mail-format { from: monit@your-domain.com }
 #set httpd port 39008 address localhost
 #    allow zammadadmin:ein-monit-passwort
 check process zammad_worker with pidfile /home/pacs/xyz00/users/zammad/monit/worker.pid
   start program "/home/pacs/xyz00/users/zammad/monit/start-worker.sh"
   stop program "/home/pacs/xyz00/users/zammad/monit/stop-worker.sh"
 check process zammad_socket with pidfile /home/pacs/opa00/users/zammad/monit/socket.pid
   start program "/home/pacs/xyz00/users/zammad/monit/start-websocket.sh"
   stop program "/home/pacs/xyz00/users/zammad/monit/stop-websocket.sh"

Noch schnell die rechte der 4 scripts anpassen:

  chmod u+x ~/monit/*.sh

Monit kann dann mit

  monit

gestartet werden.

Sobald monit einmal erfolgreich anlief sollte der monit Ordner so aussehen:

 ls -lh
 -rw-r--r-- 1 xyz00-zammad xyz00    32 Feb 23 11:59 monit.id
 -rw-r--r-- 1 xyz00-zammad xyz00  2867 Feb 24 23:46 monit.log
 -rw------- 1 xyz00-zammad xyz00   800 Feb 24 13:20 monit.state
 -rw-r--r-- 1 xyz00-zammad xyz00 41048 Feb 25 00:49 socket.log
 -rw-r--r-- 1 xyz00-zammad xyz00     5 Feb 24 23:45 socket.pid
 -rwxr--r-- 1 xyz00-zammad xyz00   209 Feb 24 23:45 start-websocket.sh
 -rwxr--r-- 1 xyz00-zammad xyz00   161 Feb 24 23:27 start-worker.sh
 -rwxr--r-- 1 xyz00-zammad xyz00    34 Feb 24 23:30 stop-websocket.sh
 -rwxr--r-- 1 xyz00-zammad xyz00    34 Feb 23 11:53 stop-worker.sh
 -rw-r--r-- 1 xyz00-zammad xyz00     0 Feb 24 23:38 worker.log
 -rw-r--r-- 1 xyz00-zammad xyz00     5 Feb 24 23:38 worker.pid

Optinal: Elasticsearch anbindung

Weiteren User nach Elasticsearch anlegen. Dieser muss dann mit zammad verknüpft werden. Hier wird der Port 39200 angenommen.

 cd ~/zammad
 rails r "Setting.set('es_url', 'http://localhost:39200')"
 rails r "Setting.set('es_user', 'elasticsearch')"
 rails r "Setting.set('es_password', 'changeme')"

Um Elasticsearch wieder zu deaktivieren einfach die URL durch einen leeren string ersetzen.

Zammad Upgrade

killall -u $USER
killall -u $USER 9

cp -a zammad zammad-old
cd zammad
wget -O - https://ftp.zammad.com/zammad-latest.tar.gz |tar -xvvz
bundle install --without test development mysql

	Geht nicht, Ruby 2.2.5 fehlt!

cd
rbenv install 2.5.5

	Geht nicht, Rbenv ist zu alt!

cd ~/.rbenv/plugins/ruby-build
git pull
cd
rbenv install 2.5.5
rbenv global 2.5.5
rbenv local 2.5.5

cd zammad
gem install bundle
gem install bundler
bundle install --without test development mysql

Geht nicht, Bundler 1.17.x wird gebraucht.

gem install bundler==1.17.3

	Geht auch nicht.
	Dann hacken wir das mal versuchsweise ins Lock.

vim Gemfile.lock

bundle install --without test development mysql

	Es fehlen Libs.
	HS bitte installieren...
	[...]
	Danke!

bundle install --without test development mysql
export RAILS_ENV=production
rake db:migrate
rake assets:precompile

/usr/bin/supervisord -c $HOME/supervisor/etc/supervisord.conf