<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.hostsharing.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Opa00</id>
	<title>Hostsharing Wiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.hostsharing.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Opa00"/>
	<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Spezial:Beitr%C3%A4ge/Opa00"/>
	<updated>2026-04-28T17:43:03Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Zammad&amp;diff=6033</id>
		<title>Zammad</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Zammad&amp;diff=6033"/>
		<updated>2023-02-25T23:04:28Z</updated>

		<summary type="html">&lt;p&gt;Opa00: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Zammad ist ein relativ umfangreiches, mächtiges und modernes OSS Helpdesk Tool. Für die Instalation wird benötigt: &lt;br /&gt;
&lt;br /&gt;
* eine (Sub)Domain &lt;br /&gt;
* 2 bis 4 GB RAM (Schätzung, eure Erfahrung kann abweichen, je nach Nutzung)&lt;br /&gt;
* ruby&lt;br /&gt;
* nodejs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Die Installation orientiert sich an dieser Anleitung und wurde für zammad 5.3 verfasst. &lt;br /&gt;
Einige HS spezifische Abweichungen gibt es jedoch.&lt;br /&gt;
&lt;br /&gt;
* https://docs.zammad.org/en/latest/install/source.html &lt;br /&gt;
&lt;br /&gt;
=== User anlegen ===&lt;br /&gt;
Für diese Anleitung wird angenommen das der User unter dem zammad laufen soll xyz00-zammad im Packet xyz00 ist.&lt;br /&gt;
&lt;br /&gt;
=== Installation ruby / ruby env ===&lt;br /&gt;
Prüfe die Version von ruby die zammad benötigt [https://docs.zammad.org/en/latest/prerequisites/software.html#ruby-programming-language hier].&lt;br /&gt;
&lt;br /&gt;
Für diese Anleitung nehmen wir Version 3.0.5 an für zammad 5.2+.&lt;br /&gt;
&lt;br /&gt;
Die Installationsanleitung für rubyenv und ruby findet sich unter [[RubyRBEnv]].&lt;br /&gt;
&lt;br /&gt;
Verifiziere das die Installation geklappt hat mit&lt;br /&gt;
  ruby -v &lt;br /&gt;
dies sollte der herausgesuchten Versionsnummer entsprechen&lt;br /&gt;
&lt;br /&gt;
=== Installation nodejs ===&lt;br /&gt;
Prüfe die Version von nodejs die zammad benötigt [https://docs.zammad.org/en/latest/prerequisites/software.html#node-js  hier].&lt;br /&gt;
&lt;br /&gt;
Für diese Anleitung nehmen wir Version 16.0+ an für zammad 5.2+.&lt;br /&gt;
&lt;br /&gt;
Verifiziere das die Installation geklappt hat mit&lt;br /&gt;
  node -v &lt;br /&gt;
dies sollte der herausgesuchten Versionsnummer entsprechen&lt;br /&gt;
&lt;br /&gt;
=== Umgebungsvariablen === &lt;br /&gt;
&lt;br /&gt;
Meine `.profile`, `.bashrc`, `.bash_profile` sahen dann wie folgt aus (möglicherweise gibt es hier optimierungspotential)&lt;br /&gt;
&lt;br /&gt;
Die Datei `.bash_profile`:&lt;br /&gt;
  . ~/.profile&lt;br /&gt;
  . ~/.bashrc&lt;br /&gt;
Die Datei `.profile` (vgl instalation ruby und nodejs):&lt;br /&gt;
  #ruby&lt;br /&gt;
  export PATH=&amp;quot;$HOME/.rbenv/bin:$PATH&amp;quot;&lt;br /&gt;
  eval &amp;quot;$(rbenv init -)&amp;quot;&lt;br /&gt;
  #nodejs&lt;br /&gt;
  export NVM_DIR=&amp;quot;$HOME/.nvm&amp;quot;&lt;br /&gt;
  [ -s &amp;quot;$NVM_DIR/nvm.sh&amp;quot; ] &amp;amp;&amp;amp; \. &amp;quot;$NVM_DIR/nvm.sh&amp;quot;  # This loads nvm&lt;br /&gt;
  [ -s &amp;quot;$NVM_DIR/bash_completion&amp;quot; ] &amp;amp;&amp;amp; \. &amp;quot;$NVM_DIR/bash_completion&amp;quot;  # This loads nvm bash_completion&lt;br /&gt;
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]&lt;br /&gt;
  # zammad env config&lt;br /&gt;
  WEB_CONCURRENCY=4&lt;br /&gt;
  # service config&lt;br /&gt;
  BUNDLE_BINARY=bundle&lt;br /&gt;
  RAILS_ENV=production&lt;br /&gt;
  ZAMMAD_BIND_IP=127.0.0.1&lt;br /&gt;
  ZAMMAD_RAILS_PORT=3000&lt;br /&gt;
  ZAMMAD_WEBSOCKET_PORT=6042&lt;br /&gt;
&lt;br /&gt;
Dann entweder alles neu einlesen oder einmal aus und wieder  einloggen. Wenn alles geklappt hat, sollten die folgenden Befehle alle sinnvolle Ausgaben liefern&lt;br /&gt;
  echo $RAILS_ENV # Ausgabe: production&lt;br /&gt;
  ruby -v # Ausgabe vgl. oben&lt;br /&gt;
  nodejs -v #  Ausgabe vgl. oben&lt;br /&gt;
&lt;br /&gt;
=== Installation  von Zammad ===&lt;br /&gt;
Zuerst laden wir zammad herunter, entpacken es, und installieren die dependencies (nur production)&lt;br /&gt;
  &lt;br /&gt;
  wget -O - https://ftp.zammad.com/zammad-latest.tar.gz |tar -xvvz&lt;br /&gt;
  cd zammad&lt;br /&gt;
  bundle config set --local without &#039;test development mysql&#039;&lt;br /&gt;
  bundle install&lt;br /&gt;
  &lt;br /&gt;
Dann tragen wir die zugangsdaten der postgres Datenbank ein (auf HS Admin selbst erstellen) hier: beides `xyz00_zammad`&lt;br /&gt;
Mit folgendem Inhalt (Einrückung beachten!): &lt;br /&gt;
  nano config/database.yml&lt;br /&gt;
  &lt;br /&gt;
  # config/database.yml&lt;br /&gt;
  production:&lt;br /&gt;
    adapter: postgresql&lt;br /&gt;
    host: localhost&lt;br /&gt;
    database: xyz00_zammad&lt;br /&gt;
    pool: 50&lt;br /&gt;
    timeout: 5000&lt;br /&gt;
    encoding: utf8&lt;br /&gt;
    username: xyz00_zammad&lt;br /&gt;
    password: changeme&lt;br /&gt;
&lt;br /&gt;
Wenn alles stimmt sollten sich die folgenden Befehle ohne Fehler ausführen lassen und die Datenbanktabellen   sowie die statischen Dateien zum ausliefern  anlegen&lt;br /&gt;
  &lt;br /&gt;
   rake db:migrate&lt;br /&gt;
   rake assets:precompile&lt;br /&gt;
&lt;br /&gt;
=== Zammad ausliefern === &lt;br /&gt;
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:&lt;br /&gt;
* die .htaccess wie folgend gesetzt werden &lt;br /&gt;
* der zammad ordner nach app-ssl gelinkt werden&lt;br /&gt;
* und der statische content in htdocs-ssl&lt;br /&gt;
* Optional kann das Domain Template noch um die subdomains bereinigt werden (2. Befehl)&lt;br /&gt;
&lt;br /&gt;
  cd ~/doms/zammad.example.org/&lt;br /&gt;
  rm -r subs*&lt;br /&gt;
  rm -r htdocs-ssl&lt;br /&gt;
  rm -r app-ssl&lt;br /&gt;
  ln -s ~/zammad app-ssl&lt;br /&gt;
  ln -s ~/zammad/public htdocs-ssl&lt;br /&gt;
  nano .htaccess&lt;br /&gt;
&lt;br /&gt;
  # Inhalt .htaccess&lt;br /&gt;
  #PassengerFriendlyErrorPages on # falls nötig zum debuggen einkommentieren&lt;br /&gt;
  RackEnv production&lt;br /&gt;
  RailsEnv production&lt;br /&gt;
  PassengerRuby /home/pacs/xyz00/users/zammad/.rbenv/shims/ruby&lt;br /&gt;
  # local websocket ssl forwarding&lt;br /&gt;
  RewriteCond %{HTTP:Connection} Upgrade [NC]&lt;br /&gt;
  RewriteCond %{HTTP:Upgrade} websocket [NC]&lt;br /&gt;
  RewriteRule /(.*) ws://127.0.0.1:6042/$1  [P,L]&lt;br /&gt;
&lt;br /&gt;
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)&lt;br /&gt;
&lt;br /&gt;
=== Hintergrunddienste === &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
  cd zammad&lt;br /&gt;
  bundle exec script/background-worker.rb start&lt;br /&gt;
  bundle exec script/websocket-server.rb -b ${ZAMMAD_BIND_IP} -p ${ZAMMAD_WEBSOCKET_PORT} start&lt;br /&gt;
&lt;br /&gt;
== Empfohlen: Monit  ==&lt;br /&gt;
Ich habe alles monit spezifische in den ordner monit gepackt&lt;br /&gt;
  cd   &lt;br /&gt;
  mkdir monit&lt;br /&gt;
  cd monit&lt;br /&gt;
Zum starten habe ich ein kleines start und stop script (für monit) erstellt (lange zeile ggf. beachten)&lt;br /&gt;
&lt;br /&gt;
  nano start-worker.sh&lt;br /&gt;
&lt;br /&gt;
  #!/bin/bash&lt;br /&gt;
  . ~/.bash_profile&lt;br /&gt;
  cd ~/zammad&lt;br /&gt;
  exec  ${BUNDLE_BINARY} exec script/background-worker.rb start &amp;gt; ~/monit/worker.log 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
  echo $! &amp;gt; ~/monit/worker.pid&lt;br /&gt;
&lt;br /&gt;
  nano start-websocket.sh&lt;br /&gt;
&lt;br /&gt;
  #!/bin/bash&lt;br /&gt;
  . ~/.bash_profile&lt;br /&gt;
  cd ~/zammad&lt;br /&gt;
  # warnung, der  socket  produziert relativ viel log output im normalen Betrieb ggf. anpassen&lt;br /&gt;
  exec ${BUNDLE_BINARY} exec script/websocket-server.rb -b ${ZAMMAD_BIND_IP} -p ${ZAMMAD_WEBSOCKET_PORT}  start &amp;gt; ~/monit/socket.log 2&amp;gt;&amp;amp;1 &amp;amp; &lt;br /&gt;
  echo $! &amp;gt; ~/monit/socket.pid&lt;br /&gt;
&lt;br /&gt;
  nano stop-worker.sh&lt;br /&gt;
&lt;br /&gt;
  kill $( cat ~/monit/worker.pid )&lt;br /&gt;
&lt;br /&gt;
  nano stop-websocket.sh&lt;br /&gt;
&lt;br /&gt;
  kill $( cat ~/monit/socket.pid )&lt;br /&gt;
&lt;br /&gt;
Das dann alles noch in der `~/.monitrc` zusammenführen (achtung einige xyz00, zammad (user) und Mail Platzhalter):&lt;br /&gt;
&lt;br /&gt;
  nano ~/.monitrc&lt;br /&gt;
&lt;br /&gt;
  set daemon 60 with start delay 10&lt;br /&gt;
  set logfile /home/pacs/xyz00/users/zammad/monit/monit.log&lt;br /&gt;
  set idfile /home/pacs/xyz00/users/zammad/monit/monit.id&lt;br /&gt;
  set statefile /home/pacs/xyz00/users/zammad/monit/monit.state&lt;br /&gt;
  set mailserver localhost&lt;br /&gt;
  set mail-format { from: monit@your-domain.com }&lt;br /&gt;
  #set httpd port 39008 address localhost&lt;br /&gt;
  #    allow zammadadmin:ein-monit-passwort&lt;br /&gt;
  check process zammad_worker with pidfile /home/pacs/xyz00/users/zammad/monit/worker.pid&lt;br /&gt;
    start program &amp;quot;/home/pacs/xyz00/users/zammad/monit/start-worker.sh&amp;quot;&lt;br /&gt;
    stop program &amp;quot;/home/pacs/xyz00/users/zammad/monit/stop-worker.sh&amp;quot;&lt;br /&gt;
  check process zammad_socket with pidfile /home/pacs/opa00/users/zammad/monit/socket.pid&lt;br /&gt;
    start program &amp;quot;/home/pacs/xyz00/users/zammad/monit/start-websocket.sh&amp;quot;&lt;br /&gt;
    stop program &amp;quot;/home/pacs/xyz00/users/zammad/monit/stop-websocket.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Noch schnell die rechte der 4 scripts anpassen: &lt;br /&gt;
   chmod u+x ~/monit/*.sh&lt;br /&gt;
&lt;br /&gt;
Monit kann dann mit &lt;br /&gt;
   monit&lt;br /&gt;
gestartet werden.&lt;br /&gt;
&lt;br /&gt;
Sobald monit einmal erfolgreich anlief sollte der monit Ordner so aussehen:&lt;br /&gt;
  ls -lh&lt;br /&gt;
&lt;br /&gt;
  -rw-r--r-- 1 xyz00-zammad xyz00    32 Feb 23 11:59 monit.id&lt;br /&gt;
  -rw-r--r-- 1 xyz00-zammad xyz00  2867 Feb 24 23:46 monit.log&lt;br /&gt;
  -rw------- 1 xyz00-zammad xyz00   800 Feb 24 13:20 monit.state&lt;br /&gt;
  -rw-r--r-- 1 xyz00-zammad xyz00 41048 Feb 25 00:49 socket.log&lt;br /&gt;
  -rw-r--r-- 1 xyz00-zammad xyz00     5 Feb 24 23:45 socket.pid&lt;br /&gt;
  -rwxr--r-- 1 xyz00-zammad xyz00   209 Feb 24 23:45 start-websocket.sh&lt;br /&gt;
  -rwxr--r-- 1 xyz00-zammad xyz00   161 Feb 24 23:27 start-worker.sh&lt;br /&gt;
  -rwxr--r-- 1 xyz00-zammad xyz00    34 Feb 24 23:30 stop-websocket.sh&lt;br /&gt;
  -rwxr--r-- 1 xyz00-zammad xyz00    34 Feb 23 11:53 stop-worker.sh&lt;br /&gt;
  -rw-r--r-- 1 xyz00-zammad xyz00     0 Feb 24 23:38 worker.log&lt;br /&gt;
  -rw-r--r-- 1 xyz00-zammad xyz00     5 Feb 24 23:38 worker.pid&lt;br /&gt;
&lt;br /&gt;
== Optional: Mail-Piping ==&lt;br /&gt;
&lt;br /&gt;
Um ein bisschen (viel) Last vom Background-Worker zu nehmen kann Mailpiping eingerichtet werden. Dafür sollte vermutlich  zuerst der Webinstaller mit einer anderen IMAP/SMTP config durchgeklickt werden. Zusätzlich reduziert sich die Latenz von Maileingang bis Ticketeingang ein wenig. &lt;br /&gt;
&lt;br /&gt;
=== Ausgangsserver auf sendmail festlegen ===&lt;br /&gt;
&lt;br /&gt;
Der folgende Code schnippsel legt einen Mail-Kanal an, ohne einen dedizierten Eingang der regelmäßig abgerufen werden müsste. Quelle [https://admin-docs.zammad.org/en/latest/channels/email/advanced/sendmail.html]&lt;br /&gt;
&lt;br /&gt;
  rails r &amp;quot;Channel.create(area: &#039;Email::Account&#039;, options: { inbound: { adapter: &#039;null&#039;, options: {} }, outbound: { adapter: &#039;sendmail&#039; } }, active: true, preferences: { editable: false }, updated_by_id: 1, created_by_id: 1)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Maileingang per  procmail  ===  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Optional: Elasticsearch anbindung ==&lt;br /&gt;
&lt;br /&gt;
Weiteren User nach [[Elasticsearch]] anlegen. Dieser muss dann mit zammad verknüpft werden. Hier wird der  Port 39200 angenommen. &lt;br /&gt;
&lt;br /&gt;
  cd ~/zammad&lt;br /&gt;
  rails r &amp;quot;Setting.set(&#039;es_url&#039;, &#039;http://localhost:39200&#039;)&amp;quot;&lt;br /&gt;
  rails r &amp;quot;Setting.set(&#039;es_user&#039;, &#039;elasticsearch&#039;)&amp;quot;&lt;br /&gt;
  rails r &amp;quot;Setting.set(&#039;es_password&#039;, &#039;changeme&#039;)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Um Elasticsearch wieder zu deaktivieren einfach die URL durch einen leeren string ersetzen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Zammad Upgrade ==&lt;br /&gt;
&lt;br /&gt;
{{Baustelle}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
killall -u $USER&lt;br /&gt;
killall -u $USER 9&lt;br /&gt;
&lt;br /&gt;
cp -a zammad zammad-old&lt;br /&gt;
cd zammad&lt;br /&gt;
wget -O - https://ftp.zammad.com/zammad-latest.tar.gz |tar -xvvz&lt;br /&gt;
bundle install --without test development mysql&lt;br /&gt;
&lt;br /&gt;
	Geht nicht, Ruby 2.2.5 fehlt!&lt;br /&gt;
&lt;br /&gt;
cd&lt;br /&gt;
rbenv install 2.5.5&lt;br /&gt;
&lt;br /&gt;
	Geht nicht, Rbenv ist zu alt!&lt;br /&gt;
&lt;br /&gt;
cd ~/.rbenv/plugins/ruby-build&lt;br /&gt;
git pull&lt;br /&gt;
cd&lt;br /&gt;
rbenv install 2.5.5&lt;br /&gt;
rbenv global 2.5.5&lt;br /&gt;
rbenv local 2.5.5&lt;br /&gt;
&lt;br /&gt;
cd zammad&lt;br /&gt;
gem install bundle&lt;br /&gt;
gem install bundler&lt;br /&gt;
bundle install --without test development mysql&lt;br /&gt;
&lt;br /&gt;
Geht nicht, Bundler 1.17.x wird gebraucht.&lt;br /&gt;
&lt;br /&gt;
gem install bundler==1.17.3&lt;br /&gt;
&lt;br /&gt;
	Geht auch nicht.&lt;br /&gt;
	Dann hacken wir das mal versuchsweise ins Lock.&lt;br /&gt;
&lt;br /&gt;
vim Gemfile.lock&lt;br /&gt;
&lt;br /&gt;
bundle install --without test development mysql&lt;br /&gt;
&lt;br /&gt;
	Es fehlen Libs.&lt;br /&gt;
	HS bitte installieren...&lt;br /&gt;
	[...]&lt;br /&gt;
	Danke!&lt;br /&gt;
&lt;br /&gt;
bundle install --without test development mysql&lt;br /&gt;
export RAILS_ENV=production&lt;br /&gt;
rake db:migrate&lt;br /&gt;
rake assets:precompile&lt;br /&gt;
&lt;br /&gt;
/usr/bin/supervisord -c $HOME/supervisor/etc/supervisord.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:RubyOnRails]]&lt;/div&gt;</summary>
		<author><name>Opa00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Zammad&amp;diff=6032</id>
		<title>Zammad</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Zammad&amp;diff=6032"/>
		<updated>2023-02-25T00:08:43Z</updated>

		<summary type="html">&lt;p&gt;Opa00: changed headlines&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Zammad ist ein relativ umfangreiches, mächtiges und modernes OSS Helpdesk Tool. Für die Instalation wird benötigt: &lt;br /&gt;
&lt;br /&gt;
* 2+ User im HS Admin (einer für den Webspace und mindestens einen für die eingehenden Ticketmails als Postfach)&lt;br /&gt;
* eine (Sub)Domain &lt;br /&gt;
* 2 bis 4 GB RAM (Schätzung, eure Erfahrung kann abweichen, je nach Nutzung)&lt;br /&gt;
* ruby&lt;br /&gt;
* nodejs&lt;br /&gt;
* Optional: monit (für die hintergrund Dienste)&lt;br /&gt;
* Optional: elasticsearch (für die Statistiken und eine bessere Suche)&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Die Installation orientiert sich an dieser Anleitung und wurde für zammad 5.3 verfasst. &lt;br /&gt;
Einige HS spezifische Abweichungen gibt es jedoch.&lt;br /&gt;
&lt;br /&gt;
* https://docs.zammad.org/en/latest/install/source.html &lt;br /&gt;
&lt;br /&gt;
=== User anlegen ===&lt;br /&gt;
Für diese Anleitung wird angenommen das der User unter dem zammad laufen soll xyz00-zammad im Packet xyz00 ist.&lt;br /&gt;
&lt;br /&gt;
=== Installation ruby / ruby env ===&lt;br /&gt;
Prüfe die Version von ruby die zammad benötigt [https://docs.zammad.org/en/latest/prerequisites/software.html#ruby-programming-language hier].&lt;br /&gt;
&lt;br /&gt;
Für diese Anleitung nehmen wir Version 3.0.5 an für zammad 5.2+.&lt;br /&gt;
&lt;br /&gt;
Die Installationsanleitung für rubyenv und ruby findet sich unter [[RubyRBEnv]].&lt;br /&gt;
&lt;br /&gt;
Verifiziere das die Installation geklappt hat mit&lt;br /&gt;
  ruby -v &lt;br /&gt;
dies sollte der herausgesuchten Versionsnummer entsprechen&lt;br /&gt;
&lt;br /&gt;
=== Installation nodejs ===&lt;br /&gt;
Prüfe die Version von nodejs die zammad benötigt [https://docs.zammad.org/en/latest/prerequisites/software.html#node-js  hier].&lt;br /&gt;
&lt;br /&gt;
Für diese Anleitung nehmen wir Version 16.0+ an für zammad 5.2+.&lt;br /&gt;
&lt;br /&gt;
Verifiziere das die Installation geklappt hat mit&lt;br /&gt;
  node -v &lt;br /&gt;
dies sollte der herausgesuchten Versionsnummer entsprechen&lt;br /&gt;
&lt;br /&gt;
=== Umgebungsvariablen === &lt;br /&gt;
&lt;br /&gt;
Meine `.profile`, `.bashrc`, `.bash_profile` sahen dann wie folgt aus (möglicherweise gibt es hier optimierungspotential)&lt;br /&gt;
&lt;br /&gt;
Die Datei `.bash_profile`:&lt;br /&gt;
  . ~/.profile&lt;br /&gt;
  . ~/.bashrc&lt;br /&gt;
Die Datei `.profile` (vgl instalation ruby und nodejs):&lt;br /&gt;
  #ruby&lt;br /&gt;
  export PATH=&amp;quot;$HOME/.rbenv/bin:$PATH&amp;quot;&lt;br /&gt;
  eval &amp;quot;$(rbenv init -)&amp;quot;&lt;br /&gt;
  #nodejs&lt;br /&gt;
  export NVM_DIR=&amp;quot;$HOME/.nvm&amp;quot;&lt;br /&gt;
  [ -s &amp;quot;$NVM_DIR/nvm.sh&amp;quot; ] &amp;amp;&amp;amp; \. &amp;quot;$NVM_DIR/nvm.sh&amp;quot;  # This loads nvm&lt;br /&gt;
  [ -s &amp;quot;$NVM_DIR/bash_completion&amp;quot; ] &amp;amp;&amp;amp; \. &amp;quot;$NVM_DIR/bash_completion&amp;quot;  # This loads nvm bash_completion&lt;br /&gt;
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]&lt;br /&gt;
  # zammad env config&lt;br /&gt;
  WEB_CONCURRENCY=4&lt;br /&gt;
  # service config&lt;br /&gt;
  BUNDLE_BINARY=bundle&lt;br /&gt;
  RAILS_ENV=production&lt;br /&gt;
  ZAMMAD_BIND_IP=127.0.0.1&lt;br /&gt;
  ZAMMAD_RAILS_PORT=3000&lt;br /&gt;
  ZAMMAD_WEBSOCKET_PORT=6042&lt;br /&gt;
&lt;br /&gt;
Dann entweder alles neu einlesen oder einmal aus und wieder  einloggen. Wenn alles geklappt hat, sollten die folgenden Befehle alle sinnvolle Ausgaben liefern&lt;br /&gt;
  echo $RAILS_ENV # Ausgabe: production&lt;br /&gt;
  ruby -v # Ausgabe vgl. oben&lt;br /&gt;
  nodejs -v #  Ausgabe vgl. oben&lt;br /&gt;
&lt;br /&gt;
=== Installation  von Zammad ===&lt;br /&gt;
Zuerst laden wir zammad herunter, entpacken es, und installieren die dependencies (nur production)&lt;br /&gt;
  &lt;br /&gt;
  wget -O - https://ftp.zammad.com/zammad-latest.tar.gz |tar -xvvz&lt;br /&gt;
  cd zammad&lt;br /&gt;
  bundle config set --local without &#039;test development mysql&#039;&lt;br /&gt;
  bundle install&lt;br /&gt;
  &lt;br /&gt;
Dann tragen wir die zugangsdaten der postgres Datenbank ein (auf HS Admin selbst erstellen) hier: beides `xyz00_zammad`&lt;br /&gt;
Mit folgendem Inhalt (Einrückung beachten!): &lt;br /&gt;
  nano config/database.yml&lt;br /&gt;
  &lt;br /&gt;
  # config/database.yml&lt;br /&gt;
  production:&lt;br /&gt;
    adapter: postgresql&lt;br /&gt;
    host: localhost&lt;br /&gt;
    database: xyz00_zammad&lt;br /&gt;
    pool: 50&lt;br /&gt;
    timeout: 5000&lt;br /&gt;
    encoding: utf8&lt;br /&gt;
    username: xyz00_zammad&lt;br /&gt;
    password: changeme&lt;br /&gt;
&lt;br /&gt;
Wenn alles stimmt sollten sich die folgenden Befehle ohne Fehler ausführen lassen und die Datenbanktabellen   sowie die statischen Dateien zum ausliefern  anlegen&lt;br /&gt;
  &lt;br /&gt;
   rake db:migrate&lt;br /&gt;
   rake assets:precompile&lt;br /&gt;
&lt;br /&gt;
=== Zammad ausliefern === &lt;br /&gt;
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:&lt;br /&gt;
* die .htaccess wie folgend gesetzt werden &lt;br /&gt;
* der zammad ordner nach app-ssl gelinkt werden&lt;br /&gt;
* und der statische content in htdocs-ssl&lt;br /&gt;
* Optional kann das Domain Template noch um die subdomains bereinigt werden (2. Befehl)&lt;br /&gt;
&lt;br /&gt;
  cd ~/doms/zammad.example.org/&lt;br /&gt;
  rm -r subs*&lt;br /&gt;
  rm -r htdocs-ssl&lt;br /&gt;
  rm -r app-ssl&lt;br /&gt;
  ln -s ~/zammad app-ssl&lt;br /&gt;
  ln -s ~/zammad/public htdocs-ssl&lt;br /&gt;
  nano .htaccess&lt;br /&gt;
&lt;br /&gt;
  # Inhalt .htaccess&lt;br /&gt;
  #PassengerFriendlyErrorPages on # falls nötig zum debuggen einkommentieren&lt;br /&gt;
  RackEnv production&lt;br /&gt;
  RailsEnv production&lt;br /&gt;
  PassengerRuby /home/pacs/xyz00/users/zammad/.rbenv/shims/ruby&lt;br /&gt;
  # local websocket ssl forwarding&lt;br /&gt;
  RewriteCond %{HTTP:Connection} Upgrade [NC]&lt;br /&gt;
  RewriteCond %{HTTP:Upgrade} websocket [NC]&lt;br /&gt;
  RewriteRule /(.*) ws://127.0.0.1:6042/$1  [P,L]&lt;br /&gt;
&lt;br /&gt;
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)&lt;br /&gt;
&lt;br /&gt;
=== Hintergrunddienste === &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
  cd zammad&lt;br /&gt;
  bundle exec script/background-worker.rb start&lt;br /&gt;
  bundle exec script/websocket-server.rb -b ${ZAMMAD_BIND_IP} -p ${ZAMMAD_WEBSOCKET_PORT} start&lt;br /&gt;
&lt;br /&gt;
== Empfohlen: Monit  ==&lt;br /&gt;
Ich habe alles monit spezifische in den ordner monit gepackt&lt;br /&gt;
  cd   &lt;br /&gt;
  mkdir monit&lt;br /&gt;
  cd monit&lt;br /&gt;
Zum starten habe ich ein kleines start und stop script (für monit) erstellt (lange zeile ggf. beachten)&lt;br /&gt;
&lt;br /&gt;
  nano start-worker.sh&lt;br /&gt;
&lt;br /&gt;
  #!/bin/bash&lt;br /&gt;
  . ~/.bash_profile&lt;br /&gt;
  cd ~/zammad&lt;br /&gt;
  exec  ${BUNDLE_BINARY} exec script/background-worker.rb start &amp;gt; ~/monit/worker.log 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
  echo $! &amp;gt; ~/monit/worker.pid&lt;br /&gt;
&lt;br /&gt;
  nano start-websocket.sh&lt;br /&gt;
&lt;br /&gt;
  #!/bin/bash&lt;br /&gt;
  . ~/.bash_profile&lt;br /&gt;
  cd ~/zammad&lt;br /&gt;
  # warnung, der  socket  produziert relativ viel log output im normalen Betrieb ggf. anpassen&lt;br /&gt;
  exec ${BUNDLE_BINARY} exec script/websocket-server.rb -b ${ZAMMAD_BIND_IP} -p ${ZAMMAD_WEBSOCKET_PORT}  start &amp;gt; ~/monit/socket.log 2&amp;gt;&amp;amp;1 &amp;amp; &lt;br /&gt;
  echo $! &amp;gt; ~/monit/socket.pid&lt;br /&gt;
&lt;br /&gt;
  nano stop-worker.sh&lt;br /&gt;
&lt;br /&gt;
  kill $( cat ~/monit/worker.pid )&lt;br /&gt;
&lt;br /&gt;
  nano stop-websocket.sh&lt;br /&gt;
&lt;br /&gt;
  kill $( cat ~/monit/socket.pid )&lt;br /&gt;
&lt;br /&gt;
Das dann alles noch in der `~/.monitrc` zusammenführen (achtung einige xyz00, zammad (user) und Mail Platzhalter):&lt;br /&gt;
&lt;br /&gt;
  nano ~/.monitrc&lt;br /&gt;
&lt;br /&gt;
  set daemon 60 with start delay 10&lt;br /&gt;
  set logfile /home/pacs/xyz00/users/zammad/monit/monit.log&lt;br /&gt;
  set idfile /home/pacs/xyz00/users/zammad/monit/monit.id&lt;br /&gt;
  set statefile /home/pacs/xyz00/users/zammad/monit/monit.state&lt;br /&gt;
  set mailserver localhost&lt;br /&gt;
  set mail-format { from: monit@your-domain.com }&lt;br /&gt;
  #set httpd port 39008 address localhost&lt;br /&gt;
  #    allow zammadadmin:ein-monit-passwort&lt;br /&gt;
  check process zammad_worker with pidfile /home/pacs/xyz00/users/zammad/monit/worker.pid&lt;br /&gt;
    start program &amp;quot;/home/pacs/xyz00/users/zammad/monit/start-worker.sh&amp;quot;&lt;br /&gt;
    stop program &amp;quot;/home/pacs/xyz00/users/zammad/monit/stop-worker.sh&amp;quot;&lt;br /&gt;
  check process zammad_socket with pidfile /home/pacs/opa00/users/zammad/monit/socket.pid&lt;br /&gt;
    start program &amp;quot;/home/pacs/xyz00/users/zammad/monit/start-websocket.sh&amp;quot;&lt;br /&gt;
    stop program &amp;quot;/home/pacs/xyz00/users/zammad/monit/stop-websocket.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Noch schnell die rechte der 4 scripts anpassen: &lt;br /&gt;
   chmod u+x ~/monit/*.sh&lt;br /&gt;
&lt;br /&gt;
Monit kann dann mit &lt;br /&gt;
   monit&lt;br /&gt;
gestartet werden.&lt;br /&gt;
&lt;br /&gt;
Sobald monit einmal erfolgreich anlief sollte der monit Ordner so aussehen:&lt;br /&gt;
  ls -lh&lt;br /&gt;
&lt;br /&gt;
  -rw-r--r-- 1 xyz00-zammad xyz00    32 Feb 23 11:59 monit.id&lt;br /&gt;
  -rw-r--r-- 1 xyz00-zammad xyz00  2867 Feb 24 23:46 monit.log&lt;br /&gt;
  -rw------- 1 xyz00-zammad xyz00   800 Feb 24 13:20 monit.state&lt;br /&gt;
  -rw-r--r-- 1 xyz00-zammad xyz00 41048 Feb 25 00:49 socket.log&lt;br /&gt;
  -rw-r--r-- 1 xyz00-zammad xyz00     5 Feb 24 23:45 socket.pid&lt;br /&gt;
  -rwxr--r-- 1 xyz00-zammad xyz00   209 Feb 24 23:45 start-websocket.sh&lt;br /&gt;
  -rwxr--r-- 1 xyz00-zammad xyz00   161 Feb 24 23:27 start-worker.sh&lt;br /&gt;
  -rwxr--r-- 1 xyz00-zammad xyz00    34 Feb 24 23:30 stop-websocket.sh&lt;br /&gt;
  -rwxr--r-- 1 xyz00-zammad xyz00    34 Feb 23 11:53 stop-worker.sh&lt;br /&gt;
  -rw-r--r-- 1 xyz00-zammad xyz00     0 Feb 24 23:38 worker.log&lt;br /&gt;
  -rw-r--r-- 1 xyz00-zammad xyz00     5 Feb 24 23:38 worker.pid&lt;br /&gt;
&lt;br /&gt;
== Optional: Elasticsearch anbindung ==&lt;br /&gt;
&lt;br /&gt;
Weiteren User nach [[Elasticsearch]] anlegen. Dieser muss dann mit zammad verknüpft werden. Hier wird der  Port 39200 angenommen. &lt;br /&gt;
&lt;br /&gt;
  cd ~/zammad&lt;br /&gt;
  rails r &amp;quot;Setting.set(&#039;es_url&#039;, &#039;http://localhost:39200&#039;)&amp;quot;&lt;br /&gt;
  rails r &amp;quot;Setting.set(&#039;es_user&#039;, &#039;elasticsearch&#039;)&amp;quot;&lt;br /&gt;
  rails r &amp;quot;Setting.set(&#039;es_password&#039;, &#039;changeme&#039;)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Um Elasticsearch wieder zu deaktivieren einfach die URL durch einen leeren string ersetzen. &lt;br /&gt;
&lt;br /&gt;
== Zammad Upgrade ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
killall -u $USER&lt;br /&gt;
killall -u $USER 9&lt;br /&gt;
&lt;br /&gt;
cp -a zammad zammad-old&lt;br /&gt;
cd zammad&lt;br /&gt;
wget -O - https://ftp.zammad.com/zammad-latest.tar.gz |tar -xvvz&lt;br /&gt;
bundle install --without test development mysql&lt;br /&gt;
&lt;br /&gt;
	Geht nicht, Ruby 2.2.5 fehlt!&lt;br /&gt;
&lt;br /&gt;
cd&lt;br /&gt;
rbenv install 2.5.5&lt;br /&gt;
&lt;br /&gt;
	Geht nicht, Rbenv ist zu alt!&lt;br /&gt;
&lt;br /&gt;
cd ~/.rbenv/plugins/ruby-build&lt;br /&gt;
git pull&lt;br /&gt;
cd&lt;br /&gt;
rbenv install 2.5.5&lt;br /&gt;
rbenv global 2.5.5&lt;br /&gt;
rbenv local 2.5.5&lt;br /&gt;
&lt;br /&gt;
cd zammad&lt;br /&gt;
gem install bundle&lt;br /&gt;
gem install bundler&lt;br /&gt;
bundle install --without test development mysql&lt;br /&gt;
&lt;br /&gt;
Geht nicht, Bundler 1.17.x wird gebraucht.&lt;br /&gt;
&lt;br /&gt;
gem install bundler==1.17.3&lt;br /&gt;
&lt;br /&gt;
	Geht auch nicht.&lt;br /&gt;
	Dann hacken wir das mal versuchsweise ins Lock.&lt;br /&gt;
&lt;br /&gt;
vim Gemfile.lock&lt;br /&gt;
&lt;br /&gt;
bundle install --without test development mysql&lt;br /&gt;
&lt;br /&gt;
	Es fehlen Libs.&lt;br /&gt;
	HS bitte installieren...&lt;br /&gt;
	[...]&lt;br /&gt;
	Danke!&lt;br /&gt;
&lt;br /&gt;
bundle install --without test development mysql&lt;br /&gt;
export RAILS_ENV=production&lt;br /&gt;
rake db:migrate&lt;br /&gt;
rake assets:precompile&lt;br /&gt;
&lt;br /&gt;
/usr/bin/supervisord -c $HOME/supervisor/etc/supervisord.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:RubyOnRails]]&lt;/div&gt;</summary>
		<author><name>Opa00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Zammad&amp;diff=6031</id>
		<title>Zammad</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Zammad&amp;diff=6031"/>
		<updated>2023-02-25T00:08:06Z</updated>

		<summary type="html">&lt;p&gt;Opa00: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Zammad ist ein relativ umfangreiches, mächtiges und modernes OSS Helpdesk Tool. Für die Instalation wird benötigt: &lt;br /&gt;
&lt;br /&gt;
* 2+ User im HS Admin (einer für den Webspace und mindestens einen für die eingehenden Ticketmails als Postfach)&lt;br /&gt;
* eine (Sub)Domain &lt;br /&gt;
* 2 bis 4 GB RAM (Schätzung, eure Erfahrung kann abweichen, je nach Nutzung)&lt;br /&gt;
* ruby&lt;br /&gt;
* nodejs&lt;br /&gt;
* Optional: monit (für die hintergrund Dienste)&lt;br /&gt;
* Optional: elasticsearch (für die Statistiken und eine bessere Suche)&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Die Installation orientiert sich an dieser Anleitung und wurde für zammad 5.3 verfasst. &lt;br /&gt;
Einige HS spezifische Abweichungen gibt es jedoch.&lt;br /&gt;
&lt;br /&gt;
* https://docs.zammad.org/en/latest/install/source.html &lt;br /&gt;
&lt;br /&gt;
=== User anlegen ===&lt;br /&gt;
Für diese Anleitung wird angenommen das der User unter dem zammad laufen soll xyz00-zammad im Packet xyz00 ist.&lt;br /&gt;
&lt;br /&gt;
=== Installation ruby / ruby env ===&lt;br /&gt;
Prüfe die Version von ruby die zammad benötigt [https://docs.zammad.org/en/latest/prerequisites/software.html#ruby-programming-language hier].&lt;br /&gt;
&lt;br /&gt;
Für diese Anleitung nehmen wir Version 3.0.5 an für zammad 5.2+.&lt;br /&gt;
&lt;br /&gt;
Die Installationsanleitung für rubyenv und ruby findet sich unter [[RubyRBEnv]].&lt;br /&gt;
&lt;br /&gt;
Verifiziere das die Installation geklappt hat mit&lt;br /&gt;
  ruby -v &lt;br /&gt;
dies sollte der herausgesuchten Versionsnummer entsprechen&lt;br /&gt;
&lt;br /&gt;
=== Installation nodejs ===&lt;br /&gt;
Prüfe die Version von nodejs die zammad benötigt [https://docs.zammad.org/en/latest/prerequisites/software.html#node-js  hier].&lt;br /&gt;
&lt;br /&gt;
Für diese Anleitung nehmen wir Version 16.0+ an für zammad 5.2+.&lt;br /&gt;
&lt;br /&gt;
Verifiziere das die Installation geklappt hat mit&lt;br /&gt;
  node -v &lt;br /&gt;
dies sollte der herausgesuchten Versionsnummer entsprechen&lt;br /&gt;
&lt;br /&gt;
=== Umgebungsvariablen === &lt;br /&gt;
&lt;br /&gt;
Meine `.profile`, `.bashrc`, `.bash_profile` sahen dann wie folgt aus (möglicherweise gibt es hier optimierungspotential)&lt;br /&gt;
&lt;br /&gt;
Die Datei `.bash_profile`:&lt;br /&gt;
  . ~/.profile&lt;br /&gt;
  . ~/.bashrc&lt;br /&gt;
Die Datei `.profile` (vgl instalation ruby und nodejs):&lt;br /&gt;
  #ruby&lt;br /&gt;
  export PATH=&amp;quot;$HOME/.rbenv/bin:$PATH&amp;quot;&lt;br /&gt;
  eval &amp;quot;$(rbenv init -)&amp;quot;&lt;br /&gt;
  #nodejs&lt;br /&gt;
  export NVM_DIR=&amp;quot;$HOME/.nvm&amp;quot;&lt;br /&gt;
  [ -s &amp;quot;$NVM_DIR/nvm.sh&amp;quot; ] &amp;amp;&amp;amp; \. &amp;quot;$NVM_DIR/nvm.sh&amp;quot;  # This loads nvm&lt;br /&gt;
  [ -s &amp;quot;$NVM_DIR/bash_completion&amp;quot; ] &amp;amp;&amp;amp; \. &amp;quot;$NVM_DIR/bash_completion&amp;quot;  # This loads nvm bash_completion&lt;br /&gt;
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]&lt;br /&gt;
  # zammad env config&lt;br /&gt;
  WEB_CONCURRENCY=4&lt;br /&gt;
  # service config&lt;br /&gt;
  BUNDLE_BINARY=bundle&lt;br /&gt;
  RAILS_ENV=production&lt;br /&gt;
  ZAMMAD_BIND_IP=127.0.0.1&lt;br /&gt;
  ZAMMAD_RAILS_PORT=3000&lt;br /&gt;
  ZAMMAD_WEBSOCKET_PORT=6042&lt;br /&gt;
&lt;br /&gt;
Dann entweder alles neu einlesen oder einmal aus und wieder  einloggen. Wenn alles geklappt hat, sollten die folgenden Befehle alle sinnvolle Ausgaben liefern&lt;br /&gt;
  echo $RAILS_ENV # Ausgabe: production&lt;br /&gt;
  ruby -v # Ausgabe vgl. oben&lt;br /&gt;
  nodejs -v #  Ausgabe vgl. oben&lt;br /&gt;
&lt;br /&gt;
=== Installation  von Zammad ===&lt;br /&gt;
Zuerst laden wir zammad herunter, entpacken es, und installieren die dependencies (nur production)&lt;br /&gt;
  &lt;br /&gt;
  wget -O - https://ftp.zammad.com/zammad-latest.tar.gz |tar -xvvz&lt;br /&gt;
  cd zammad&lt;br /&gt;
  bundle config set --local without &#039;test development mysql&#039;&lt;br /&gt;
  bundle install&lt;br /&gt;
  &lt;br /&gt;
Dann tragen wir die zugangsdaten der postgres Datenbank ein (auf HS Admin selbst erstellen) hier: beides `xyz00_zammad`&lt;br /&gt;
Mit folgendem Inhalt (Einrückung beachten!): &lt;br /&gt;
  nano config/database.yml&lt;br /&gt;
  &lt;br /&gt;
  # config/database.yml&lt;br /&gt;
  production:&lt;br /&gt;
    adapter: postgresql&lt;br /&gt;
    host: localhost&lt;br /&gt;
    database: xyz00_zammad&lt;br /&gt;
    pool: 50&lt;br /&gt;
    timeout: 5000&lt;br /&gt;
    encoding: utf8&lt;br /&gt;
    username: xyz00_zammad&lt;br /&gt;
    password: changeme&lt;br /&gt;
&lt;br /&gt;
Wenn alles stimmt sollten sich die folgenden Befehle ohne Fehler ausführen lassen und die Datenbanktabellen   sowie die statischen Dateien zum ausliefern  anlegen&lt;br /&gt;
  &lt;br /&gt;
   rake db:migrate&lt;br /&gt;
   rake assets:precompile&lt;br /&gt;
&lt;br /&gt;
=== Zammad ausliefern === &lt;br /&gt;
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:&lt;br /&gt;
* die .htaccess wie folgend gesetzt werden &lt;br /&gt;
* der zammad ordner nach app-ssl gelinkt werden&lt;br /&gt;
* und der statische content in htdocs-ssl&lt;br /&gt;
* Optional kann das Domain Template noch um die subdomains bereinigt werden (2. Befehl)&lt;br /&gt;
&lt;br /&gt;
  cd ~/doms/zammad.example.org/&lt;br /&gt;
  rm -r subs*&lt;br /&gt;
  rm -r htdocs-ssl&lt;br /&gt;
  rm -r app-ssl&lt;br /&gt;
  ln -s ~/zammad app-ssl&lt;br /&gt;
  ln -s ~/zammad/public htdocs-ssl&lt;br /&gt;
  nano .htaccess&lt;br /&gt;
&lt;br /&gt;
  # Inhalt .htaccess&lt;br /&gt;
  #PassengerFriendlyErrorPages on # falls nötig zum debuggen einkommentieren&lt;br /&gt;
  RackEnv production&lt;br /&gt;
  RailsEnv production&lt;br /&gt;
  PassengerRuby /home/pacs/xyz00/users/zammad/.rbenv/shims/ruby&lt;br /&gt;
  # local websocket ssl forwarding&lt;br /&gt;
  RewriteCond %{HTTP:Connection} Upgrade [NC]&lt;br /&gt;
  RewriteCond %{HTTP:Upgrade} websocket [NC]&lt;br /&gt;
  RewriteRule /(.*) ws://127.0.0.1:6042/$1  [P,L]&lt;br /&gt;
&lt;br /&gt;
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)&lt;br /&gt;
&lt;br /&gt;
=== Hintergrunddienste === &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
  cd zammad&lt;br /&gt;
  bundle exec script/background-worker.rb start&lt;br /&gt;
  bundle exec script/websocket-server.rb -b ${ZAMMAD_BIND_IP} -p ${ZAMMAD_WEBSOCKET_PORT} start&lt;br /&gt;
&lt;br /&gt;
=== Monit  ===&lt;br /&gt;
Ich habe alles monit spezifische in den ordner monit gepackt&lt;br /&gt;
  cd   &lt;br /&gt;
  mkdir monit&lt;br /&gt;
  cd monit&lt;br /&gt;
Zum starten habe ich ein kleines start und stop script (für monit) erstellt (lange zeile ggf. beachten)&lt;br /&gt;
&lt;br /&gt;
  nano start-worker.sh&lt;br /&gt;
&lt;br /&gt;
  #!/bin/bash&lt;br /&gt;
  . ~/.bash_profile&lt;br /&gt;
  cd ~/zammad&lt;br /&gt;
  exec  ${BUNDLE_BINARY} exec script/background-worker.rb start &amp;gt; ~/monit/worker.log 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
  echo $! &amp;gt; ~/monit/worker.pid&lt;br /&gt;
&lt;br /&gt;
  nano start-websocket.sh&lt;br /&gt;
&lt;br /&gt;
  #!/bin/bash&lt;br /&gt;
  . ~/.bash_profile&lt;br /&gt;
  cd ~/zammad&lt;br /&gt;
  # warnung, der  socket  produziert relativ viel log output im normalen Betrieb ggf. anpassen&lt;br /&gt;
  exec ${BUNDLE_BINARY} exec script/websocket-server.rb -b ${ZAMMAD_BIND_IP} -p ${ZAMMAD_WEBSOCKET_PORT}  start &amp;gt; ~/monit/socket.log 2&amp;gt;&amp;amp;1 &amp;amp; &lt;br /&gt;
  echo $! &amp;gt; ~/monit/socket.pid&lt;br /&gt;
&lt;br /&gt;
  nano stop-worker.sh&lt;br /&gt;
&lt;br /&gt;
  kill $( cat ~/monit/worker.pid )&lt;br /&gt;
&lt;br /&gt;
  nano stop-websocket.sh&lt;br /&gt;
&lt;br /&gt;
  kill $( cat ~/monit/socket.pid )&lt;br /&gt;
&lt;br /&gt;
Das dann alles noch in der `~/.monitrc` zusammenführen (achtung einige xyz00, zammad (user) und Mail Platzhalter):&lt;br /&gt;
&lt;br /&gt;
  nano ~/.monitrc&lt;br /&gt;
&lt;br /&gt;
  set daemon 60 with start delay 10&lt;br /&gt;
  set logfile /home/pacs/xyz00/users/zammad/monit/monit.log&lt;br /&gt;
  set idfile /home/pacs/xyz00/users/zammad/monit/monit.id&lt;br /&gt;
  set statefile /home/pacs/xyz00/users/zammad/monit/monit.state&lt;br /&gt;
  set mailserver localhost&lt;br /&gt;
  set mail-format { from: monit@your-domain.com }&lt;br /&gt;
  #set httpd port 39008 address localhost&lt;br /&gt;
  #    allow zammadadmin:ein-monit-passwort&lt;br /&gt;
  check process zammad_worker with pidfile /home/pacs/xyz00/users/zammad/monit/worker.pid&lt;br /&gt;
    start program &amp;quot;/home/pacs/xyz00/users/zammad/monit/start-worker.sh&amp;quot;&lt;br /&gt;
    stop program &amp;quot;/home/pacs/xyz00/users/zammad/monit/stop-worker.sh&amp;quot;&lt;br /&gt;
  check process zammad_socket with pidfile /home/pacs/opa00/users/zammad/monit/socket.pid&lt;br /&gt;
    start program &amp;quot;/home/pacs/xyz00/users/zammad/monit/start-websocket.sh&amp;quot;&lt;br /&gt;
    stop program &amp;quot;/home/pacs/xyz00/users/zammad/monit/stop-websocket.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Noch schnell die rechte der 4 scripts anpassen: &lt;br /&gt;
   chmod u+x ~/monit/*.sh&lt;br /&gt;
&lt;br /&gt;
Monit kann dann mit &lt;br /&gt;
   monit&lt;br /&gt;
gestartet werden.&lt;br /&gt;
&lt;br /&gt;
Sobald monit einmal erfolgreich anlief sollte der monit Ordner so aussehen:&lt;br /&gt;
  ls -lh&lt;br /&gt;
&lt;br /&gt;
  -rw-r--r-- 1 xyz00-zammad xyz00    32 Feb 23 11:59 monit.id&lt;br /&gt;
  -rw-r--r-- 1 xyz00-zammad xyz00  2867 Feb 24 23:46 monit.log&lt;br /&gt;
  -rw------- 1 xyz00-zammad xyz00   800 Feb 24 13:20 monit.state&lt;br /&gt;
  -rw-r--r-- 1 xyz00-zammad xyz00 41048 Feb 25 00:49 socket.log&lt;br /&gt;
  -rw-r--r-- 1 xyz00-zammad xyz00     5 Feb 24 23:45 socket.pid&lt;br /&gt;
  -rwxr--r-- 1 xyz00-zammad xyz00   209 Feb 24 23:45 start-websocket.sh&lt;br /&gt;
  -rwxr--r-- 1 xyz00-zammad xyz00   161 Feb 24 23:27 start-worker.sh&lt;br /&gt;
  -rwxr--r-- 1 xyz00-zammad xyz00    34 Feb 24 23:30 stop-websocket.sh&lt;br /&gt;
  -rwxr--r-- 1 xyz00-zammad xyz00    34 Feb 23 11:53 stop-worker.sh&lt;br /&gt;
  -rw-r--r-- 1 xyz00-zammad xyz00     0 Feb 24 23:38 worker.log&lt;br /&gt;
  -rw-r--r-- 1 xyz00-zammad xyz00     5 Feb 24 23:38 worker.pid&lt;br /&gt;
&lt;br /&gt;
=== Optinal: Elasticsearch anbindung === &lt;br /&gt;
&lt;br /&gt;
Weiteren User nach [[Elasticsearch]] anlegen. Dieser muss dann mit zammad verknüpft werden. Hier wird der  Port 39200 angenommen. &lt;br /&gt;
&lt;br /&gt;
  cd ~/zammad&lt;br /&gt;
  rails r &amp;quot;Setting.set(&#039;es_url&#039;, &#039;http://localhost:39200&#039;)&amp;quot;&lt;br /&gt;
  rails r &amp;quot;Setting.set(&#039;es_user&#039;, &#039;elasticsearch&#039;)&amp;quot;&lt;br /&gt;
  rails r &amp;quot;Setting.set(&#039;es_password&#039;, &#039;changeme&#039;)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Um Elasticsearch wieder zu deaktivieren einfach die URL durch einen leeren string ersetzen. &lt;br /&gt;
&lt;br /&gt;
== Zammad Upgrade ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
killall -u $USER&lt;br /&gt;
killall -u $USER 9&lt;br /&gt;
&lt;br /&gt;
cp -a zammad zammad-old&lt;br /&gt;
cd zammad&lt;br /&gt;
wget -O - https://ftp.zammad.com/zammad-latest.tar.gz |tar -xvvz&lt;br /&gt;
bundle install --without test development mysql&lt;br /&gt;
&lt;br /&gt;
	Geht nicht, Ruby 2.2.5 fehlt!&lt;br /&gt;
&lt;br /&gt;
cd&lt;br /&gt;
rbenv install 2.5.5&lt;br /&gt;
&lt;br /&gt;
	Geht nicht, Rbenv ist zu alt!&lt;br /&gt;
&lt;br /&gt;
cd ~/.rbenv/plugins/ruby-build&lt;br /&gt;
git pull&lt;br /&gt;
cd&lt;br /&gt;
rbenv install 2.5.5&lt;br /&gt;
rbenv global 2.5.5&lt;br /&gt;
rbenv local 2.5.5&lt;br /&gt;
&lt;br /&gt;
cd zammad&lt;br /&gt;
gem install bundle&lt;br /&gt;
gem install bundler&lt;br /&gt;
bundle install --without test development mysql&lt;br /&gt;
&lt;br /&gt;
Geht nicht, Bundler 1.17.x wird gebraucht.&lt;br /&gt;
&lt;br /&gt;
gem install bundler==1.17.3&lt;br /&gt;
&lt;br /&gt;
	Geht auch nicht.&lt;br /&gt;
	Dann hacken wir das mal versuchsweise ins Lock.&lt;br /&gt;
&lt;br /&gt;
vim Gemfile.lock&lt;br /&gt;
&lt;br /&gt;
bundle install --without test development mysql&lt;br /&gt;
&lt;br /&gt;
	Es fehlen Libs.&lt;br /&gt;
	HS bitte installieren...&lt;br /&gt;
	[...]&lt;br /&gt;
	Danke!&lt;br /&gt;
&lt;br /&gt;
bundle install --without test development mysql&lt;br /&gt;
export RAILS_ENV=production&lt;br /&gt;
rake db:migrate&lt;br /&gt;
rake assets:precompile&lt;br /&gt;
&lt;br /&gt;
/usr/bin/supervisord -c $HOME/supervisor/etc/supervisord.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:RubyOnRails]]&lt;/div&gt;</summary>
		<author><name>Opa00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Monit_installieren&amp;diff=6013</id>
		<title>Monit installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Monit_installieren&amp;diff=6013"/>
		<updated>2023-02-19T03:25:06Z</updated>

		<summary type="html">&lt;p&gt;Opa00: fixed path&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:eigene Daemons]]&lt;br /&gt;
[[Kategorie:Managed Server]]&lt;br /&gt;
&lt;br /&gt;
Monit ist ein ressourcensparendes Programm zur Überwachung eines Server oder von [[Daemon|Diensten (&amp;quot;Daemons&amp;quot;)]] auf einem Server. &lt;br /&gt;
&lt;br /&gt;
Es fragt regelmäßig den Zustand des zu überwachenden Prozesses ab und kann bei einem Absturz den Prozess selbstständig neu starten. Für Betriebssystem-Ressourcen, wie Festplatten-Kapazität oder CPU- und RAM-Auslastung, können Schwellwerte angegeben werden, bei deren Überschreitung Monit per E-Mail alarmiert und in eine Log-Datei protokolliert.&lt;br /&gt;
&lt;br /&gt;
In dieser Beschreibung wird der Start des Servers und von Monit durch den Paketadmin angenommen. Sollte ein davon verschiedener Domain-Admin der &amp;quot;Befehlshaber&amp;quot; sein, so müssen die Pfade entsprechend korrigiert werden. Von &amp;quot;/home/pacs/xyz00&amp;quot; zu &amp;quot;/home/pacs/xyz00/users/user&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
&lt;br /&gt;
Monit sucht seine Konfiguration beim Start zuerst in der Datei ~/.monitrc im Homeverzeichnis des Users, der monit startet.&lt;br /&gt;
&lt;br /&gt;
Wir erstellen also diese Datei im Hauptverzeichnis des Users und sorgen dafür, dass sie nur von diesem gelesen und beschrieben werden kann:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xyz00@hxx:~$ cd&lt;br /&gt;
xyz00@hxx:~$ touch .monitrc&lt;br /&gt;
xyz00@hxx:~$ chmod 0600 .monitrc&lt;br /&gt;
xyz00@hxx:~$ edit .monitrc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Und füllen sie mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set daemon 600&lt;br /&gt;
set logfile /home/pacs/xyz00/var/monit.log&lt;br /&gt;
set mailserver localhost&lt;br /&gt;
set alert admin@example.tld&lt;br /&gt;
&lt;br /&gt;
check process apache2 with pidfile /home/pacs/xyz00/etc/apache2/run/apache2.pid&lt;br /&gt;
    start program &amp;quot;/bin/bash -c &#039;/home/pacs/xyz00/etc/apache2/apache2_start&#039;&amp;quot;&lt;br /&gt;
    stop program &amp;quot;/bin/bash -c &#039;/home/pacs/xyz00/etc/apache2/apache2_stop&#039;&amp;quot;&lt;br /&gt;
    if failed host example.tld port 8080 with timeout 60 seconds then restart&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; Dieses Beispiel geht davon aus, dass die entsprechenden Start- und Stopskripte existieren und der Pfad zum pidfile des Apachen stimmt.&lt;br /&gt;
&lt;br /&gt;
== Monit Starten und Stoppen ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Start:&#039;&#039;&#039; monit&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Stop:&#039;&#039;&#039; monit quit&lt;br /&gt;
&lt;br /&gt;
=== Start eigener [[Daemon|Daemons]] beim Start des Servers ===&lt;br /&gt;
&lt;br /&gt;
In die eigene [[Cron#Crontab|crontab]] folgenden Eintrag:&lt;br /&gt;
&lt;br /&gt;
 @reboot rm -f $HOME/.monit.pid &amp;amp;&amp;amp; /usr/bin/monit -c &amp;quot;/home/pacs/xyz00/.monitrc&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Managed Server monitoren ==&lt;br /&gt;
&lt;br /&gt;
Bei der Nutzung eines Managed Server ist das Hostsharing-Mitglied selbst dafür verantwortlich, die Ressourcen des Servers&lt;br /&gt;
ausreichend zu dimensionieren. Monit kann helfen Engpässe zu entdecken.&lt;br /&gt;
&lt;br /&gt;
Mit den folgenden Zeilen in der .monitrc wird bei der Überschreitung von bestimmten Schwellwerten beim Load,&lt;br /&gt;
bei der RAM- und CPU-Auslastung und der Festplatten-Auslastung der E-Mail alarmiert und ins monit.log protokolliert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
check system h00.hostsharing.net&lt;br /&gt;
    if loadavg (1min) &amp;gt; 5 then alert&lt;br /&gt;
    if loadavg (5min) &amp;gt; 3 then alert&lt;br /&gt;
    if memory usage &amp;gt; 85% then alert&lt;br /&gt;
    if cpu usage (user) &amp;gt; 70% then alert&lt;br /&gt;
    if cpu usage (system) &amp;gt; 30% then alert&lt;br /&gt;
    if cpu usage (wait) &amp;gt; 20% then alert&lt;br /&gt;
&lt;br /&gt;
check device datafs with path /dev/vda2&lt;br /&gt;
    if failed permission 0660 then alert&lt;br /&gt;
    if failed uid root then alert&lt;br /&gt;
    if failed gid &amp;quot;disk&amp;quot; then alert&lt;br /&gt;
    if space usage &amp;gt; 85 % then alert&lt;br /&gt;
    if inode usage &amp;gt; 85 % then alert&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Logfiles kontrollieren ==&lt;br /&gt;
&lt;br /&gt;
Monit loggt entsprechend der Konfiguration seine &amp;quot;Taten&amp;quot; in ~/var/monit.log&lt;br /&gt;
&lt;br /&gt;
Damit das Logfile nicht zu groß wird, benutzen wir &#039;&#039;&#039;logrotate&#039;&#039;&#039;, das von [[cron]] aufgerufen wird, einmal pro Woche das Logfile komprimiert und zwei alte Versionen hält. Dazu erstellen wir die Konfigdatei .logrotate im Hauptverzeichnis des Users:&lt;br /&gt;
&lt;br /&gt;
 touch .logrotate&lt;br /&gt;
&lt;br /&gt;
Darin schreiben wir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
compress&lt;br /&gt;
&lt;br /&gt;
/home/pacs/xyz00/var/monit.log {&lt;br /&gt;
rotate 2&lt;br /&gt;
weekly&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun brauchen wir noch einen Aufruf von logrotate durch [[cron]]. Bitte beachten, logrotate merkt sich den letzten Zustand der Logdatei in einem Statusfile. Das muss in der [[Cron#Crontab|crontab]] mit angegeben werden. Wir editieren die crontab und schreiben:&lt;br /&gt;
&lt;br /&gt;
 27 7 * * 5	logrotate -s /home/pacs/xyz00/.logrotate_state /home/pacs/xyz00/.logrotate&lt;br /&gt;
&lt;br /&gt;
Damit wird jeden Freitag um 7:27 Uhr das monit.log &amp;quot;rotiert&amp;quot;. &#039;&#039;&#039;Achtung:&#039;&#039;&#039; bitte einen anderen Tag und eine andere Uhrzeit wählen, damit nicht alle logrotates zur gleichen Zeit starten.&lt;br /&gt;
&lt;br /&gt;
== externe Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.mmonit.com/monit/ Monit Homepage]&lt;br /&gt;
* [https://www.mmonit.com/monit/documentation/monit.html Monit Dokumentation]&lt;br /&gt;
* [https://www.mmonit.com/wiki/ Monit Wiki]&lt;/div&gt;</summary>
		<author><name>Opa00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Zammad&amp;diff=6012</id>
		<title>Zammad</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Zammad&amp;diff=6012"/>
		<updated>2023-02-18T03:47:32Z</updated>

		<summary type="html">&lt;p&gt;Opa00: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
sollte nach einer Hostsharing-Variante der folgenden Beschreibung funktionieren:&lt;br /&gt;
&lt;br /&gt;
* https://docs.zammad.org/en/latest/install/source.html &lt;br /&gt;
&lt;br /&gt;
=== Installation ruby / ruby env ===&lt;br /&gt;
Prüfe die Version von ruby die zammad benötigt [https://docs.zammad.org/en/latest/prerequisites/software.html#ruby-programming-language hier].&lt;br /&gt;
&lt;br /&gt;
Für diese Anleitung nehmen wir Version 3.0.5 an für zammad 5.2+.&lt;br /&gt;
&lt;br /&gt;
Die Installationsanleitung für rubyenv und ruby findet sich unter [[RubyRBEnv]].&lt;br /&gt;
&lt;br /&gt;
Verifiziere das die Installation geklappt hat mit&lt;br /&gt;
  ruby -v &lt;br /&gt;
dies sollte der herausgesuchten Versionsnummer entsprechen&lt;br /&gt;
&lt;br /&gt;
=== Installation nodejs ===&lt;br /&gt;
Prüfe die Version von nodejs die zammad benötigt [https://docs.zammad.org/en/latest/prerequisites/software.html#node-js  hier].&lt;br /&gt;
&lt;br /&gt;
Für diese Anleitung nehmen wir Version 16.0+ an für zammad 5.2+.&lt;br /&gt;
&lt;br /&gt;
Verifiziere das die Installation geklappt hat mit&lt;br /&gt;
  node -v &lt;br /&gt;
dies sollte der herausgesuchten Versionsnummer entsprechen&lt;br /&gt;
&lt;br /&gt;
=== Installation  von Zammad ===&lt;br /&gt;
  wget -O - https://ftp.zammad.com/zammad-latest.tar.gz |tar -xvvz&lt;br /&gt;
  cd zammad&lt;br /&gt;
  bundle config set --local without &#039;test development mysql&#039;&lt;br /&gt;
  bundle install&lt;br /&gt;
  nano config/database.yml&lt;br /&gt;
&lt;br /&gt;
Mit folgendem Inhalt: &lt;br /&gt;
&lt;br /&gt;
  production:&lt;br /&gt;
    adapter: postgresql&lt;br /&gt;
    database: xyz00_zammad&lt;br /&gt;
    pool: 50&lt;br /&gt;
    timeout: 5000&lt;br /&gt;
    encoding: utf8&lt;br /&gt;
    username: xyz00_zammad&lt;br /&gt;
    password: changeme&lt;br /&gt;
&lt;br /&gt;
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!&lt;br /&gt;
  &lt;br /&gt;
   export RAILS_ENV=production&lt;br /&gt;
   rake db:migrate&lt;br /&gt;
   rake assets:precompile&lt;br /&gt;
&lt;br /&gt;
=== Zammad ausliefern === &lt;br /&gt;
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)&lt;br /&gt;
&lt;br /&gt;
  cd ~/doms/zammad.example.org/&lt;br /&gt;
  rm -r subs*&lt;br /&gt;
  rm -r htdocs-ssl&lt;br /&gt;
  rm -r app-ssl&lt;br /&gt;
  ln -s ~/zammad app-ssl&lt;br /&gt;
  ln -s ~/zammad/public htdocs-ssl&lt;br /&gt;
&lt;br /&gt;
Durch aufrufen der Domain im Browser sollte das restliche Web-basierte Setup ablaufen. &lt;br /&gt;
&lt;br /&gt;
== Zammad Upgrade ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
killall -u $USER&lt;br /&gt;
killall -u $USER 9&lt;br /&gt;
&lt;br /&gt;
cp -a zammad zammad-old&lt;br /&gt;
cd zammad&lt;br /&gt;
wget -O - https://ftp.zammad.com/zammad-latest.tar.gz |tar -xvvz&lt;br /&gt;
bundle install --without test development mysql&lt;br /&gt;
&lt;br /&gt;
	Geht nicht, Ruby 2.2.5 fehlt!&lt;br /&gt;
&lt;br /&gt;
cd&lt;br /&gt;
rbenv install 2.5.5&lt;br /&gt;
&lt;br /&gt;
	Geht nicht, Rbenv ist zu alt!&lt;br /&gt;
&lt;br /&gt;
cd ~/.rbenv/plugins/ruby-build&lt;br /&gt;
git pull&lt;br /&gt;
cd&lt;br /&gt;
rbenv install 2.5.5&lt;br /&gt;
rbenv global 2.5.5&lt;br /&gt;
rbenv local 2.5.5&lt;br /&gt;
&lt;br /&gt;
cd zammad&lt;br /&gt;
gem install bundle&lt;br /&gt;
gem install bundler&lt;br /&gt;
bundle install --without test development mysql&lt;br /&gt;
&lt;br /&gt;
Geht nicht, Bundler 1.17.x wird gebraucht.&lt;br /&gt;
&lt;br /&gt;
gem install bundler==1.17.3&lt;br /&gt;
&lt;br /&gt;
	Geht auch nicht.&lt;br /&gt;
	Dann hacken wir das mal versuchsweise ins Lock.&lt;br /&gt;
&lt;br /&gt;
vim Gemfile.lock&lt;br /&gt;
&lt;br /&gt;
bundle install --without test development mysql&lt;br /&gt;
&lt;br /&gt;
	Es fehlen Libs.&lt;br /&gt;
	HS bitte installieren...&lt;br /&gt;
	[...]&lt;br /&gt;
	Danke!&lt;br /&gt;
&lt;br /&gt;
bundle install --without test development mysql&lt;br /&gt;
export RAILS_ENV=production&lt;br /&gt;
rake db:migrate&lt;br /&gt;
rake assets:precompile&lt;br /&gt;
&lt;br /&gt;
/usr/bin/supervisord -c $HOME/supervisor/etc/supervisord.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:RubyOnRails]]&lt;/div&gt;</summary>
		<author><name>Opa00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Zammad&amp;diff=6011</id>
		<title>Zammad</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Zammad&amp;diff=6011"/>
		<updated>2023-02-18T03:46:17Z</updated>

		<summary type="html">&lt;p&gt;Opa00: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
sollte nach einer Hostsharing-Variante der folgenden Beschreibung funktionieren:&lt;br /&gt;
&lt;br /&gt;
* https://docs.zammad.org/en/latest/install/source.html &lt;br /&gt;
&lt;br /&gt;
=== Installation ruby / ruby env ===&lt;br /&gt;
Prüfe die Version von ruby die zammad benötigt [https://docs.zammad.org/en/latest/prerequisites/software.html#ruby-programming-language hier].&lt;br /&gt;
&lt;br /&gt;
Für diese Anleitung nehmen wir Version 3.0.5 an für zammad 5.2+.&lt;br /&gt;
&lt;br /&gt;
Die Installationsanleitung für rubyenv und ruby findet sich unter [[RubyRBEnv]].&lt;br /&gt;
&lt;br /&gt;
Verifiziere das die Installation geklappt hat mit&lt;br /&gt;
  ruby -v &lt;br /&gt;
dies sollte der herausgesuchten Versionsnummer entsprechen&lt;br /&gt;
&lt;br /&gt;
=== Installation nodejs ===&lt;br /&gt;
Prüfe die Version von nodejs die zammad benötigt [https://docs.zammad.org/en/latest/prerequisites/software.html#node-js  hier].&lt;br /&gt;
&lt;br /&gt;
Für diese Anleitung nehmen wir Version 16.0+ an für zammad 5.2+.&lt;br /&gt;
&lt;br /&gt;
Verifiziere das die Installation geklappt hat mit&lt;br /&gt;
  node -v &lt;br /&gt;
dies sollte der herausgesuchten Versionsnummer entsprechen&lt;br /&gt;
&lt;br /&gt;
=== Installation  von Zammad ===&lt;br /&gt;
  wget -O - https://ftp.zammad.com/zammad-latest.tar.gz |tar -xvvz&lt;br /&gt;
  cd zammad&lt;br /&gt;
  bundle config set --local without &#039;test development mysql&#039;&lt;br /&gt;
  bundle install&lt;br /&gt;
  cp config/database/database.yml config/database.yml&lt;br /&gt;
  nano config/database.yml&lt;br /&gt;
&lt;br /&gt;
Inhalt des config files kann grob so bleiben wie es ist. Der Teil mit Production sollte ersetzt werden: &lt;br /&gt;
  production:&lt;br /&gt;
    adapter: postgresql&lt;br /&gt;
    database: xyz00_zammad&lt;br /&gt;
    pool: 50&lt;br /&gt;
    timeout: 5000&lt;br /&gt;
    encoding: utf8&lt;br /&gt;
    username: xyz00_zammad&lt;br /&gt;
    password: changeme&lt;br /&gt;
&lt;br /&gt;
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!&lt;br /&gt;
  &lt;br /&gt;
   export RAILS_ENV=production&lt;br /&gt;
   rake db:migrate&lt;br /&gt;
   rake assets:precompile&lt;br /&gt;
&lt;br /&gt;
=== Zammad ausliefern === &lt;br /&gt;
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)&lt;br /&gt;
&lt;br /&gt;
  cd ~/doms/zammad.example.org/&lt;br /&gt;
  rm -r subs*&lt;br /&gt;
  rm -r htdocs-ssl&lt;br /&gt;
  rm -r app-ssl&lt;br /&gt;
  ln -s ~/zammad app-ssl&lt;br /&gt;
  ln -s ~/zammad/public htdocs-ssl&lt;br /&gt;
&lt;br /&gt;
Durch aufrufen der Domain im Browser sollte das restliche Web-basierte Setup ablaufen. &lt;br /&gt;
&lt;br /&gt;
== Zammad Upgrade ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
killall -u $USER&lt;br /&gt;
killall -u $USER 9&lt;br /&gt;
&lt;br /&gt;
cp -a zammad zammad-old&lt;br /&gt;
cd zammad&lt;br /&gt;
wget -O - https://ftp.zammad.com/zammad-latest.tar.gz |tar -xvvz&lt;br /&gt;
bundle install --without test development mysql&lt;br /&gt;
&lt;br /&gt;
	Geht nicht, Ruby 2.2.5 fehlt!&lt;br /&gt;
&lt;br /&gt;
cd&lt;br /&gt;
rbenv install 2.5.5&lt;br /&gt;
&lt;br /&gt;
	Geht nicht, Rbenv ist zu alt!&lt;br /&gt;
&lt;br /&gt;
cd ~/.rbenv/plugins/ruby-build&lt;br /&gt;
git pull&lt;br /&gt;
cd&lt;br /&gt;
rbenv install 2.5.5&lt;br /&gt;
rbenv global 2.5.5&lt;br /&gt;
rbenv local 2.5.5&lt;br /&gt;
&lt;br /&gt;
cd zammad&lt;br /&gt;
gem install bundle&lt;br /&gt;
gem install bundler&lt;br /&gt;
bundle install --without test development mysql&lt;br /&gt;
&lt;br /&gt;
Geht nicht, Bundler 1.17.x wird gebraucht.&lt;br /&gt;
&lt;br /&gt;
gem install bundler==1.17.3&lt;br /&gt;
&lt;br /&gt;
	Geht auch nicht.&lt;br /&gt;
	Dann hacken wir das mal versuchsweise ins Lock.&lt;br /&gt;
&lt;br /&gt;
vim Gemfile.lock&lt;br /&gt;
&lt;br /&gt;
bundle install --without test development mysql&lt;br /&gt;
&lt;br /&gt;
	Es fehlen Libs.&lt;br /&gt;
	HS bitte installieren...&lt;br /&gt;
	[...]&lt;br /&gt;
	Danke!&lt;br /&gt;
&lt;br /&gt;
bundle install --without test development mysql&lt;br /&gt;
export RAILS_ENV=production&lt;br /&gt;
rake db:migrate&lt;br /&gt;
rake assets:precompile&lt;br /&gt;
&lt;br /&gt;
/usr/bin/supervisord -c $HOME/supervisor/etc/supervisord.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:RubyOnRails]]&lt;/div&gt;</summary>
		<author><name>Opa00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Zammad&amp;diff=6010</id>
		<title>Zammad</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Zammad&amp;diff=6010"/>
		<updated>2023-02-17T18:51:23Z</updated>

		<summary type="html">&lt;p&gt;Opa00: wip - webserver starten und per htaccess verfügbar machen fehlt noch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Baustelle}}&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
sollte nach einer Hostsharing-Variante der folgenden Beschreibung funktionieren:&lt;br /&gt;
&lt;br /&gt;
* https://docs.zammad.org/en/latest/install/source.html &lt;br /&gt;
&lt;br /&gt;
=== Installation ruby / ruby env ===&lt;br /&gt;
Prüfe die Version von ruby die zammad benötigt [https://docs.zammad.org/en/latest/prerequisites/software.html#ruby-programming-language hier].&lt;br /&gt;
&lt;br /&gt;
Für diese Anleitung nehmen wir Version 3.0.5 an für zammad 5.2+.&lt;br /&gt;
&lt;br /&gt;
Die Installationsanleitung für rubyenv und ruby findet sich unter [[RubyRBEnv]].&lt;br /&gt;
&lt;br /&gt;
Verifiziere das die Installation geklappt hat mit&lt;br /&gt;
  ruby -v &lt;br /&gt;
dies sollte der herausgesuchten Versionsnummer entsprechen&lt;br /&gt;
&lt;br /&gt;
=== Installation nodejs ===&lt;br /&gt;
Prüfe die Version von nodejs die zammad benötigt [https://docs.zammad.org/en/latest/prerequisites/software.html#node-js  hier].&lt;br /&gt;
&lt;br /&gt;
Für diese Anleitung nehmen wir Version 16.0+ an für zammad 5.2+.&lt;br /&gt;
&lt;br /&gt;
Verifiziere das die Installation geklappt hat mit&lt;br /&gt;
  node -v &lt;br /&gt;
dies sollte der herausgesuchten Versionsnummer entsprechen&lt;br /&gt;
&lt;br /&gt;
=== Installation  von Zammad ===&lt;br /&gt;
  wget -O - https://ftp.zammad.com/zammad-latest.tar.gz |tar -xvvz&lt;br /&gt;
  cd zammad&lt;br /&gt;
  bundle config set --local without &#039;test development mysql&#039;&lt;br /&gt;
  bundle install&lt;br /&gt;
  cp config/database/database.yml config/database.yml&lt;br /&gt;
  nano config/database.yml&lt;br /&gt;
&lt;br /&gt;
Inhalt des config files kann grob so bleiben wie es ist. Der Teil mit Production sollte ersetzt werden: &lt;br /&gt;
  production:&lt;br /&gt;
    adapter: postgresql&lt;br /&gt;
    database: xyz00_zammad&lt;br /&gt;
    pool: 50&lt;br /&gt;
    timeout: 5000&lt;br /&gt;
    encoding: utf8&lt;br /&gt;
    username: xyz00_zammad&lt;br /&gt;
    password: changeme&lt;br /&gt;
&lt;br /&gt;
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!&lt;br /&gt;
  &lt;br /&gt;
   export RAILS_ENV=production&lt;br /&gt;
   rake db:migrate&lt;br /&gt;
   rake assets:precompile&lt;br /&gt;
&lt;br /&gt;
== Zammad Upgrade ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
killall -u $USER&lt;br /&gt;
killall -u $USER 9&lt;br /&gt;
&lt;br /&gt;
cp -a zammad zammad-old&lt;br /&gt;
cd zammad&lt;br /&gt;
wget -O - https://ftp.zammad.com/zammad-latest.tar.gz |tar -xvvz&lt;br /&gt;
bundle install --without test development mysql&lt;br /&gt;
&lt;br /&gt;
	Geht nicht, Ruby 2.2.5 fehlt!&lt;br /&gt;
&lt;br /&gt;
cd&lt;br /&gt;
rbenv install 2.5.5&lt;br /&gt;
&lt;br /&gt;
	Geht nicht, Rbenv ist zu alt!&lt;br /&gt;
&lt;br /&gt;
cd ~/.rbenv/plugins/ruby-build&lt;br /&gt;
git pull&lt;br /&gt;
cd&lt;br /&gt;
rbenv install 2.5.5&lt;br /&gt;
rbenv global 2.5.5&lt;br /&gt;
rbenv local 2.5.5&lt;br /&gt;
&lt;br /&gt;
cd zammad&lt;br /&gt;
gem install bundle&lt;br /&gt;
gem install bundler&lt;br /&gt;
bundle install --without test development mysql&lt;br /&gt;
&lt;br /&gt;
Geht nicht, Bundler 1.17.x wird gebraucht.&lt;br /&gt;
&lt;br /&gt;
gem install bundler==1.17.3&lt;br /&gt;
&lt;br /&gt;
	Geht auch nicht.&lt;br /&gt;
	Dann hacken wir das mal versuchsweise ins Lock.&lt;br /&gt;
&lt;br /&gt;
vim Gemfile.lock&lt;br /&gt;
&lt;br /&gt;
bundle install --without test development mysql&lt;br /&gt;
&lt;br /&gt;
	Es fehlen Libs.&lt;br /&gt;
	HS bitte installieren...&lt;br /&gt;
	[...]&lt;br /&gt;
	Danke!&lt;br /&gt;
&lt;br /&gt;
bundle install --without test development mysql&lt;br /&gt;
export RAILS_ENV=production&lt;br /&gt;
rake db:migrate&lt;br /&gt;
rake assets:precompile&lt;br /&gt;
&lt;br /&gt;
/usr/bin/supervisord -c $HOME/supervisor/etc/supervisord.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:RubyOnRails]]&lt;/div&gt;</summary>
		<author><name>Opa00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Goaccess&amp;diff=6000</id>
		<title>Goaccess</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Goaccess&amp;diff=6000"/>
		<updated>2023-02-16T12:24:50Z</updated>

		<summary type="html">&lt;p&gt;Opa00: /* Aktuellere Geo Location */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Um den [[Traffic]] des Pakets beziehungweise die Einträge der [[Logging|Logdateien]] im grafischen Blick zu halten, falls das Vorgehen im gerade wenn unerwartet eine Mail mit erhöhtem Datenvolumen kommt (im terminal oder als webpage) bietet sich das tool goaccess an (https://goaccess.io/download). Es ist ein sehr schlankes tool was gerade mal 690kB im Download des tar.gz wiegt (Version 1.7)&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
Die Installation ist erst einmal sehr einfach, daher kann es fast so installiert werden wie auf goaccess.io/download beschrieben:&lt;br /&gt;
eingeloggt als Paketadmin z.B. per ssh xyz00&lt;br /&gt;
Da wir als Paketadmin keine Programme für alle installieren kann ein lokales Directory für die Installation des Programms (und ähnlicher angelegt werden:&lt;br /&gt;
z.B. /home/pacs/xyz00/usr &lt;br /&gt;
~$mkdir usr&lt;br /&gt;
um dann automatisch dorthin auch ein /bin Ordner anzulegen (wird durch configure danach gemacht)&lt;br /&gt;
und auch den PATH anpassen, damit Programme hier in bin direkt ausgeführt werden.&lt;br /&gt;
 ~$ echo &#039;export PATH=&amp;quot;$HOME/usr/bin:$PATH&amp;quot;&#039; &amp;gt;&amp;gt;.bashrc&lt;br /&gt;
leider wird .bashrc nicht immer gelesen wenn wir mit ssh einloggen, wir müssen es in .bash_profile festlegen:&lt;br /&gt;
 ~$ echo &#039;[[ -f ~/.bashrc ]] &amp;amp;&amp;amp; . ~/.bashrc&#039; &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
nun sind wir bereit für die Installation:&lt;br /&gt;
 ~$ wget https://tar.goaccess.io/goaccess-1.7.tar.gz&lt;br /&gt;
 ~$ tar -xzvf goaccess-1.7.tar.gz&lt;br /&gt;
 ~$ cd goaccess-1.7/&lt;br /&gt;
Eine Systemweite Installation wird mangels Berechtigung nicht funktionieren. Damit configure direkt unseren Pfad anlegt, befehlen wir das Installationsdirectory $HOME als prefix&lt;br /&gt;
 ~/goaccess-1.7$ ./configure --enable-utf8 --enable-geoip=legacy --prefix=$HOME/usr&lt;br /&gt;
 ~/goaccess-1.7$ make&lt;br /&gt;
 ~/goaccess-1.7# make install&lt;br /&gt;
Nun liegt $HOME//usr/bin/goaccess in unserem PATH an erster Stelle&lt;br /&gt;
ein Aufruf von&lt;br /&gt;
~$ goaccess --version&lt;br /&gt;
sollte das zeigen&lt;br /&gt;
 ~$ goaccess --v&lt;br /&gt;
 GoAccess - 1.7.&lt;br /&gt;
 For more details visit: https://goaccess.io/&lt;br /&gt;
 Copyright (C) 2009-2022 by Gerardo Orellana&lt;br /&gt;
 &lt;br /&gt;
 Build configure arguments:&lt;br /&gt;
  --enable-utf8&lt;br /&gt;
  --enable-geoip=legacy&lt;br /&gt;
&lt;br /&gt;
==Anwendung==&lt;br /&gt;
Dann, nach der Installation beginnt der hostsharingspezifische Teil, denn das file web.log, welches alle aktuellen logs der letzten zwei Tage beinhaltet beginnt nicht mit Datum und Uhrzeit, sondern mit den Domainnamen, was für goaccess zu Verwirrung führt.&lt;br /&gt;
=== Pipe mit zcat ===&lt;br /&gt;
Am leichtesten ist die Nutzung einer Pipe für die Prozessierung der gzip2 gezippten logfiles die alle nach dem Schema:&lt;br /&gt;
web-subdomain.example.com-YYYYMMDD-hhmm.log.gz im Ordner $HOME/var liegen.&lt;br /&gt;
Eine Auswertung des Weblogs von example.com z.B. vom 14.02.2023 liegt unter /home/pacs/xyz00/var/web-example.com-20230215-0139.log.gz vor&lt;br /&gt;
Die Auswertung muss also entzippt werden, das geht on-the-fly mit zcat&lt;br /&gt;
 ~$ zcat /home/pacs/xyz00/var/web-example.com-20230215-0139.log.gz &lt;br /&gt;
=== Wildcards ===&lt;br /&gt;
zcat kann sehr gut mit Wildcards umgehen, der Aufruf &lt;br /&gt;
 ~$ &#039;&#039;&#039;zcat ~/var/web*.log.gz&#039;&#039;&#039;  | goaccess -o webstat.html --log-format=COMBINED -&lt;br /&gt;
zum Beispiel fasst alle logfiles aller Domains und aller Tage  zusammen.&lt;br /&gt;
Es geht auch nur eine Domain: &#039;&#039;&#039;&#039;&#039;&amp;quot;var/web-example.com*.log.gz&amp;quot;&#039;&#039;&#039;&#039;&#039; oder nur den Januar 2023: &#039;&#039;&#039;&#039;&#039;&amp;quot;var/web*202301*log.gz&amp;quot;&#039;&#039;&#039;&#039;&#039; (es sollte beachtet werden, dass natürlich immer die Datei, die dann am Tag früh morgens (bei mir ist das zwischen 01:38h und 01:40h) erstellt wird natürlich für den vorherigen Tag ist. Das heißt in der 20230101 ist vor allem der 31.12. geloggt&lt;br /&gt;
&lt;br /&gt;
=== Auswertung mit goaccess ===&lt;br /&gt;
  ~$ zcat ... | goaccess -o webstat.html --log-format=COMBINED -&lt;br /&gt;
legt eine Datei webstat.html im aktuellen Ordner ab, diese kann dann zum Beispiel heruntergeladen werden, oder in einer Domain erreichbar gemacht werden. &#039;&#039;&#039;Empfehlung:&#039;&#039;&#039; Datei per scp heruntergeladen, auf dem eigenen, geschützten Rechner angeschaut, und schnell vernichtet.&lt;br /&gt;
== Finetuning ==&lt;br /&gt;
=== Anonymisierte IPs ===&lt;br /&gt;
Um nur anonymisierte IPs anzeigen zu lassen kann das zusätzliche Flag --anonymize-ip verwendet werden&lt;br /&gt;
&lt;br /&gt;
  ~$ zcat ... | goaccess ... --anonymize-ip  -&lt;br /&gt;
&lt;br /&gt;
In der Doku ist beschrieben wie die IP Adresse noch gröber anonymisiert werden kann. &lt;br /&gt;
=== Aktuellere Geo Location ===&lt;br /&gt;
Um die aktuellere Version der Geolocations zu verwenden muss bei &lt;br /&gt;
&lt;br /&gt;
 ./configure ... --enable-geoip=mmdb ...&lt;br /&gt;
&lt;br /&gt;
statt legacy verwendet werden. Dafür gibt es eine kostenlose Länder[https://db-ip.com/db/download/ip-to-country-lite] oder Städte[https://db-ip.com/db/download/ip-to-city-lite] lite-Version unter CC BY 4.0. Falls diese nicht genau genug sind, gibt es auch kommerzielle Alternativen vom selben Anbieter. &lt;br /&gt;
&lt;br /&gt;
Die Datenbank sollte im mmdb format heruntergeladen werden. Der direkte Downloadlink kann von oben direkt kopiert werden. Der Download Befehl auf der Konsole könnte bspw so aussehen (Datum und Version beachten! ggf. Link selbst einfügen). Zum heutigen Stand hatte die lite-cities Datenbank eine Größe von rund 100 MB.&lt;br /&gt;
&lt;br /&gt;
 wget https://download.db-ip.com/free/dbip-city-lite-2023-02.mmdb.gz&lt;br /&gt;
 gzip -d dbip-city-lite-2023-02.mmdb.gz&lt;br /&gt;
&lt;br /&gt;
Beim ausführen von goaccess muss dann auch immer angegeben werden welche IP Datenbank verwendet werden soll. Dies geht mit folgendem zusätzlichen Flag (ggf. Pfad der db anpassen)  &lt;br /&gt;
  ~$ zcat ... | goaccess ... --geoip-database=dbip-city-lite-2023-02.mmdb -&lt;br /&gt;
&lt;br /&gt;
=== Automatisierung pro Domain des Paketes ===&lt;br /&gt;
&lt;br /&gt;
Mit dem  folgenden kleinen shell script kann in einer logs.example.com (muss ersetzt werden!) Domain die statischen html files zum ansehen hinterlegt werden. Diese sollten dort nicht ohne Login ausgeliefert werden und nicht ohne https.  Grundsätzlich könnte goaccess die logs auch live aufbereiten, die Komprimierung  könnte  dort jedoch ggf in der neusten Version ein Hindernis darstellen.&lt;br /&gt;
&lt;br /&gt;
  #inhalt generate-logs.sh&lt;br /&gt;
  logdom=logs.example.com&lt;br /&gt;
  for dom in $(find /home/doms -type l -lname &amp;quot;$HOME/users/*&amp;quot;)     # list domain names&lt;br /&gt;
  do&lt;br /&gt;
     dom=${dom##*/}&lt;br /&gt;
     echo ${dom}&lt;br /&gt;
     zcat $HOME/var/web-$dom-*.log.gz | goaccess -o $HOME/doms/$logdom/htdocs-ssl/$dom.html --log-format=COMBINED --anonymize-ip --geoip-database=dbip-city-lite-2023-02.mmdb --ignore-crawler --unknowns-as-crawlers -&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
Erklärung des scripts: Zuerst wird die logdomain auf der die Dateien abgelegt werden sollen festgelegt. Dann wird via find im Ordner /home/doms nach Dateien vom Typ Link gesucht, dessen Linkziel genauso beginnt wie das home des aktuellen users (der Paketuser). Es listet also alle domains, welche im aktuellen Paket Verwendung finden und iteriert über diese indem es die  aktuelle  Iteration in der Variablen dom speichert. Die nächste Zeile entfernt den Pfad vor dem Domainnamen, sodass die Variable nur noch den reinen Domainnamen beinhaltet. Der echo Befehl ist nur zur Übersicht beim manuellen ausführen und kann nach Wunsch mit # auskommentiert werden. Anschließend wird wie gewohnt (für jede Domain nacheinander) goaccess aufgerufen und für jede Domain eine eigene html Datei erzeugt. Eventuell muss der goaccess Befehl noch an die eigenen Wünsche angepasst werden. &lt;br /&gt;
&lt;br /&gt;
Mit einem [[cron]] Eintrag könnte dieses Script regelmäßig aufgerufen werden. z.B.:&lt;br /&gt;
&lt;br /&gt;
   10 02 * * * sh ~/generate-logs.sh &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
== Warnung: Datenschutz ==&lt;br /&gt;
Man beachte, dass die Auswertungen Datenschutzrelevante Inhalte wie die IP Adresse und die aufgerufenen Pfade enthalten daher kann es nicht ausreichen nur die IPs zu anonymisieren. Bei einer Nextcloud Instanz beinhalten die Pfade z.B. häufig auch den Username und somit ggf. den Klarnamen. Entsprechend sollte diese Auswertung nicht öffentlich (ohne Passwortschutz) zugänglich gemacht werden. Siehe dazu [[.htaccess#Passwortschutz_f.C3.BCr_Dateien|Passwortschutz mit htaccess]].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Traffic]]&lt;/div&gt;</summary>
		<author><name>Opa00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Goaccess&amp;diff=5999</id>
		<title>Goaccess</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Goaccess&amp;diff=5999"/>
		<updated>2023-02-16T03:56:16Z</updated>

		<summary type="html">&lt;p&gt;Opa00: /* Automatisierung pro Domain des Paketes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Um den [[Traffic]] des Pakets beziehungweise die Einträge der [[Logging|Logdateien]] im grafischen Blick zu halten, falls das Vorgehen im gerade wenn unerwartet eine Mail mit erhöhtem Datenvolumen kommt (im terminal oder als webpage) bietet sich das tool goaccess an (https://goaccess.io/download). Es ist ein sehr schlankes tool was gerade mal 690kB im Download des tar.gz wiegt (Version 1.7)&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
Die Installation ist erst einmal sehr einfach, daher kann es fast so installiert werden wie auf goaccess.io/download beschrieben:&lt;br /&gt;
eingeloggt als Paketadmin z.B. per ssh xyz00&lt;br /&gt;
Da wir als Paketadmin keine Programme für alle installieren kann ein lokales Directory für die Installation des Programms (und ähnlicher angelegt werden:&lt;br /&gt;
z.B. /home/pacs/xyz00/usr &lt;br /&gt;
~$mkdir usr&lt;br /&gt;
um dann automatisch dorthin auch ein /bin Ordner anzulegen (wird durch configure danach gemacht)&lt;br /&gt;
und auch den PATH anpassen, damit Programme hier in bin direkt ausgeführt werden.&lt;br /&gt;
 ~$ echo &#039;export PATH=&amp;quot;$HOME/usr/bin:$PATH&amp;quot;&#039; &amp;gt;&amp;gt;.bashrc&lt;br /&gt;
leider wird .bashrc nicht immer gelesen wenn wir mit ssh einloggen, wir müssen es in .bash_profile festlegen:&lt;br /&gt;
 ~$ echo &#039;[[ -f ~/.bashrc ]] &amp;amp;&amp;amp; . ~/.bashrc&#039; &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
nun sind wir bereit für die Installation:&lt;br /&gt;
 ~$ wget https://tar.goaccess.io/goaccess-1.7.tar.gz&lt;br /&gt;
 ~$ tar -xzvf goaccess-1.7.tar.gz&lt;br /&gt;
 ~$ cd goaccess-1.7/&lt;br /&gt;
Eine Systemweite Installation wird mangels Berechtigung nicht funktionieren. Damit configure direkt unseren Pfad anlegt, befehlen wir das Installationsdirectory $HOME als prefix&lt;br /&gt;
 ~/goaccess-1.7$ ./configure --enable-utf8 --enable-geoip=legacy --prefix=$HOME/usr&lt;br /&gt;
 ~/goaccess-1.7$ make&lt;br /&gt;
 ~/goaccess-1.7# make install&lt;br /&gt;
Nun liegt $HOME//usr/bin/goaccess in unserem PATH an erster Stelle&lt;br /&gt;
ein Aufruf von&lt;br /&gt;
~$ goaccess --version&lt;br /&gt;
sollte das zeigen&lt;br /&gt;
 ~$ goaccess --v&lt;br /&gt;
 GoAccess - 1.7.&lt;br /&gt;
 For more details visit: https://goaccess.io/&lt;br /&gt;
 Copyright (C) 2009-2022 by Gerardo Orellana&lt;br /&gt;
 &lt;br /&gt;
 Build configure arguments:&lt;br /&gt;
  --enable-utf8&lt;br /&gt;
  --enable-geoip=legacy&lt;br /&gt;
&lt;br /&gt;
==Anwendung==&lt;br /&gt;
Dann, nach der Installation beginnt der hostsharingspezifische Teil, denn das file web.log, welches alle aktuellen logs der letzten zwei Tage beinhaltet beginnt nicht mit Datum und Uhrzeit, sondern mit den Domainnamen, was für goaccess zu Verwirrung führt.&lt;br /&gt;
=== Pipe mit zcat ===&lt;br /&gt;
Am leichtesten ist die Nutzung einer Pipe für die Prozessierung der gzip2 gezippten logfiles die alle nach dem Schema:&lt;br /&gt;
web-subdomain.example.com-YYYYMMDD-hhmm.log.gz im Ordner $HOME/var liegen.&lt;br /&gt;
Eine Auswertung des Weblogs von example.com z.B. vom 14.02.2023 liegt unter /home/pacs/xyz00/var/web-example.com-20230215-0139.log.gz vor&lt;br /&gt;
Die Auswertung muss also entzippt werden, das geht on-the-fly mit zcat&lt;br /&gt;
 ~$ zcat /home/pacs/xyz00/var/web-example.com-20230215-0139.log.gz &lt;br /&gt;
=== Wildcards ===&lt;br /&gt;
zcat kann sehr gut mit Wildcards umgehen, der Aufruf &lt;br /&gt;
 ~$ &#039;&#039;&#039;zcat ~/var/web*.log.gz&#039;&#039;&#039;  | goaccess -o webstat.html --log-format=COMBINED -&lt;br /&gt;
zum Beispiel fasst alle logfiles aller Domains und aller Tage  zusammen.&lt;br /&gt;
Es geht auch nur eine Domain: &#039;&#039;&#039;&#039;&#039;&amp;quot;var/web-example.com*.log.gz&amp;quot;&#039;&#039;&#039;&#039;&#039; oder nur den Januar 2023: &#039;&#039;&#039;&#039;&#039;&amp;quot;var/web*202301*log.gz&amp;quot;&#039;&#039;&#039;&#039;&#039; (es sollte beachtet werden, dass natürlich immer die Datei, die dann am Tag früh morgens (bei mir ist das zwischen 01:38h und 01:40h) erstellt wird natürlich für den vorherigen Tag ist. Das heißt in der 20230101 ist vor allem der 31.12. geloggt&lt;br /&gt;
&lt;br /&gt;
=== Auswertung mit goaccess ===&lt;br /&gt;
  ~$ zcat ... | goaccess -o webstat.html --log-format=COMBINED -&lt;br /&gt;
legt eine Datei webstat.html im aktuellen Ordner ab, diese kann dann zum Beispiel heruntergeladen werden, oder in einer Domain erreichbar gemacht werden. &#039;&#039;&#039;Empfehlung:&#039;&#039;&#039; Datei per scp heruntergeladen, auf dem eigenen, geschützten Rechner angeschaut, und schnell vernichtet.&lt;br /&gt;
== Finetuning ==&lt;br /&gt;
=== Anonymisierte IPs ===&lt;br /&gt;
Um nur anonymisierte IPs anzeigen zu lassen kann das zusätzliche Flag --anonymize-ip verwendet werden&lt;br /&gt;
&lt;br /&gt;
  ~$ zcat ... | goaccess ... --anonymize-ip  -&lt;br /&gt;
&lt;br /&gt;
In der Doku ist beschrieben wie die IP Adresse noch gröber anonymisiert werden kann. &lt;br /&gt;
=== Aktuellere Geo Location ===&lt;br /&gt;
Um die aktuellere Version der Geolocations zu verwenden muss bei &lt;br /&gt;
&lt;br /&gt;
 ./configure ... --enable-geoip=mmdb ...&lt;br /&gt;
&lt;br /&gt;
statt legacy verwendet werden. Dafür gibt es eine kostenlose [https://db-ip.com/db/download/ip-to-country-lite|Länder] oder [https://db-ip.com/db/download/ip-to-city-lite|Städte] lite-Version unter CC BY 4.0. Falls diese nicht genau genug sind, gibt es auch kommerzielle Alternativen vom selben Anbieter. &lt;br /&gt;
&lt;br /&gt;
Die Datenbank sollte im mmdb format heruntergeladen werden. Der direkte Downloadlink kann von oben direkt kopiert werden. Der Download Befehl auf der Konsole könnte bspw so aussehen (Datum und Version beachten! ggf. Link selbst einfügen). Zum heutigen Stand hatte die lite-cities Datenbank eine Größe von rund 100 MB.&lt;br /&gt;
&lt;br /&gt;
 wget https://download.db-ip.com/free/dbip-city-lite-2023-02.mmdb.gz&lt;br /&gt;
 gzip -d dbip-city-lite-2023-02.mmdb.gz&lt;br /&gt;
&lt;br /&gt;
Beim ausführen von goaccess muss dann auch immer angegeben werden welche IP Datenbank verwendet werden soll. Dies geht mit folgendem zusätzlichen Flag (ggf. Pfad der db anpassen)  &lt;br /&gt;
  ~$ zcat ... | goaccess ... --geoip-database=dbip-city-lite-2023-02.mmdb -&lt;br /&gt;
&lt;br /&gt;
=== Automatisierung pro Domain des Paketes ===&lt;br /&gt;
&lt;br /&gt;
Mit dem  folgenden kleinen shell script kann in einer logs.example.com (muss ersetzt werden!) Domain die statischen html files zum ansehen hinterlegt werden. Diese sollten dort nicht ohne Login ausgeliefert werden und nicht ohne https.  Grundsätzlich könnte goaccess die logs auch live aufbereiten, die Komprimierung  könnte  dort jedoch ggf in der neusten Version ein Hindernis darstellen.&lt;br /&gt;
&lt;br /&gt;
  #inhalt generate-logs.sh&lt;br /&gt;
  logdom=logs.example.com&lt;br /&gt;
  for dom in $(find /home/doms -type l -lname &amp;quot;$HOME/users/*&amp;quot;)     # list domain names&lt;br /&gt;
  do&lt;br /&gt;
     dom=${dom##*/}&lt;br /&gt;
     echo ${dom}&lt;br /&gt;
     zcat $HOME/var/web-$dom-*.log.gz | goaccess -o $HOME/doms/$logdom/htdocs-ssl/$dom.html --log-format=COMBINED --anonymize-ip --geoip-database=dbip-city-lite-2023-02.mmdb --ignore-crawler --unknowns-as-crawlers -&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
Erklärung des scripts: Zuerst wird die logdomain auf der die Dateien abgelegt werden sollen festgelegt. Dann wird via find im Ordner /home/doms nach Dateien vom Typ Link gesucht, dessen Linkziel genauso beginnt wie das home des aktuellen users (der Paketuser). Es listet also alle domains, welche im aktuellen Paket Verwendung finden und iteriert über diese indem es die  aktuelle  Iteration in der Variablen dom speichert. Die nächste Zeile entfernt den Pfad vor dem Domainnamen, sodass die Variable nur noch den reinen Domainnamen beinhaltet. Der echo Befehl ist nur zur Übersicht beim manuellen ausführen und kann nach Wunsch mit # auskommentiert werden. Anschließend wird wie gewohnt (für jede Domain nacheinander) goaccess aufgerufen und für jede Domain eine eigene html Datei erzeugt. Eventuell muss der goaccess Befehl noch an die eigenen Wünsche angepasst werden. &lt;br /&gt;
&lt;br /&gt;
Mit einem [[cron]] Eintrag könnte dieses Script regelmäßig aufgerufen werden. z.B.:&lt;br /&gt;
&lt;br /&gt;
   10 02 * * * sh ~/generate-logs.sh &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
== Warnung: Datenschutz ==&lt;br /&gt;
Man beachte, dass die Auswertungen Datenschutzrelevante Inhalte wie die IP Adresse und die aufgerufenen Pfade enthalten daher kann es nicht ausreichen nur die IPs zu anonymisieren. Bei einer Nextcloud Instanz beinhalten die Pfade z.B. häufig auch den Username und somit ggf. den Klarnamen. Entsprechend sollte diese Auswertung nicht öffentlich (ohne Passwortschutz) zugänglich gemacht werden. Siehe dazu [[.htaccess#Passwortschutz_f.C3.BCr_Dateien|Passwortschutz mit htaccess]].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Traffic]]&lt;/div&gt;</summary>
		<author><name>Opa00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Goaccess&amp;diff=5998</id>
		<title>Goaccess</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Goaccess&amp;diff=5998"/>
		<updated>2023-02-16T03:55:44Z</updated>

		<summary type="html">&lt;p&gt;Opa00: /* Automatisierung pro Domain des Paketes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Um den [[Traffic]] des Pakets beziehungweise die Einträge der [[Logging|Logdateien]] im grafischen Blick zu halten, falls das Vorgehen im gerade wenn unerwartet eine Mail mit erhöhtem Datenvolumen kommt (im terminal oder als webpage) bietet sich das tool goaccess an (https://goaccess.io/download). Es ist ein sehr schlankes tool was gerade mal 690kB im Download des tar.gz wiegt (Version 1.7)&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
Die Installation ist erst einmal sehr einfach, daher kann es fast so installiert werden wie auf goaccess.io/download beschrieben:&lt;br /&gt;
eingeloggt als Paketadmin z.B. per ssh xyz00&lt;br /&gt;
Da wir als Paketadmin keine Programme für alle installieren kann ein lokales Directory für die Installation des Programms (und ähnlicher angelegt werden:&lt;br /&gt;
z.B. /home/pacs/xyz00/usr &lt;br /&gt;
~$mkdir usr&lt;br /&gt;
um dann automatisch dorthin auch ein /bin Ordner anzulegen (wird durch configure danach gemacht)&lt;br /&gt;
und auch den PATH anpassen, damit Programme hier in bin direkt ausgeführt werden.&lt;br /&gt;
 ~$ echo &#039;export PATH=&amp;quot;$HOME/usr/bin:$PATH&amp;quot;&#039; &amp;gt;&amp;gt;.bashrc&lt;br /&gt;
leider wird .bashrc nicht immer gelesen wenn wir mit ssh einloggen, wir müssen es in .bash_profile festlegen:&lt;br /&gt;
 ~$ echo &#039;[[ -f ~/.bashrc ]] &amp;amp;&amp;amp; . ~/.bashrc&#039; &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
nun sind wir bereit für die Installation:&lt;br /&gt;
 ~$ wget https://tar.goaccess.io/goaccess-1.7.tar.gz&lt;br /&gt;
 ~$ tar -xzvf goaccess-1.7.tar.gz&lt;br /&gt;
 ~$ cd goaccess-1.7/&lt;br /&gt;
Eine Systemweite Installation wird mangels Berechtigung nicht funktionieren. Damit configure direkt unseren Pfad anlegt, befehlen wir das Installationsdirectory $HOME als prefix&lt;br /&gt;
 ~/goaccess-1.7$ ./configure --enable-utf8 --enable-geoip=legacy --prefix=$HOME/usr&lt;br /&gt;
 ~/goaccess-1.7$ make&lt;br /&gt;
 ~/goaccess-1.7# make install&lt;br /&gt;
Nun liegt $HOME//usr/bin/goaccess in unserem PATH an erster Stelle&lt;br /&gt;
ein Aufruf von&lt;br /&gt;
~$ goaccess --version&lt;br /&gt;
sollte das zeigen&lt;br /&gt;
 ~$ goaccess --v&lt;br /&gt;
 GoAccess - 1.7.&lt;br /&gt;
 For more details visit: https://goaccess.io/&lt;br /&gt;
 Copyright (C) 2009-2022 by Gerardo Orellana&lt;br /&gt;
 &lt;br /&gt;
 Build configure arguments:&lt;br /&gt;
  --enable-utf8&lt;br /&gt;
  --enable-geoip=legacy&lt;br /&gt;
&lt;br /&gt;
==Anwendung==&lt;br /&gt;
Dann, nach der Installation beginnt der hostsharingspezifische Teil, denn das file web.log, welches alle aktuellen logs der letzten zwei Tage beinhaltet beginnt nicht mit Datum und Uhrzeit, sondern mit den Domainnamen, was für goaccess zu Verwirrung führt.&lt;br /&gt;
=== Pipe mit zcat ===&lt;br /&gt;
Am leichtesten ist die Nutzung einer Pipe für die Prozessierung der gzip2 gezippten logfiles die alle nach dem Schema:&lt;br /&gt;
web-subdomain.example.com-YYYYMMDD-hhmm.log.gz im Ordner $HOME/var liegen.&lt;br /&gt;
Eine Auswertung des Weblogs von example.com z.B. vom 14.02.2023 liegt unter /home/pacs/xyz00/var/web-example.com-20230215-0139.log.gz vor&lt;br /&gt;
Die Auswertung muss also entzippt werden, das geht on-the-fly mit zcat&lt;br /&gt;
 ~$ zcat /home/pacs/xyz00/var/web-example.com-20230215-0139.log.gz &lt;br /&gt;
=== Wildcards ===&lt;br /&gt;
zcat kann sehr gut mit Wildcards umgehen, der Aufruf &lt;br /&gt;
 ~$ &#039;&#039;&#039;zcat ~/var/web*.log.gz&#039;&#039;&#039;  | goaccess -o webstat.html --log-format=COMBINED -&lt;br /&gt;
zum Beispiel fasst alle logfiles aller Domains und aller Tage  zusammen.&lt;br /&gt;
Es geht auch nur eine Domain: &#039;&#039;&#039;&#039;&#039;&amp;quot;var/web-example.com*.log.gz&amp;quot;&#039;&#039;&#039;&#039;&#039; oder nur den Januar 2023: &#039;&#039;&#039;&#039;&#039;&amp;quot;var/web*202301*log.gz&amp;quot;&#039;&#039;&#039;&#039;&#039; (es sollte beachtet werden, dass natürlich immer die Datei, die dann am Tag früh morgens (bei mir ist das zwischen 01:38h und 01:40h) erstellt wird natürlich für den vorherigen Tag ist. Das heißt in der 20230101 ist vor allem der 31.12. geloggt&lt;br /&gt;
&lt;br /&gt;
=== Auswertung mit goaccess ===&lt;br /&gt;
  ~$ zcat ... | goaccess -o webstat.html --log-format=COMBINED -&lt;br /&gt;
legt eine Datei webstat.html im aktuellen Ordner ab, diese kann dann zum Beispiel heruntergeladen werden, oder in einer Domain erreichbar gemacht werden. &#039;&#039;&#039;Empfehlung:&#039;&#039;&#039; Datei per scp heruntergeladen, auf dem eigenen, geschützten Rechner angeschaut, und schnell vernichtet.&lt;br /&gt;
== Finetuning ==&lt;br /&gt;
=== Anonymisierte IPs ===&lt;br /&gt;
Um nur anonymisierte IPs anzeigen zu lassen kann das zusätzliche Flag --anonymize-ip verwendet werden&lt;br /&gt;
&lt;br /&gt;
  ~$ zcat ... | goaccess ... --anonymize-ip  -&lt;br /&gt;
&lt;br /&gt;
In der Doku ist beschrieben wie die IP Adresse noch gröber anonymisiert werden kann. &lt;br /&gt;
=== Aktuellere Geo Location ===&lt;br /&gt;
Um die aktuellere Version der Geolocations zu verwenden muss bei &lt;br /&gt;
&lt;br /&gt;
 ./configure ... --enable-geoip=mmdb ...&lt;br /&gt;
&lt;br /&gt;
statt legacy verwendet werden. Dafür gibt es eine kostenlose [https://db-ip.com/db/download/ip-to-country-lite|Länder] oder [https://db-ip.com/db/download/ip-to-city-lite|Städte] lite-Version unter CC BY 4.0. Falls diese nicht genau genug sind, gibt es auch kommerzielle Alternativen vom selben Anbieter. &lt;br /&gt;
&lt;br /&gt;
Die Datenbank sollte im mmdb format heruntergeladen werden. Der direkte Downloadlink kann von oben direkt kopiert werden. Der Download Befehl auf der Konsole könnte bspw so aussehen (Datum und Version beachten! ggf. Link selbst einfügen). Zum heutigen Stand hatte die lite-cities Datenbank eine Größe von rund 100 MB.&lt;br /&gt;
&lt;br /&gt;
 wget https://download.db-ip.com/free/dbip-city-lite-2023-02.mmdb.gz&lt;br /&gt;
 gzip -d dbip-city-lite-2023-02.mmdb.gz&lt;br /&gt;
&lt;br /&gt;
Beim ausführen von goaccess muss dann auch immer angegeben werden welche IP Datenbank verwendet werden soll. Dies geht mit folgendem zusätzlichen Flag (ggf. Pfad der db anpassen)  &lt;br /&gt;
  ~$ zcat ... | goaccess ... --geoip-database=dbip-city-lite-2023-02.mmdb -&lt;br /&gt;
&lt;br /&gt;
=== Automatisierung pro Domain des Paketes ===&lt;br /&gt;
&lt;br /&gt;
Mit dem  folgenden kleinen shell script kann in einer logs.example.com (muss ersetzt werden!) Domain die statischen html files zum ansehen hinterlegt werden. Diese sollten dort nicht ohne Login ausgeliefert werden und nicht ohne https.  Grundsätzlich könnte goaccess die logs auch live aufbereiten, die Komprimierung  könnte  dort jedoch ggf in der neusten Version ein Hindernis darstellen.&lt;br /&gt;
&lt;br /&gt;
  logdom=logs.example.com&lt;br /&gt;
  for dom in $(find /home/doms -type l -lname &amp;quot;$HOME/users/*&amp;quot;)     # list domain names&lt;br /&gt;
  do&lt;br /&gt;
     dom=${dom##*/}&lt;br /&gt;
     echo ${dom}&lt;br /&gt;
     zcat $HOME/var/web-$dom-*.log.gz | goaccess -o $HOME/doms/$logdom/htdocs-ssl/$dom.html --log-format=COMBINED --anonymize-ip --geoip-database=dbip-city-lite-2023-02.mmdb --ignore-crawler --unknowns-as-crawlers -&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
Erklärung des scripts: Zuerst wird die logdomain auf der die Dateien abgelegt werden sollen festgelegt. Dann wird via find im Ordner /home/doms nach Dateien vom Typ Link gesucht, dessen Linkziel genauso beginnt wie das home des aktuellen users (der Paketuser). Es listet also alle domains, welche im aktuellen Paket Verwendung finden und iteriert über diese indem es die  aktuelle  Iteration in der Variablen dom speichert. Die nächste Zeile entfernt den Pfad vor dem Domainnamen, sodass die Variable nur noch den reinen Domainnamen beinhaltet. Der echo Befehl ist nur zur Übersicht beim manuellen ausführen und kann nach Wunsch mit # auskommentiert werden. Anschließend wird wie gewohnt (für jede Domain nacheinander) goaccess aufgerufen und für jede Domain eine eigene html Datei erzeugt. Eventuell muss der goaccess Befehl noch an die eigenen Wünsche angepasst werden. &lt;br /&gt;
&lt;br /&gt;
Mit einem [[cron]] Eintrag könnte dieses Script regelmäßig aufgerufen werden. z.B.:&lt;br /&gt;
&lt;br /&gt;
   10 02 * * * sh ~/generate-logs.sh &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
== Warnung: Datenschutz ==&lt;br /&gt;
Man beachte, dass die Auswertungen Datenschutzrelevante Inhalte wie die IP Adresse und die aufgerufenen Pfade enthalten daher kann es nicht ausreichen nur die IPs zu anonymisieren. Bei einer Nextcloud Instanz beinhalten die Pfade z.B. häufig auch den Username und somit ggf. den Klarnamen. Entsprechend sollte diese Auswertung nicht öffentlich (ohne Passwortschutz) zugänglich gemacht werden. Siehe dazu [[.htaccess#Passwortschutz_f.C3.BCr_Dateien|Passwortschutz mit htaccess]].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Traffic]]&lt;/div&gt;</summary>
		<author><name>Opa00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Goaccess&amp;diff=5997</id>
		<title>Goaccess</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Goaccess&amp;diff=5997"/>
		<updated>2023-02-16T03:40:24Z</updated>

		<summary type="html">&lt;p&gt;Opa00: /* Automatisierung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Um den [[Traffic]] des Pakets beziehungweise die Einträge der [[Logging|Logdateien]] im grafischen Blick zu halten, falls das Vorgehen im gerade wenn unerwartet eine Mail mit erhöhtem Datenvolumen kommt (im terminal oder als webpage) bietet sich das tool goaccess an (https://goaccess.io/download). Es ist ein sehr schlankes tool was gerade mal 690kB im Download des tar.gz wiegt (Version 1.7)&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
Die Installation ist erst einmal sehr einfach, daher kann es fast so installiert werden wie auf goaccess.io/download beschrieben:&lt;br /&gt;
eingeloggt als Paketadmin z.B. per ssh xyz00&lt;br /&gt;
Da wir als Paketadmin keine Programme für alle installieren kann ein lokales Directory für die Installation des Programms (und ähnlicher angelegt werden:&lt;br /&gt;
z.B. /home/pacs/xyz00/usr &lt;br /&gt;
~$mkdir usr&lt;br /&gt;
um dann automatisch dorthin auch ein /bin Ordner anzulegen (wird durch configure danach gemacht)&lt;br /&gt;
und auch den PATH anpassen, damit Programme hier in bin direkt ausgeführt werden.&lt;br /&gt;
 ~$ echo &#039;export PATH=&amp;quot;$HOME/usr/bin:$PATH&amp;quot;&#039; &amp;gt;&amp;gt;.bashrc&lt;br /&gt;
leider wird .bashrc nicht immer gelesen wenn wir mit ssh einloggen, wir müssen es in .bash_profile festlegen:&lt;br /&gt;
 ~$ echo &#039;[[ -f ~/.bashrc ]] &amp;amp;&amp;amp; . ~/.bashrc&#039; &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
nun sind wir bereit für die Installation:&lt;br /&gt;
 ~$ wget https://tar.goaccess.io/goaccess-1.7.tar.gz&lt;br /&gt;
 ~$ tar -xzvf goaccess-1.7.tar.gz&lt;br /&gt;
 ~$ cd goaccess-1.7/&lt;br /&gt;
Eine Systemweite Installation wird mangels Berechtigung nicht funktionieren. Damit configure direkt unseren Pfad anlegt, befehlen wir das Installationsdirectory $HOME als prefix&lt;br /&gt;
 ~/goaccess-1.7$ ./configure --enable-utf8 --enable-geoip=legacy --prefix=$HOME/usr&lt;br /&gt;
 ~/goaccess-1.7$ make&lt;br /&gt;
 ~/goaccess-1.7# make install&lt;br /&gt;
Nun liegt $HOME//usr/bin/goaccess in unserem PATH an erster Stelle&lt;br /&gt;
ein Aufruf von&lt;br /&gt;
~$ goaccess --version&lt;br /&gt;
sollte das zeigen&lt;br /&gt;
 ~$ goaccess --v&lt;br /&gt;
 GoAccess - 1.7.&lt;br /&gt;
 For more details visit: https://goaccess.io/&lt;br /&gt;
 Copyright (C) 2009-2022 by Gerardo Orellana&lt;br /&gt;
 &lt;br /&gt;
 Build configure arguments:&lt;br /&gt;
  --enable-utf8&lt;br /&gt;
  --enable-geoip=legacy&lt;br /&gt;
&lt;br /&gt;
==Anwendung==&lt;br /&gt;
Dann, nach der Installation beginnt der hostsharingspezifische Teil, denn das file web.log, welches alle aktuellen logs der letzten zwei Tage beinhaltet beginnt nicht mit Datum und Uhrzeit, sondern mit den Domainnamen, was für goaccess zu Verwirrung führt.&lt;br /&gt;
=== Pipe mit zcat ===&lt;br /&gt;
Am leichtesten ist die Nutzung einer Pipe für die Prozessierung der gzip2 gezippten logfiles die alle nach dem Schema:&lt;br /&gt;
web-subdomain.example.com-YYYYMMDD-hhmm.log.gz im Ordner $HOME/var liegen.&lt;br /&gt;
Eine Auswertung des Weblogs von example.com z.B. vom 14.02.2023 liegt unter /home/pacs/xyz00/var/web-example.com-20230215-0139.log.gz vor&lt;br /&gt;
Die Auswertung muss also entzippt werden, das geht on-the-fly mit zcat&lt;br /&gt;
 ~$ zcat /home/pacs/xyz00/var/web-example.com-20230215-0139.log.gz &lt;br /&gt;
=== Wildcards ===&lt;br /&gt;
zcat kann sehr gut mit Wildcards umgehen, der Aufruf &lt;br /&gt;
 ~$ &#039;&#039;&#039;zcat ~/var/web*.log.gz&#039;&#039;&#039;  | goaccess -o webstat.html --log-format=COMBINED -&lt;br /&gt;
zum Beispiel fasst alle logfiles aller Domains und aller Tage  zusammen.&lt;br /&gt;
Es geht auch nur eine Domain: &#039;&#039;&#039;&#039;&#039;&amp;quot;var/web-example.com*.log.gz&amp;quot;&#039;&#039;&#039;&#039;&#039; oder nur den Januar 2023: &#039;&#039;&#039;&#039;&#039;&amp;quot;var/web*202301*log.gz&amp;quot;&#039;&#039;&#039;&#039;&#039; (es sollte beachtet werden, dass natürlich immer die Datei, die dann am Tag früh morgens (bei mir ist das zwischen 01:38h und 01:40h) erstellt wird natürlich für den vorherigen Tag ist. Das heißt in der 20230101 ist vor allem der 31.12. geloggt&lt;br /&gt;
&lt;br /&gt;
=== Auswertung mit goaccess ===&lt;br /&gt;
  ~$ zcat ... | goaccess -o webstat.html --log-format=COMBINED -&lt;br /&gt;
legt eine Datei webstat.html im aktuellen Ordner ab, diese kann dann zum Beispiel heruntergeladen werden, oder in einer Domain erreichbar gemacht werden. &#039;&#039;&#039;Empfehlung:&#039;&#039;&#039; Datei per scp heruntergeladen, auf dem eigenen, geschützten Rechner angeschaut, und schnell vernichtet.&lt;br /&gt;
== Finetuning ==&lt;br /&gt;
=== Anonymisierte IPs ===&lt;br /&gt;
Um nur anonymisierte IPs anzeigen zu lassen kann das zusätzliche Flag --anonymize-ip verwendet werden&lt;br /&gt;
&lt;br /&gt;
  ~$ zcat ... | goaccess ... --anonymize-ip  -&lt;br /&gt;
&lt;br /&gt;
In der Doku ist beschrieben wie die IP Adresse noch gröber anonymisiert werden kann. &lt;br /&gt;
=== Aktuellere Geo Location ===&lt;br /&gt;
Um die aktuellere Version der Geolocations zu verwenden muss bei &lt;br /&gt;
&lt;br /&gt;
 ./configure ... --enable-geoip=mmdb ...&lt;br /&gt;
&lt;br /&gt;
statt legacy verwendet werden. Dafür gibt es eine kostenlose [https://db-ip.com/db/download/ip-to-country-lite|Länder] oder [https://db-ip.com/db/download/ip-to-city-lite|Städte] lite-Version unter CC BY 4.0. Falls diese nicht genau genug sind, gibt es auch kommerzielle Alternativen vom selben Anbieter. &lt;br /&gt;
&lt;br /&gt;
Die Datenbank sollte im mmdb format heruntergeladen werden. Der direkte Downloadlink kann von oben direkt kopiert werden. Der Download Befehl auf der Konsole könnte bspw so aussehen (Datum und Version beachten! ggf. Link selbst einfügen). Zum heutigen Stand hatte die lite-cities Datenbank eine Größe von rund 100 MB.&lt;br /&gt;
&lt;br /&gt;
 wget https://download.db-ip.com/free/dbip-city-lite-2023-02.mmdb.gz&lt;br /&gt;
 gzip -d dbip-city-lite-2023-02.mmdb.gz&lt;br /&gt;
&lt;br /&gt;
Beim ausführen von goaccess muss dann auch immer angegeben werden welche IP Datenbank verwendet werden soll. Dies geht mit folgendem zusätzlichen Flag (ggf. Pfad der db anpassen)  &lt;br /&gt;
  ~$ zcat ... | goaccess ... --geoip-database=dbip-city-lite-2023-02.mmdb -&lt;br /&gt;
&lt;br /&gt;
=== Automatisierung pro Domain des Paketes ===&lt;br /&gt;
&lt;br /&gt;
Mit dem  folgenden kleinen shell script kann in einer logs.example.com (muss ersetzt werden!) Domain die statischen html files zum ansehen hinterlegt werden. Diese sollten dort nicht ohne Login ausgeliefert werden und nicht ohne https.&lt;br /&gt;
&lt;br /&gt;
  logdom=logs.example.com&lt;br /&gt;
  for dom in $(find /home/doms -type l -lname &amp;quot;$HOME/users/*&amp;quot;)     # list domain names&lt;br /&gt;
  do&lt;br /&gt;
     dom=${dom##*/}&lt;br /&gt;
     echo ${dom}&lt;br /&gt;
     zcat $HOME/var/web-$dom-*.log.gz | goaccess -o $HOME/doms/$logdom/htdocs-ssl/$dom.html --log-format=COMBINED --anonymize-ip --geoip-database=dbip-city-lite-2023-02.mmdb --ignore-crawler --unknowns-as-crawlers -&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
Erklärung des scripts: Zuerst wird die logdomain auf der die Dateien abgelegt werden sollen festgelegt. Dann wird via find im Ordner /home/doms nach Dateien vom Typ Link gesucht, dessen Linkziel genauso beginnt wie das home des aktuellen users (der Paketuser). Es listet also alle domains, welche im aktuellen Paket Verwendung finden und iteriert über diese indem es die  aktuelle  Iteration in der Variablen dom speichert. Die nächste Zeile entfernt den Pfad vor dem Domainnamen, sodass die Variable nur noch den reinen Domainnamen beinhaltet. Der echo befehl ist nur zur Übersicht beim manuellen ausführen und kann nach Wunsch mit # auskommentiert werden. Anschließend wird wie gewohnt (für jede Domain nacheinander) goaccess aufgerufen und für jede Domain eine eigene html Datei erzeugt. Eventuell muss der goaccess Befehl noch an die eigenen Wünsche angepasst werden. &lt;br /&gt;
&lt;br /&gt;
Mit einem [[cron]] Eintrag könnte dieses Script regelmäßig aufgerufen werden.&lt;br /&gt;
&lt;br /&gt;
== Warnung: Datenschutz ==&lt;br /&gt;
Man beachte, dass die Auswertungen Datenschutzrelevante Inhalte wie die IP Adresse und die aufgerufenen Pfade enthalten daher kann es nicht ausreichen nur die IPs zu anonymisieren. Bei einer Nextcloud Instanz beinhalten die Pfade z.B. häufig auch den Username und somit ggf. den Klarnamen. Entsprechend sollte diese Auswertung nicht öffentlich (ohne Passwortschutz) zugänglich gemacht werden. Siehe dazu [[.htaccess#Passwortschutz_f.C3.BCr_Dateien|Passwortschutz mit htaccess]].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Traffic]]&lt;/div&gt;</summary>
		<author><name>Opa00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Goaccess&amp;diff=5996</id>
		<title>Goaccess</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Goaccess&amp;diff=5996"/>
		<updated>2023-02-16T03:17:46Z</updated>

		<summary type="html">&lt;p&gt;Opa00: bessere geolocation und ip Anonymisierung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Um den [[Traffic]] des Pakets beziehungweise die Einträge der [[Logging|Logdateien]] im grafischen Blick zu halten, falls das Vorgehen im gerade wenn unerwartet eine Mail mit erhöhtem Datenvolumen kommt (im terminal oder als webpage) bietet sich das tool goaccess an (https://goaccess.io/download). Es ist ein sehr schlankes tool was gerade mal 690kB im Download des tar.gz wiegt (Version 1.7)&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
Die Installation ist erst einmal sehr einfach, daher kann es fast so installiert werden wie auf goaccess.io/download beschrieben:&lt;br /&gt;
eingeloggt als Paketadmin z.B. per ssh xyz00&lt;br /&gt;
Da wir als Paketadmin keine Programme für alle installieren kann ein lokales Directory für die Installation des Programms (und ähnlicher angelegt werden:&lt;br /&gt;
z.B. /home/pacs/xyz00/usr &lt;br /&gt;
~$mkdir usr&lt;br /&gt;
um dann automatisch dorthin auch ein /bin Ordner anzulegen (wird durch configure danach gemacht)&lt;br /&gt;
und auch den PATH anpassen, damit Programme hier in bin direkt ausgeführt werden.&lt;br /&gt;
 ~$ echo &#039;export PATH=&amp;quot;$HOME/usr/bin:$PATH&amp;quot;&#039; &amp;gt;&amp;gt;.bashrc&lt;br /&gt;
leider wird .bashrc nicht immer gelesen wenn wir mit ssh einloggen, wir müssen es in .bash_profile festlegen:&lt;br /&gt;
 ~$ echo &#039;[[ -f ~/.bashrc ]] &amp;amp;&amp;amp; . ~/.bashrc&#039; &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
nun sind wir bereit für die Installation:&lt;br /&gt;
 ~$ wget https://tar.goaccess.io/goaccess-1.7.tar.gz&lt;br /&gt;
 ~$ tar -xzvf goaccess-1.7.tar.gz&lt;br /&gt;
 ~$ cd goaccess-1.7/&lt;br /&gt;
Eine Systemweite Installation wird mangels Berechtigung nicht funktionieren. Damit configure direkt unseren Pfad anlegt, befehlen wir das Installationsdirectory $HOME als prefix&lt;br /&gt;
 ~/goaccess-1.7$ ./configure --enable-utf8 --enable-geoip=legacy --prefix=$HOME/usr&lt;br /&gt;
 ~/goaccess-1.7$ make&lt;br /&gt;
 ~/goaccess-1.7# make install&lt;br /&gt;
Nun liegt $HOME//usr/bin/goaccess in unserem PATH an erster Stelle&lt;br /&gt;
ein Aufruf von&lt;br /&gt;
~$ goaccess --version&lt;br /&gt;
sollte das zeigen&lt;br /&gt;
 ~$ goaccess --v&lt;br /&gt;
 GoAccess - 1.7.&lt;br /&gt;
 For more details visit: https://goaccess.io/&lt;br /&gt;
 Copyright (C) 2009-2022 by Gerardo Orellana&lt;br /&gt;
 &lt;br /&gt;
 Build configure arguments:&lt;br /&gt;
  --enable-utf8&lt;br /&gt;
  --enable-geoip=legacy&lt;br /&gt;
&lt;br /&gt;
==Anwendung==&lt;br /&gt;
Dann, nach der Installation beginnt der hostsharingspezifische Teil, denn das file web.log, welches alle aktuellen logs der letzten zwei Tage beinhaltet beginnt nicht mit Datum und Uhrzeit, sondern mit den Domainnamen, was für goaccess zu Verwirrung führt.&lt;br /&gt;
=== Pipe mit zcat ===&lt;br /&gt;
Am leichtesten ist die Nutzung einer Pipe für die Prozessierung der gzip2 gezippten logfiles die alle nach dem Schema:&lt;br /&gt;
web-subdomain.example.com-YYYYMMDD-hhmm.log.gz im Ordner $HOME/var liegen.&lt;br /&gt;
Eine Auswertung des Weblogs von example.com z.B. vom 14.02.2023 liegt unter /home/pacs/xyz00/var/web-example.com-20230215-0139.log.gz vor&lt;br /&gt;
Die Auswertung muss also entzippt werden, das geht on-the-fly mit zcat&lt;br /&gt;
 ~$ zcat /home/pacs/xyz00/var/web-example.com-20230215-0139.log.gz &lt;br /&gt;
=== Wildcards ===&lt;br /&gt;
zcat kann sehr gut mit Wildcards umgehen, der Aufruf &lt;br /&gt;
 ~$ &#039;&#039;&#039;zcat ~/var/web*.log.gz&#039;&#039;&#039;  | goaccess -o webstat.html --log-format=COMBINED -&lt;br /&gt;
zum Beispiel fasst alle logfiles aller Domains und aller Tage  zusammen.&lt;br /&gt;
Es geht auch nur eine Domain: &#039;&#039;&#039;&#039;&#039;&amp;quot;var/web-example.com*.log.gz&amp;quot;&#039;&#039;&#039;&#039;&#039; oder nur den Januar 2023: &#039;&#039;&#039;&#039;&#039;&amp;quot;var/web*202301*log.gz&amp;quot;&#039;&#039;&#039;&#039;&#039; (es sollte beachtet werden, dass natürlich immer die Datei, die dann am Tag früh morgens (bei mir ist das zwischen 01:38h und 01:40h) erstellt wird natürlich für den vorherigen Tag ist. Das heißt in der 20230101 ist vor allem der 31.12. geloggt&lt;br /&gt;
&lt;br /&gt;
=== Auswertung mit goaccess ===&lt;br /&gt;
  ~$ zcat ... | goaccess -o webstat.html --log-format=COMBINED -&lt;br /&gt;
legt eine Datei webstat.html im aktuellen Ordner ab, diese kann dann zum Beispiel heruntergeladen werden, oder in einer Domain erreichbar gemacht werden. &#039;&#039;&#039;Empfehlung:&#039;&#039;&#039; Datei per scp heruntergeladen, auf dem eigenen, geschützten Rechner angeschaut, und schnell vernichtet.&lt;br /&gt;
== Finetuning ==&lt;br /&gt;
=== Anonymisierte IPs ===&lt;br /&gt;
Um nur anonymisierte IPs anzeigen zu lassen kann das zusätzliche Flag --anonymize-ip verwendet werden&lt;br /&gt;
&lt;br /&gt;
  ~$ zcat ... | goaccess ... --anonymize-ip  -&lt;br /&gt;
&lt;br /&gt;
In der Doku ist beschrieben wie die IP Adresse noch gröber anonymisiert werden kann. &lt;br /&gt;
=== Aktuellere Geo Location ===&lt;br /&gt;
Um die aktuellere Version der Geolocations zu verwenden muss bei &lt;br /&gt;
&lt;br /&gt;
 ./configure ... --enable-geoip=mmdb ...&lt;br /&gt;
&lt;br /&gt;
statt legacy verwendet werden. Dafür gibt es eine kostenlose [https://db-ip.com/db/download/ip-to-country-lite|Länder] oder [https://db-ip.com/db/download/ip-to-city-lite|Städte] lite-Version unter CC BY 4.0. Falls diese nicht genau genug sind, gibt es auch kommerzielle Alternativen vom selben Anbieter. &lt;br /&gt;
&lt;br /&gt;
Die Datenbank sollte im mmdb format heruntergeladen werden. Der direkte Downloadlink kann von oben direkt kopiert werden. Der Download Befehl auf der Konsole könnte bspw so aussehen (Datum und Version beachten! ggf. Link selbst einfügen). Zum heutigen Stand hatte die lite-cities Datenbank eine Größe von rund 100 MB.&lt;br /&gt;
&lt;br /&gt;
 wget https://download.db-ip.com/free/dbip-city-lite-2023-02.mmdb.gz&lt;br /&gt;
 gzip -d dbip-city-lite-2023-02.mmdb.gz&lt;br /&gt;
&lt;br /&gt;
Beim ausführen von goaccess muss dann auch immer angegeben werden welche IP Datenbank verwendet werden soll. Dies geht mit folgendem zusätzlichen Flag (ggf. Pfad der db anpassen)  &lt;br /&gt;
  ~$ zcat ... | goaccess ... --geoip-database=dbip-city-lite-2023-02.mmdb -&lt;br /&gt;
&lt;br /&gt;
=== Automatisierung ===&lt;br /&gt;
&lt;br /&gt;
tbc&lt;br /&gt;
&lt;br /&gt;
== Warnung: Datenschutz ==&lt;br /&gt;
Man beachte, dass die Auswertungen Datenschutzrelevante Inhalte wie die IP Adresse und die aufgerufenen Pfade enthalten daher kann es nicht ausreichen nur die IPs zu anonymisieren. Bei einer Nextcloud Instanz beinhalten die Pfade z.B. häufig auch den Username und somit ggf. den Klarnamen. Entsprechend sollte diese Auswertung nicht öffentlich (ohne Passwortschutz) zugänglich gemacht werden. Siehe dazu [[.htaccess#Passwortschutz_f.C3.BCr_Dateien|Passwortschutz mit htaccess]].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Traffic]]&lt;/div&gt;</summary>
		<author><name>Opa00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Goaccess&amp;diff=5995</id>
		<title>Goaccess</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Goaccess&amp;diff=5995"/>
		<updated>2023-02-16T00:49:10Z</updated>

		<summary type="html">&lt;p&gt;Opa00: kleine Anpassung des log verzeichnisses&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Um den [[Traffic]] des Pakets beziehungweise die Einträge der [[Logging|Logdateien]] im grafischen Blick zu halten, falls das Vorgehen im gerade wenn unerwartet eine Mail mit erhöhtem Datenvolumen kommt (im terminal oder als webpage) bietet sich das tool goaccess an (https://goaccess.io/download). Es ist ein sehr schlankes tool was gerade mal 690kB im Download des tar.gz wiegt (Version 1.7)&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
Die Installation ist erst einmal sehr einfach, daher kann es fast so installiert werden wie auf goaccess.io/download beschrieben:&lt;br /&gt;
eingeloggt als Paketadmin z.B. per ssh xyz00&lt;br /&gt;
Da wir als Paketadmin keine Programme für alle installieren kann ein lokales Directory für die Installation des Programms (und ähnlicher angelegt werden:&lt;br /&gt;
z.B. /home/pacs/xyz00/usr &lt;br /&gt;
~$mkdir usr&lt;br /&gt;
um dann automatisch dorthin auch ein /bin Ordner anzulegen (wird durch configure danach gemacht)&lt;br /&gt;
und auch den PATH anpassen, damit Programme hier in bin direkt ausgeführt werden.&lt;br /&gt;
 ~$ echo &#039;export PATH=&amp;quot;$HOME/usr/bin:$PATH&amp;quot;&#039; &amp;gt;&amp;gt;.bashrc&lt;br /&gt;
leider wird .bashrc nicht immer gelesen wenn wir mit ssh einloggen, wir müssen es in .bash_profile festlegen:&lt;br /&gt;
 ~$ echo &#039;[[ -f ~/.bashrc ]] &amp;amp;&amp;amp; . ~/.bashrc&#039; &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
nun sind wir bereit für die Installation:&lt;br /&gt;
 ~$ wget https://tar.goaccess.io/goaccess-1.7.tar.gz&lt;br /&gt;
 ~$ tar -xzvf goaccess-1.7.tar.gz&lt;br /&gt;
 ~$ cd goaccess-1.7/&lt;br /&gt;
Eine Systemweite Installation wird mangels Berechtigung nicht funktionieren. Damit configure direkt unseren Pfad anlegt, befehlen wir das Installationsdirectory $HOME als prefix&lt;br /&gt;
 ~/goaccess-1.7$ ./configure --enable-utf8 --enable-geoip=mmdb --prefix=$HOME/usr&lt;br /&gt;
 ~/goaccess-1.7$ make&lt;br /&gt;
 ~/goaccess-1.7# make install&lt;br /&gt;
Nun liegt $HOME//usr/bin/goaccess in unserem PATH an erster Stelle&lt;br /&gt;
ein Aufruf von&lt;br /&gt;
~$ goaccess --version&lt;br /&gt;
sollte das zeigen&lt;br /&gt;
 ~$ goaccess --v&lt;br /&gt;
 GoAccess - 1.7.&lt;br /&gt;
 For more details visit: https://goaccess.io/&lt;br /&gt;
 Copyright (C) 2009-2022 by Gerardo Orellana&lt;br /&gt;
 &lt;br /&gt;
 Build configure arguments:&lt;br /&gt;
  --enable-utf8&lt;br /&gt;
  --enable-geoip=mmdb&lt;br /&gt;
&lt;br /&gt;
==Anwendung==&lt;br /&gt;
Dann, nach der Installation beginnt der hostsharingspezifische Teil, denn das file web.log, welches alle aktuellen logs der letzten zwei Tage beinhaltet beginnt nicht mit Datum und Uhrzeit, sondern mit den Domainnamen, was für goaccess zu Verwirrung führt.&lt;br /&gt;
=== Pipe mit zcat ===&lt;br /&gt;
Am leichtesten ist die Nutzung einer Pipe für die Prozessierung der gzip2 gezippten logfiles die alle nach dem Schema:&lt;br /&gt;
web-subdomain.example.com-YYYYMMDD-hhmm.log.gz im Ordner $HOME/var liegen.&lt;br /&gt;
Eine Auswertung des Weblogs von example.com z.B. vom 14.02.2023 liegt unter /home/pacs/xyz00/var/web-example.com-20230215-0139.log.gz vor&lt;br /&gt;
Die Auswertung muss also entzippt werden, das geht on-the-fly mit zcat&lt;br /&gt;
 ~$ zcat /home/pacs/xyz00/var/web-example.com-20230215-0139.log.gz &lt;br /&gt;
=== Wildcards ===&lt;br /&gt;
zcat kann sehr gut mit Wildcards umgehen, der Aufruf &lt;br /&gt;
 ~$ &#039;&#039;&#039;zcat ~/var/web*.log.gz&#039;&#039;&#039;  | goaccess -o webstat.html --log-format=COMBINED -&lt;br /&gt;
zum Beispiel fasst alle logfiles aller Domains und aller Tage  zusammen.&lt;br /&gt;
Es geht auch nur eine Domain: &#039;&#039;&#039;&#039;&#039;&amp;quot;var/web-example.com*.log.gz&amp;quot;&#039;&#039;&#039;&#039;&#039; oder nur den Januar 2023: &#039;&#039;&#039;&#039;&#039;&amp;quot;var/web*202301*log.gz&amp;quot;&#039;&#039;&#039;&#039;&#039; (es sollte beachtet werden, dass natürlich immer die Datei, die dann am Tag früh morgens (bei mir ist das zwischen 01:38h und 01:40h) erstellt wird natürlich für den vorherigen Tag ist. Das heißt in der 20230101 ist vor allem der 31.12. geloggt&lt;br /&gt;
&lt;br /&gt;
=== Auswertung mit goaccess ===&lt;br /&gt;
  ~$ zcat ... | goaccess -o webstat.html --log-format=COMBINED -&lt;br /&gt;
legt eine Datei webstat.html im aktuellen Ordner ab, diese kann dann zum Beispiel heruntergeladen werden, oder in einer Domain erreichbar gemacht werden. &#039;&#039;&#039;Empfehlung:&#039;&#039;&#039; Datei per scp heruntergeladen, auf dem eigenen, geschützten Rechner angeschaut, und schnell vernichtet.&lt;br /&gt;
&lt;br /&gt;
== Warnung: Datenschutz ==&lt;br /&gt;
Man beachte, dass die Auswertungen Datenschutzrelevante Inhalte wie die IP Adresse und die aufgerufenen Pfade enthalten, bei Nextcloud beinhalten diese häufig auch den Username und somit ggf. den Klarnamen. Entsprechend sollte diese Auswertung nicht öffentlich (ohne Passwortschutz) zugänglich gemacht werden. Siehe dazu [[.htaccess#Passwortschutz_f.C3.BCr_Dateien|Passwortschutz mit htaccess]].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Traffic]]&lt;/div&gt;</summary>
		<author><name>Opa00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Goaccess&amp;diff=5992</id>
		<title>Goaccess</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Goaccess&amp;diff=5992"/>
		<updated>2023-02-15T20:46:46Z</updated>

		<summary type="html">&lt;p&gt;Opa00: Warnung zu Datenschutzrechtlichen Bedenken bei Veröffentlichung der Logfile hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Um den [[Traffic]] des Pakets beziehungweise die Einträge der [[Logging|Logdateien]] im grafischen Blick zu halten, falls das Vorgehen im gerade wenn unerwartet eine Mail mit erhöhtem Datenvolumen kommt (im terminal oder als webpage) bietet sich das tool goaccess an (https://goaccess.io/download). Es ist ein sehr schlankes tool was gerade mal 690kB im Download des tar.gz wiegt (Version 1.7)&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
Die Installation ist erst einmal sehr einfach, daher kann es fast so installiert werden wie auf goaccess.io/download beschrieben:&lt;br /&gt;
eingeloggt als Paketadmin z.B. per ssh xyz00&lt;br /&gt;
Da wir als Paketadmin keine Programme für alle installieren kann ein lokales Directory für die Installation des Programms (und ähnlicher angelegt werden:&lt;br /&gt;
z.B. /home/pacs/xyz00/usr &lt;br /&gt;
~$mkdir usr&lt;br /&gt;
um dann automatisch dorthin auch ein /bin Ordner anzulegen (wird durch configure danach gemacht)&lt;br /&gt;
und auch den PATH anpassen, damit Programme hier in bin direkt ausgeführt werden.&lt;br /&gt;
 ~$ echo &#039;export PATH=&amp;quot;$HOME/usr/bin:$PATH&amp;quot;&#039; &amp;gt;&amp;gt;.bashrc&lt;br /&gt;
leider wird .bashrc nicht immer gelesen wenn wir mit ssh einloggen, wir müssen es in .bash_profile festlegen:&lt;br /&gt;
 ~$ echo &#039;[[ -f ~/.bashrc ]] &amp;amp;&amp;amp; . ~/.bashrc&#039; &amp;gt;&amp;gt; ~/.bash_profile&lt;br /&gt;
nun sind wir bereit für die Installation:&lt;br /&gt;
 ~$ wget https://tar.goaccess.io/goaccess-1.7.tar.gz&lt;br /&gt;
 ~$ tar -xzvf goaccess-1.7.tar.gz&lt;br /&gt;
 ~$ cd goaccess-1.7/&lt;br /&gt;
Eine Systemweite Installation wird mangels Berechtigung nicht funktionieren. Damit configure direkt unseren Pfad anlegt, befehlen wir das Installationsdirectory $HOME als prefix&lt;br /&gt;
 ~/goaccess-1.7$ ./configure --enable-utf8 --enable-geoip=mmdb --prefix=$HOME/usr&lt;br /&gt;
 ~/goaccess-1.7$ make&lt;br /&gt;
 ~/goaccess-1.7# make install&lt;br /&gt;
Nun liegt $HOME//usr/bin/goaccess in unserem PATH an erster Stelle&lt;br /&gt;
ein Aufruf von&lt;br /&gt;
~$ goaccess --version&lt;br /&gt;
sollte das zeigen&lt;br /&gt;
 ~$ goaccess --v&lt;br /&gt;
 GoAccess - 1.7.&lt;br /&gt;
 For more details visit: https://goaccess.io/&lt;br /&gt;
 Copyright (C) 2009-2022 by Gerardo Orellana&lt;br /&gt;
 &lt;br /&gt;
 Build configure arguments:&lt;br /&gt;
  --enable-utf8&lt;br /&gt;
  --enable-geoip=mmdb&lt;br /&gt;
&lt;br /&gt;
==Anwendung==&lt;br /&gt;
Dann, nach der Installation beginnt der hostsharingspezifische Teil, denn das file web.log, welches alle aktuellen logs der letzten zwei Tage beinhaltet beginnt nicht mit Datum und Uhrzeit, sondern mit den Domainnamen, was für goaccess zu Verwirrung führt.&lt;br /&gt;
=== Pipe mit zcat ===&lt;br /&gt;
Am leichtesten ist die Nutzung einer Pipe für die Prozessierung der gzip2 gezippten logfiles die alle nach dem Schema:&lt;br /&gt;
web-subdomain.example.com-YYYYMMDD-hhmm.log.gz im Ordner $HOME/var liegen.&lt;br /&gt;
Eine Auswertung des Weblogs von example.com z.B. vom 14.02.2023 liegt unter /home/pacs/xyz00/var/web-example.com-20230215-0139.log.gz vor&lt;br /&gt;
Die Auswertung muss also entzippt werden, das geht on-the-fly mit zcat&lt;br /&gt;
 ~$ zcat /home/pacs/xyz00/var/web-example.com-20230215-0139.log.gz &lt;br /&gt;
=== Wildcards ===&lt;br /&gt;
zcat kann sehr gut mit Wildcards umgehen, der Aufruf &lt;br /&gt;
 ~$ zcat var/web*.log.gz  | goaccess -o webstat.html --log-format=COMBINED -&lt;br /&gt;
zum Beispiel fasst alle logfiles aller Domains und aller Tage  zusammen.&lt;br /&gt;
oder nur per Domain: &amp;quot;var/web-example.com*.log.gz&amp;quot; oder nur den Januar 2023: &amp;quot;var/web*202301*log.gz&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Auswertung mit goaccess ===&lt;br /&gt;
  ~$ zcat ... | goaccess -o webstat.html --log-format=COMBINED -&lt;br /&gt;
legt eine Datei webstat.html im aktuellen Ordner ab, diese kann dann zum Beispiel heruntergeladen werden, oder in einer Domain erreichbar gemacht werden. Man beachte das die Auswertungen Datenschutzrelevante Inhalte wie die IP Adresse und die aufgerufenen Pfade enthalten, bei Nextcloud beinhalten diese häufig auch den Username und somit ggf. den Klarnamen. Entsprechend sollte diese Auswertung nicht öffentlich (ohne Passwortschutz) zugänglich gemacht werden. Siehe dazu [[.htaccess#Passwortschutz_f.C3.BCr_Dateien|Passwortschutz mit htaccess]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Traffic]]&lt;/div&gt;</summary>
		<author><name>Opa00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Goaccess&amp;diff=5988</id>
		<title>Goaccess</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Goaccess&amp;diff=5988"/>
		<updated>2023-02-14T17:25:24Z</updated>

		<summary type="html">&lt;p&gt;Opa00: Added: analyse eines domain weblogs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Um den [[Traffic]] des Pakets beziehungweise die Einträge der [[Logging|Logdateien]] im grafischen Blick zu halten, falls das Vorgehen im gerade wenn unerwartet eine Mail mit erhöhtem Datenvolumen kommt (im terminal oder als webpage) bietet sich das tool goaccess an (https://goaccess.io/download). Es ist ein sehr schlankes tool was gerade mal 690kB im Download des tar.gz wiegt (Version 1.7)&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
Die Installation ist erst einmal sehr einfach, allerdings kommt beim aktivieren der geoip eine Fehlermeldung, daher kann es mit leichten Modifikationen so installiert werden wie auf goaccess.io/download beschrieben:&lt;br /&gt;
eingeloggt als Paketadmin z.B. per ssh xyz00&lt;br /&gt;
 ~$ wget https://tar.goaccess.io/goaccess-1.7.tar.gz&lt;br /&gt;
 ~$ tar -xzvf goaccess-1.7.tar.gz&lt;br /&gt;
 ~$ cd goaccess-1.7/&lt;br /&gt;
 ~/goaccess-1.7$ ./configure --enable-utf8 &amp;lt;s&amp;gt;--enable-geoip=mmdb&amp;lt;/s&amp;gt;&lt;br /&gt;
 ~/goaccess-1.7$ make&lt;br /&gt;
 &amp;lt;s&amp;gt;~/goaccess-1.7# make install&amp;lt;/s&amp;gt;&lt;br /&gt;
===Post installation===&lt;br /&gt;
Dann, nach der Installation beginnt der hostsharingspezifische Teil, denn alle Konfigurationen die mit dem Aufruf:&lt;br /&gt;
 ~/goaccess-1.7$ ./goaccess ./config.guess&lt;br /&gt;
angeboten werden haben das falsche Zeitformat für hostsharing, es muss folgendermaßen angepasst werden:&lt;br /&gt;
... to be continued...&lt;br /&gt;
&lt;br /&gt;
=== Einzelnes Log File einer Domain und eines Tages auswerden === &lt;br /&gt;
Um ein Log File eines Tages und einer Domain anzusehen benötigt man erstmal das richtige logfile. Wie in der Kerndoku beschrieben findet man das im Paketadmin xyz00 unter ~/var/web-example.com-YYYYMMDD-????.log.gz&lt;br /&gt;
&lt;br /&gt;
Um daraus einen Report zu generieren muss das log erstmal entpackt werden. &lt;br /&gt;
&lt;br /&gt;
 ~/$ mkdir tmp&lt;br /&gt;
 ~/$ cd tmp&lt;br /&gt;
 ~/tmp$ gzip -d ~/var/web-example.com-YYYYMMDD-????.log.gz&lt;br /&gt;
 ~/tmp$ mv ~/var/web-example.com-YYYYMMDD-????.log ./&lt;br /&gt;
 ~/tmp$ ~/goaccess-1.7/goaccess web-example.com-YYYYMMDD-????.log -o ~/tmp/report.html --log-format=COMBINED&lt;br /&gt;
&lt;br /&gt;
Das entpackte Logfile muss nicht zwangsläufig verschoben werden, eher zur Übersichtlichkeit.&lt;br /&gt;
&lt;br /&gt;
Der Report befindet sich dann in ~/tmp/log und kann dann in ein entsprechendes htdocs(-ssl) Verzeichnis verschoben werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Traffic]]&lt;/div&gt;</summary>
		<author><name>Opa00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Mattermost_Installieren&amp;diff=5854</id>
		<title>Mattermost Installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Mattermost_Installieren&amp;diff=5854"/>
		<updated>2022-08-06T22:41:07Z</updated>

		<summary type="html">&lt;p&gt;Opa00: fix c&amp;amp;p error&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Über Mattermost ==&lt;br /&gt;
&lt;br /&gt;
Mattermost ist ein Chat-Server unter einer freien MIT Lizenz. Der Server ist in der Programmiersprache [https://de.wikipedia.org/wiki/Go_%28Programmiersprache%29 go] implementiert.&lt;br /&gt;
&lt;br /&gt;
Mattermost ist eine selbst-gehostete Alternative zum Cloud-Dienst [https://de.wikipedia.org/wiki/Slack_(Software) Slack] oder zum proprietären [https://en.wikipedia.org/wiki/HipChat HipChat].&lt;br /&gt;
&lt;br /&gt;
== Vorbereitungen ==&lt;br /&gt;
&lt;br /&gt;
Die hier beschriebene Installation benötigt bei Hostsharing die Paket-Option &amp;quot;individuelle Serverdienste (1 Daemon)&amp;quot;. Im Managed Webspace ist diese Option kostenpflichtig: https://www.hostsharing.net/angebote/managed-webspace/&lt;br /&gt;
&lt;br /&gt;
Auf einem Managed Server melden Sie einfach die kostenlose Option &amp;quot;Eigener Daemon&amp;quot; an. Bei der Anmeldung geben Sie einen User an (dient als Admin/Service-User). Unter dieser User-Kennung läuft später der Mattermost-Server. Der User sollte vor der Anmeldung mit HSAdmin angelegt werden. Als User-Beispiel nutzen wir im Folgenden &amp;quot;xyz00-chat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ebenfalls mit HSAdmin muss eine (Sub-)Domain für den Chat-Dienst aufgeschaltet/angelegt werden. Die Domain muss dem User &amp;quot;xyz00-chat&amp;quot; zugeordnet werden. In dieser Anleitung nutze ich die Domain &amp;quot;beispiel-chat.de&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Weiterhin benötigt Mattermost eine MariaDB- oder eine PostgreSQL-Datenbank. Wir empfehlen PostgreSQL und legen also mit Hilfe von HSAdmin einen PostgreSQL-User (&amp;quot;xyz00_mm_user&amp;quot; mit Passwort &amp;quot;geheim&amp;quot;) und eine Datenbank (&amp;quot;xyz00_mm_db&amp;quot; mit dem Eigentümer &amp;quot;xyz00_mm_user&amp;quot;) an.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Als User &amp;quot;xyz00-chat&amp;quot; lade ich die Software herunter (aktuelle Version am 06.08.2022 ist 7.1.2):&lt;br /&gt;
&lt;br /&gt;
    wget https://releases.mattermost.com/7.1.2/mattermost-7.1.2-linux-amd64.tar.gz&lt;br /&gt;
&lt;br /&gt;
Die tar.gz-Datei wird ausgepackt:&lt;br /&gt;
&lt;br /&gt;
    tar xzf mattermost-7.1.2-linux-amd64.tar.gz&lt;br /&gt;
&lt;br /&gt;
Dann finden wir im $HOME des Users &amp;quot;xyz00-chat&amp;quot; ein Unterverzeichnis &amp;quot;$HOME/mattermost&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration von Mattermost nehmen wir in der Datei $&amp;quot;HOME/mattermost/config/config.json&amp;quot; vor:&lt;br /&gt;
&lt;br /&gt;
Im Abschnitt &amp;quot;ServiceSettings&amp;quot; definieren wir die Parameter &amp;quot;SiteURL&amp;quot;, &amp;quot;WebsocketURL&amp;quot; und &amp;quot;ListenAddress&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;ServiceSettings&amp;quot;: {&lt;br /&gt;
        &amp;quot;SiteURL&amp;quot;: &amp;quot;https://beispiel-chat.de&amp;quot;,&lt;br /&gt;
        ...&lt;br /&gt;
        &amp;quot;ListenAddress&amp;quot;: &amp;quot;xyz00.hostsharing.net:34567&amp;quot;,&lt;br /&gt;
        ...&lt;br /&gt;
&lt;br /&gt;
Dabei sei &amp;quot;https://beispiel-chat.de&amp;quot; die Domain, unter der der Chat betrieben werden soll und &amp;quot;34567&amp;quot; der Port,&lt;br /&gt;
der vom Hostsharing-Service für den &amp;quot;Eigenen Daemon&amp;quot; zugewiesen wurde.&lt;br /&gt;
&lt;br /&gt;
Im Abschnitt &amp;quot;TeamSettings&amp;quot; kann für den Chat ein Name vergeben werden:&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;TeamSettings&amp;quot;: {&lt;br /&gt;
        &amp;quot;SiteName&amp;quot;: &amp;quot;Beispiel-Chat&amp;quot;,&lt;br /&gt;
        ...&lt;br /&gt;
   &lt;br /&gt;
Im Abschnitt &amp;quot;SqlSettings&amp;quot; wird die PostgreSQL Datenbank konfiguriert:&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;SqlSettings&amp;quot;: {&lt;br /&gt;
        &amp;quot;DriverName&amp;quot;: &amp;quot;postgres&amp;quot;,&lt;br /&gt;
        &amp;quot;DataSource&amp;quot;: &amp;quot;postgres://xyz00_mm_user:geheim@127.0.0.1:5432/xyz00_mm_db?sslmode=disable\u0026connect_timeout=10&amp;quot;,&lt;br /&gt;
        ...&lt;br /&gt;
&lt;br /&gt;
Weiter noch unter &amp;quot;FileSettings&amp;quot; und &amp;quot;EMailSettings&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;FileSettings&amp;quot;: {&lt;br /&gt;
        &amp;quot;MaxFileSize&amp;quot;: 4096000,&lt;br /&gt;
        &amp;quot;DriverName&amp;quot;: &amp;quot;local&amp;quot;,&lt;br /&gt;
        &amp;quot;Directory&amp;quot;: &amp;quot;./data/&amp;quot;,&lt;br /&gt;
        ...&lt;br /&gt;
&lt;br /&gt;
   &amp;quot;EmailSettings&amp;quot;: {&lt;br /&gt;
        &amp;quot;EnableSignUpWithEmail&amp;quot;: true,&lt;br /&gt;
        &amp;quot;EnableSignInWithEmail&amp;quot;: true,&lt;br /&gt;
        &amp;quot;EnableSignInWithUsername&amp;quot;: true,&lt;br /&gt;
        &amp;quot;SendEmailNotifications&amp;quot;: true,&lt;br /&gt;
        &amp;quot;RequireEmailVerification&amp;quot;: true,&lt;br /&gt;
        &amp;quot;FeedbackName&amp;quot;: &amp;quot;Beispiel-Chat&amp;quot;,&lt;br /&gt;
        &amp;quot;FeedbackEmail&amp;quot;: &amp;quot;mattermost@beispiel-chat.de&amp;quot;,&lt;br /&gt;
        &amp;quot;FeedbackOrganization&amp;quot;: &amp;quot;Beispiel&amp;quot;,&lt;br /&gt;
        &amp;quot;SMTPUsername&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;SMTPPassword&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;SMTPServer&amp;quot;: &amp;quot;localhost&amp;quot;,&lt;br /&gt;
        &amp;quot;SMTPPort&amp;quot;: &amp;quot;25&amp;quot;,&lt;br /&gt;
        ...&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis &amp;quot;htdocs-ssl&amp;quot; unter &amp;quot;$HOME/doms/beispiel-chat.de&amp;quot; wird eine &amp;quot;.htaccess&amp;quot;-Datei abgelegt, &lt;br /&gt;
die dafür sorgt, dass alle Requests an den Mattermost-Server weitergegeben werden. Dabei verwendet Mattermost&lt;br /&gt;
auch Websocket-Verbindungen (&amp;quot;ws://&amp;quot;). Inhalt der &amp;quot;.htaccess&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    DirectoryIndex disabled&lt;br /&gt;
    RewriteEngine On&lt;br /&gt;
    RewriteBase /&lt;br /&gt;
    &lt;br /&gt;
    RewriteCond %{REQUEST_URI}  ^/api/v1/websocket    [NC,OR]&lt;br /&gt;
    RewriteCond %{HTTP:UPGRADE} ^WebSocket$           [NC,OR]&lt;br /&gt;
    RewriteCond %{HTTP:CONNECTION} ^Upgrade$          [NC]&lt;br /&gt;
    RewriteRule .* ws://xyz00.hostsharing.net:34567%{REQUEST_URI}  [proxy]&lt;br /&gt;
    &lt;br /&gt;
    RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f&lt;br /&gt;
    RewriteRule .* http://xyz00.hostsharing.net:34567%{REQUEST_URI} [proxy]&lt;br /&gt;
    RequestHeader set X-Forwarded-Proto &amp;quot;https&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis &amp;quot;htdocs&amp;quot; wird eine &amp;quot;.htaccess&amp;quot;-Datei abgelegt, die für eine &lt;br /&gt;
Weiterleitung auf das https-Protokoll sorgt:&lt;br /&gt;
&lt;br /&gt;
    Redirect permanent / https://beispiel-chat.de/&lt;br /&gt;
&lt;br /&gt;
== Start des Servers ==&lt;br /&gt;
&lt;br /&gt;
Der Chat-Server lässt sich starten mit:&lt;br /&gt;
&lt;br /&gt;
    cd $HOME/mattermost&lt;br /&gt;
    ./bin/mattermost&lt;br /&gt;
&lt;br /&gt;
Ein kleines Start-Skript könnte so aussehen:&lt;br /&gt;
&lt;br /&gt;
    #!/bin/bash&lt;br /&gt;
    export HOME=/home/pacs/xyz00/users/chat&lt;br /&gt;
    cd $HOME/mattermost&lt;br /&gt;
    rm -f running.pid&lt;br /&gt;
    nohup ./bin/mattermost 1&amp;gt;/dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
    echo $! &amp;gt; running.pid&lt;br /&gt;
&lt;br /&gt;
Zum automatischen Start des Servers bei einem Reboot sollte &lt;br /&gt;
man einen Eintrag &amp;quot;@reboot&amp;quot; in die crontab vornehmen.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
*[https://about.mattermost.com/ Mattermost Homepage (Englisch)]&lt;br /&gt;
*[https://github.com/mattermost/platform git Repository bei Github]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Eigene Daemons]]&lt;/div&gt;</summary>
		<author><name>Opa00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Mattermost_Installieren&amp;diff=5853</id>
		<title>Mattermost Installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Mattermost_Installieren&amp;diff=5853"/>
		<updated>2022-08-06T22:03:46Z</updated>

		<summary type="html">&lt;p&gt;Opa00: an einer stelle vergessen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Über Mattermost ==&lt;br /&gt;
&lt;br /&gt;
Mattermost ist ein Chat-Server unter einer freien MIT Lizenz. Der Server ist in der Programmiersprache [https://de.wikipedia.org/wiki/Go_%28Programmiersprache%29 go] implementiert.&lt;br /&gt;
&lt;br /&gt;
Mattermost ist eine selbst-gehostete Alternative zum Cloud-Dienst [https://de.wikipedia.org/wiki/Slack_(Software) Slack] oder zum proprietären [https://en.wikipedia.org/wiki/HipChat HipChat].&lt;br /&gt;
&lt;br /&gt;
== Vorbereitungen ==&lt;br /&gt;
&lt;br /&gt;
Die hier beschriebene Installation benötigt bei Hostsharing die Paket-Option &amp;quot;individuelle Serverdienste (1 Daemon)&amp;quot;. Im Managed Webspace ist diese Option kostenpflichtig: https://www.hostsharing.net/angebote/managed-webspace/&lt;br /&gt;
&lt;br /&gt;
Auf einem Managed Server melden Sie einfach die kostenlose Option &amp;quot;Eigener Daemon&amp;quot; an. Bei der Anmeldung geben Sie einen User an (dient als Admin/Service-User). Unter dieser User-Kennung läuft später der Mattermost-Server. Der User sollte vor der Anmeldung mit HSAdmin angelegt werden. Als User-Beispiel nutzen wir im Folgenden &amp;quot;xyz00-chat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ebenfalls mit HSAdmin muss eine (Sub-)Domain für den Chat-Dienst aufgeschaltet/angelegt werden. Die Domain muss dem User &amp;quot;xyz00-chat&amp;quot; zugeordnet werden. In dieser Anleitung nutze ich die Domain &amp;quot;beispiel-chat.de&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Weiterhin benötigt Mattermost eine MariaDB- oder eine PostgreSQL-Datenbank. Wir empfehlen PostgreSQL und legen also mit Hilfe von HSAdmin einen PostgreSQL-User (&amp;quot;xyz00_mm_user&amp;quot; mit Passwort &amp;quot;geheim&amp;quot;) und eine Datenbank (&amp;quot;xyz00_mm_db&amp;quot; mit dem Eigentümer &amp;quot;xyz00_mm_user&amp;quot;) an.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Als User &amp;quot;xyz00-chat&amp;quot; lade ich die Software herunter (aktuelle Version am 06.08.2022 ist 7.1.2):&lt;br /&gt;
&lt;br /&gt;
    wget https://releases.mattermost.com/7.1.2/mattermost-7.1.2-linux-amd64.tar.gz&lt;br /&gt;
&lt;br /&gt;
Die tar.gz-Datei wird ausgepackt:&lt;br /&gt;
&lt;br /&gt;
    tar xzf mattermost-7.1.2-linux-amd64.tar.gz&lt;br /&gt;
&lt;br /&gt;
Dann finden wir im $HOME des Users &amp;quot;xyz00-chat&amp;quot; ein Unterverzeichnis &amp;quot;$HOME/mattermost&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration von Mattermost nehmen wir in der Datei $&amp;quot;HOME/mattermost/config/config.json&amp;quot; vor:&lt;br /&gt;
&lt;br /&gt;
Im Abschnitt &amp;quot;ServiceSettings&amp;quot; definieren wir die Parameter &amp;quot;SiteURL&amp;quot;, &amp;quot;WebsocketURL&amp;quot; und &amp;quot;ListenAddress&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;ServiceSettings&amp;quot;: {&lt;br /&gt;
        &amp;quot;SiteURL&amp;quot;: &amp;quot;https://beispiel-chat.de&amp;quot;,&lt;br /&gt;
        &amp;quot;WebsocketURL&amp;quot;: &amp;quot;ws://xyz00.hostsharing.net&amp;quot;,&lt;br /&gt;
        &amp;quot;ListenAddress&amp;quot;: &amp;quot;:34567&amp;quot;,&lt;br /&gt;
        ...&lt;br /&gt;
&lt;br /&gt;
Dabei sei &amp;quot;https://beispiel-chat.de&amp;quot; die Domain, unter der der Chat betrieben werden soll und &amp;quot;34567&amp;quot; der Port,&lt;br /&gt;
der vom Hostsharing-Service für den &amp;quot;Eigenen Daemon&amp;quot; zugewiesen wurde.&lt;br /&gt;
&lt;br /&gt;
Im Abschnitt &amp;quot;TeamSettings&amp;quot; kann für den Chat ein Name vergeben werden:&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;TeamSettings&amp;quot;: {&lt;br /&gt;
        &amp;quot;SiteName&amp;quot;: &amp;quot;Beispiel-Chat&amp;quot;,&lt;br /&gt;
        ...&lt;br /&gt;
   &lt;br /&gt;
Im Abschnitt &amp;quot;SqlSettings&amp;quot; wird die PostgreSQL Datenbank konfiguriert:&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;SqlSettings&amp;quot;: {&lt;br /&gt;
        &amp;quot;DriverName&amp;quot;: &amp;quot;postgres&amp;quot;,&lt;br /&gt;
        &amp;quot;DataSource&amp;quot;: &amp;quot;postgres://xyz00_mm_user:geheim@127.0.0.1:5432/xyz00_mm_db?sslmode=disable\u0026connect_timeout=10&amp;quot;,&lt;br /&gt;
        ...&lt;br /&gt;
&lt;br /&gt;
Weiter noch unter &amp;quot;FileSettings&amp;quot; und &amp;quot;EMailSettings&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;FileSettings&amp;quot;: {&lt;br /&gt;
        &amp;quot;MaxFileSize&amp;quot;: 4096000,&lt;br /&gt;
        &amp;quot;DriverName&amp;quot;: &amp;quot;local&amp;quot;,&lt;br /&gt;
        &amp;quot;Directory&amp;quot;: &amp;quot;./data/&amp;quot;,&lt;br /&gt;
        ...&lt;br /&gt;
&lt;br /&gt;
   &amp;quot;EmailSettings&amp;quot;: {&lt;br /&gt;
        &amp;quot;EnableSignUpWithEmail&amp;quot;: true,&lt;br /&gt;
        &amp;quot;EnableSignInWithEmail&amp;quot;: true,&lt;br /&gt;
        &amp;quot;EnableSignInWithUsername&amp;quot;: true,&lt;br /&gt;
        &amp;quot;SendEmailNotifications&amp;quot;: true,&lt;br /&gt;
        &amp;quot;RequireEmailVerification&amp;quot;: true,&lt;br /&gt;
        &amp;quot;FeedbackName&amp;quot;: &amp;quot;Beispiel-Chat&amp;quot;,&lt;br /&gt;
        &amp;quot;FeedbackEmail&amp;quot;: &amp;quot;mattermost@beispiel-chat.de&amp;quot;,&lt;br /&gt;
        &amp;quot;FeedbackOrganization&amp;quot;: &amp;quot;Beispiel&amp;quot;,&lt;br /&gt;
        &amp;quot;SMTPUsername&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;SMTPPassword&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;SMTPServer&amp;quot;: &amp;quot;localhost&amp;quot;,&lt;br /&gt;
        &amp;quot;SMTPPort&amp;quot;: &amp;quot;25&amp;quot;,&lt;br /&gt;
        ...&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis &amp;quot;htdocs-ssl&amp;quot; unter &amp;quot;$HOME/doms/beispiel-chat.de&amp;quot; wird eine &amp;quot;.htaccess&amp;quot;-Datei abgelegt, &lt;br /&gt;
die dafür sorgt, dass alle Requests an den Mattermost-Server weitergegeben werden. Dabei verwendet Mattermost&lt;br /&gt;
auch Websocket-Verbindungen (&amp;quot;ws://&amp;quot;). Inhalt der &amp;quot;.htaccess&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    DirectoryIndex disabled&lt;br /&gt;
    RewriteEngine On&lt;br /&gt;
    RewriteBase /&lt;br /&gt;
    &lt;br /&gt;
    RewriteCond %{REQUEST_URI}  ^/api/v1/websocket    [NC,OR]&lt;br /&gt;
    RewriteCond %{HTTP:UPGRADE} ^WebSocket$           [NC,OR]&lt;br /&gt;
    RewriteCond %{HTTP:CONNECTION} ^Upgrade$          [NC]&lt;br /&gt;
    RewriteRule .* ws://xyz00.hostsharing.net:34567%{REQUEST_URI}  [proxy]&lt;br /&gt;
    &lt;br /&gt;
    RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f&lt;br /&gt;
    RewriteRule .* http://xyz00.hostsharing.net:34567%{REQUEST_URI} [proxy]&lt;br /&gt;
    RequestHeader set X-Forwarded-Proto &amp;quot;https&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis &amp;quot;htdocs&amp;quot; wird eine &amp;quot;.htaccess&amp;quot;-Datei abgelegt, die für eine &lt;br /&gt;
Weiterleitung auf das https-Protokoll sorgt:&lt;br /&gt;
&lt;br /&gt;
    Redirect permanent / https://beispiel-chat.de/&lt;br /&gt;
&lt;br /&gt;
== Start des Servers ==&lt;br /&gt;
&lt;br /&gt;
Der Chat-Server lässt sich starten mit:&lt;br /&gt;
&lt;br /&gt;
    cd $HOME/mattermost&lt;br /&gt;
    ./bin/mattermost&lt;br /&gt;
&lt;br /&gt;
Ein kleines Start-Skript könnte so aussehen:&lt;br /&gt;
&lt;br /&gt;
    #!/bin/bash&lt;br /&gt;
    export HOME=/home/pacs/xyz00/users/chat&lt;br /&gt;
    cd $HOME/mattermost&lt;br /&gt;
    rm -f running.pid&lt;br /&gt;
    nohup ./bin/mattermost 1&amp;gt;/dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
    echo $! &amp;gt; running.pid&lt;br /&gt;
&lt;br /&gt;
Zum automatischen Start des Servers bei einem Reboot sollte &lt;br /&gt;
man einen Eintrag &amp;quot;@reboot&amp;quot; in die crontab vornehmen.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
*[https://about.mattermost.com/ Mattermost Homepage (Englisch)]&lt;br /&gt;
*[https://github.com/mattermost/platform git Repository bei Github]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Eigene Daemons]]&lt;/div&gt;</summary>
		<author><name>Opa00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Mattermost_Installieren&amp;diff=5852</id>
		<title>Mattermost Installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Mattermost_Installieren&amp;diff=5852"/>
		<updated>2022-08-06T22:01:39Z</updated>

		<summary type="html">&lt;p&gt;Opa00: auf aktuelle version gehoben&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Über Mattermost ==&lt;br /&gt;
&lt;br /&gt;
Mattermost ist ein Chat-Server unter einer freien MIT Lizenz. Der Server ist in der Programmiersprache [https://de.wikipedia.org/wiki/Go_%28Programmiersprache%29 go] implementiert.&lt;br /&gt;
&lt;br /&gt;
Mattermost ist eine selbst-gehostete Alternative zum Cloud-Dienst [https://de.wikipedia.org/wiki/Slack_(Software) Slack] oder zum proprietären [https://en.wikipedia.org/wiki/HipChat HipChat].&lt;br /&gt;
&lt;br /&gt;
== Vorbereitungen ==&lt;br /&gt;
&lt;br /&gt;
Die hier beschriebene Installation benötigt bei Hostsharing die Paket-Option &amp;quot;individuelle Serverdienste (1 Daemon)&amp;quot;. Im Managed Webspace ist diese Option kostenpflichtig: https://www.hostsharing.net/angebote/managed-webspace/&lt;br /&gt;
&lt;br /&gt;
Auf einem Managed Server melden Sie einfach die kostenlose Option &amp;quot;Eigener Daemon&amp;quot; an. Bei der Anmeldung geben Sie einen User an (dient als Admin/Service-User). Unter dieser User-Kennung läuft später der Mattermost-Server. Der User sollte vor der Anmeldung mit HSAdmin angelegt werden. Als User-Beispiel nutzen wir im Folgenden &amp;quot;xyz00-chat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ebenfalls mit HSAdmin muss eine (Sub-)Domain für den Chat-Dienst aufgeschaltet/angelegt werden. Die Domain muss dem User &amp;quot;xyz00-chat&amp;quot; zugeordnet werden. In dieser Anleitung nutze ich die Domain &amp;quot;beispiel-chat.de&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Weiterhin benötigt Mattermost eine MariaDB- oder eine PostgreSQL-Datenbank. Wir empfehlen PostgreSQL und legen also mit Hilfe von HSAdmin einen PostgreSQL-User (&amp;quot;xyz00_mm_user&amp;quot; mit Passwort &amp;quot;geheim&amp;quot;) und eine Datenbank (&amp;quot;xyz00_mm_db&amp;quot; mit dem Eigentümer &amp;quot;xyz00_mm_user&amp;quot;) an.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Als User &amp;quot;xyz00-chat&amp;quot; lade ich die Software herunter (aktuelle Version am 06.08.2022 ist 7.1.2):&lt;br /&gt;
&lt;br /&gt;
    wget https://releases.mattermost.com/7.1.2/mattermost-7.1.2-linux-amd64.tar.gz&lt;br /&gt;
&lt;br /&gt;
Die tar.gz-Datei wird ausgepackt:&lt;br /&gt;
&lt;br /&gt;
    tar xzf mattermost-7.1.2-linux-amd64.tar.gz&lt;br /&gt;
&lt;br /&gt;
Dann finden wir im $HOME des Users &amp;quot;xyz00-chat&amp;quot; ein Unterverzeichnis &amp;quot;$HOME/mattermost&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration von Mattermost nehmen wir in der Datei $&amp;quot;HOME/mattermost/config/config.json&amp;quot; vor:&lt;br /&gt;
&lt;br /&gt;
Im Abschnitt &amp;quot;ServiceSettings&amp;quot; definieren wir die Parameter &amp;quot;SiteURL&amp;quot;, &amp;quot;WebsocketURL&amp;quot; und &amp;quot;ListenAddress&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;ServiceSettings&amp;quot;: {&lt;br /&gt;
        &amp;quot;SiteURL&amp;quot;: &amp;quot;https://beispiel-chat.de&amp;quot;,&lt;br /&gt;
        &amp;quot;WebsocketURL&amp;quot;: &amp;quot;ws://xyz00.hostsharing.net&amp;quot;,&lt;br /&gt;
        &amp;quot;ListenAddress&amp;quot;: &amp;quot;:34567&amp;quot;,&lt;br /&gt;
        ...&lt;br /&gt;
&lt;br /&gt;
Dabei sei &amp;quot;https://beispiel-chat.de&amp;quot; die Domain, unter der der Chat betrieben werden soll und &amp;quot;34567&amp;quot; der Port,&lt;br /&gt;
der vom Hostsharing-Service für den &amp;quot;Eigenen Daemon&amp;quot; zugewiesen wurde.&lt;br /&gt;
&lt;br /&gt;
Im Abschnitt &amp;quot;TeamSettings&amp;quot; kann für den Chat ein Name vergeben werden:&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;TeamSettings&amp;quot;: {&lt;br /&gt;
        &amp;quot;SiteName&amp;quot;: &amp;quot;Beispiel-Chat&amp;quot;,&lt;br /&gt;
        ...&lt;br /&gt;
   &lt;br /&gt;
Im Abschnitt &amp;quot;SqlSettings&amp;quot; wird die PostgreSQL Datenbank konfiguriert:&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;SqlSettings&amp;quot;: {&lt;br /&gt;
        &amp;quot;DriverName&amp;quot;: &amp;quot;postgres&amp;quot;,&lt;br /&gt;
        &amp;quot;DataSource&amp;quot;: &amp;quot;postgres://xyz00_mm_user:geheim@127.0.0.1:5432/xyz00_mm_db?sslmode=disable\u0026connect_timeout=10&amp;quot;,&lt;br /&gt;
        ...&lt;br /&gt;
&lt;br /&gt;
Weiter noch unter &amp;quot;FileSettings&amp;quot; und &amp;quot;EMailSettings&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;FileSettings&amp;quot;: {&lt;br /&gt;
        &amp;quot;MaxFileSize&amp;quot;: 4096000,&lt;br /&gt;
        &amp;quot;DriverName&amp;quot;: &amp;quot;local&amp;quot;,&lt;br /&gt;
        &amp;quot;Directory&amp;quot;: &amp;quot;./data/&amp;quot;,&lt;br /&gt;
        ...&lt;br /&gt;
&lt;br /&gt;
   &amp;quot;EmailSettings&amp;quot;: {&lt;br /&gt;
        &amp;quot;EnableSignUpWithEmail&amp;quot;: true,&lt;br /&gt;
        &amp;quot;EnableSignInWithEmail&amp;quot;: true,&lt;br /&gt;
        &amp;quot;EnableSignInWithUsername&amp;quot;: true,&lt;br /&gt;
        &amp;quot;SendEmailNotifications&amp;quot;: true,&lt;br /&gt;
        &amp;quot;RequireEmailVerification&amp;quot;: true,&lt;br /&gt;
        &amp;quot;FeedbackName&amp;quot;: &amp;quot;Beispiel-Chat&amp;quot;,&lt;br /&gt;
        &amp;quot;FeedbackEmail&amp;quot;: &amp;quot;mattermost@beispiel-chat.de&amp;quot;,&lt;br /&gt;
        &amp;quot;FeedbackOrganization&amp;quot;: &amp;quot;Beispiel&amp;quot;,&lt;br /&gt;
        &amp;quot;SMTPUsername&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;SMTPPassword&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;SMTPServer&amp;quot;: &amp;quot;localhost&amp;quot;,&lt;br /&gt;
        &amp;quot;SMTPPort&amp;quot;: &amp;quot;25&amp;quot;,&lt;br /&gt;
        ...&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis &amp;quot;htdocs-ssl&amp;quot; unter &amp;quot;$HOME/doms/beispiel-chat.de&amp;quot; wird eine &amp;quot;.htaccess&amp;quot;-Datei abgelegt, &lt;br /&gt;
die dafür sorgt, dass alle Requests an den Mattermost-Server weitergegeben werden. Dabei verwendet Mattermost&lt;br /&gt;
auch Websocket-Verbindungen (&amp;quot;ws://&amp;quot;). Inhalt der &amp;quot;.htaccess&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    DirectoryIndex disabled&lt;br /&gt;
    RewriteEngine On&lt;br /&gt;
    RewriteBase /&lt;br /&gt;
    &lt;br /&gt;
    RewriteCond %{REQUEST_URI}  ^/api/v1/websocket    [NC,OR]&lt;br /&gt;
    RewriteCond %{HTTP:UPGRADE} ^WebSocket$           [NC,OR]&lt;br /&gt;
    RewriteCond %{HTTP:CONNECTION} ^Upgrade$          [NC]&lt;br /&gt;
    RewriteRule .* ws://xyz00.hostsharing.net:34567%{REQUEST_URI}  [proxy]&lt;br /&gt;
    &lt;br /&gt;
    RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f&lt;br /&gt;
    RewriteRule .* http://xyz00.hostsharing.net:34567%{REQUEST_URI} [proxy]&lt;br /&gt;
    RequestHeader set X-Forwarded-Proto &amp;quot;https&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis &amp;quot;htdocs&amp;quot; wird eine &amp;quot;.htaccess&amp;quot;-Datei abgelegt, die für eine &lt;br /&gt;
Weiterleitung auf das https-Protokoll sorgt:&lt;br /&gt;
&lt;br /&gt;
    Redirect permanent / https://beispiel-chat.de/&lt;br /&gt;
&lt;br /&gt;
== Start des Servers ==&lt;br /&gt;
&lt;br /&gt;
Der Chat-Server lässt sich starten mit:&lt;br /&gt;
&lt;br /&gt;
    cd $HOME/mattermost&lt;br /&gt;
    ./bin/mattermost&lt;br /&gt;
&lt;br /&gt;
Ein kleines Start-Skript könnte so aussehen:&lt;br /&gt;
&lt;br /&gt;
    #!/bin/bash&lt;br /&gt;
    export HOME=/home/pacs/xyz00/users/chat&lt;br /&gt;
    cd $HOME/mattermost&lt;br /&gt;
    rm -f running.pid&lt;br /&gt;
    nohup ./bin/platform 1&amp;gt;/dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
    echo $! &amp;gt; running.pid&lt;br /&gt;
&lt;br /&gt;
Zum automatischen Start des Servers bei einem Reboot sollte &lt;br /&gt;
man einen Eintrag &amp;quot;@reboot&amp;quot; in die crontab vornehmen.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
*[https://about.mattermost.com/ Mattermost Homepage (Englisch)]&lt;br /&gt;
*[https://github.com/mattermost/platform git Repository bei Github]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Eigene Daemons]]&lt;/div&gt;</summary>
		<author><name>Opa00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Diskussion:CAS_Authentication_Server&amp;diff=5351</id>
		<title>Diskussion:CAS Authentication Server</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Diskussion:CAS_Authentication_Server&amp;diff=5351"/>
		<updated>2021-01-07T05:10:53Z</updated>

		<summary type="html">&lt;p&gt;Opa00: /* Notwendige Änderungen für CAS 6.3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aktuell anzupassen:&lt;br /&gt;
&lt;br /&gt;
* CAS Version ist 6.1.3&lt;br /&gt;
* Build mit Gradle&lt;br /&gt;
* Tomcat &amp;gt; 9.0.23 erforderlich&lt;br /&gt;
&lt;br /&gt;
== Notwendige Änderungen für CAS 6.3 ==&lt;br /&gt;
&lt;br /&gt;
* ./build.sh muss durch ./gradlew clean build ersetzt werden&lt;br /&gt;
* der ajp Connector in server.xml muss entweder secretRequired=&amp;quot;false&amp;quot; oder ein secret=&amp;quot;...&amp;quot; bekommen. vgl: https://tomcat.apache.org/tomcat-9.0-doc/config/ajp.html&lt;br /&gt;
* RewriteRule unterstützt secrets aber scheinbar nicht - entsprechend müsste ProxyPass verwendet werden (in .htaccess aber scheinbar nicht möglich) -&amp;gt; daher wohl eher ohne secret arbeiten&lt;br /&gt;
* implementation &amp;quot;org.apereo.cas:cas-server-support-json-service-registry:${project.&#039;cas.version&#039;}&amp;quot; (compile ist deprecated)&lt;/div&gt;</summary>
		<author><name>Opa00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Diskussion:CAS_Authentication_Server&amp;diff=5350</id>
		<title>Diskussion:CAS Authentication Server</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Diskussion:CAS_Authentication_Server&amp;diff=5350"/>
		<updated>2021-01-07T04:17:58Z</updated>

		<summary type="html">&lt;p&gt;Opa00: /* Notwendige Änderungen für CAS 6.3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aktuell anzupassen:&lt;br /&gt;
&lt;br /&gt;
* CAS Version ist 6.1.3&lt;br /&gt;
* Build mit Gradle&lt;br /&gt;
* Tomcat &amp;gt; 9.0.23 erforderlich&lt;br /&gt;
&lt;br /&gt;
== Notwendige Änderungen für CAS 6.3 ==&lt;br /&gt;
&lt;br /&gt;
* ./build.sh muss durch ./gradlew clean build ersetzt werden&lt;br /&gt;
* der ajp Connector in server.xml muss entweder secretRequired=&amp;quot;false&amp;quot; oder ein secret=&amp;quot;...&amp;quot; bekommen. vgl: https://tomcat.apache.org/tomcat-9.0-doc/config/ajp.html&lt;br /&gt;
* RewriteRule unterstützt secrets aber scheinbar nicht - entsprechend müsste ProxyPass verwendet werden (in .htaccess aber scheinbar nicht möglich) -&amp;gt; daher wohl eher ohne secret arbeiten&lt;/div&gt;</summary>
		<author><name>Opa00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Diskussion:CAS_Authentication_Server&amp;diff=5349</id>
		<title>Diskussion:CAS Authentication Server</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Diskussion:CAS_Authentication_Server&amp;diff=5349"/>
		<updated>2021-01-07T04:06:05Z</updated>

		<summary type="html">&lt;p&gt;Opa00: /* Notwendige Änderungen für CAS 7.3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aktuell anzupassen:&lt;br /&gt;
&lt;br /&gt;
* CAS Version ist 6.1.3&lt;br /&gt;
* Build mit Gradle&lt;br /&gt;
* Tomcat &amp;gt; 9.0.23 erforderlich&lt;br /&gt;
&lt;br /&gt;
== Notwendige Änderungen für CAS 6.3 ==&lt;br /&gt;
&lt;br /&gt;
* ./build.sh muss durch ./gradlew clean build ersetzt werden&lt;br /&gt;
* der ajp Connector in server.xml muss entweder secretRequired=&amp;quot;false&amp;quot; (vmtl eher nicht empfohlen?) oder ein secret=&amp;quot;...&amp;quot; bekommen. vgl: https://tomcat.apache.org/tomcat-9.0-doc/config/ajp.html&lt;br /&gt;
* RewriteRule unterstützt secrets aber scheinbar nicht - entsprechend müsste ProxyPass verwendet werden (in .htaccess aber scheinbar nicht möglich) -&amp;gt; daher wohl eher ohne secret arbeiten&lt;/div&gt;</summary>
		<author><name>Opa00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Diskussion:CAS_Authentication_Server&amp;diff=5348</id>
		<title>Diskussion:CAS Authentication Server</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Diskussion:CAS_Authentication_Server&amp;diff=5348"/>
		<updated>2021-01-07T04:05:18Z</updated>

		<summary type="html">&lt;p&gt;Opa00: Neuer Abschnitt /* Notwendige Änderungen für CAS 7.3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aktuell anzupassen:&lt;br /&gt;
&lt;br /&gt;
* CAS Version ist 6.1.3&lt;br /&gt;
* Build mit Gradle&lt;br /&gt;
* Tomcat &amp;gt; 9.0.23 erforderlich&lt;br /&gt;
&lt;br /&gt;
== Notwendige Änderungen für CAS 7.3 ==&lt;br /&gt;
&lt;br /&gt;
* ./build.sh muss durch ./gradlew clean build ersetzt werden&lt;br /&gt;
* der ajp Connector in server.xml muss entweder secretRequired=&amp;quot;false&amp;quot; (vmtl eher nicht empfohlen?) oder ein secret=&amp;quot;...&amp;quot; bekommen. vgl: https://tomcat.apache.org/tomcat-9.0-doc/config/ajp.html&lt;br /&gt;
* RewriteRule unterstützt secrets aber scheinbar nicht - entsprechend müsste ProxyPass verwendet werden (in .htaccess aber scheinbar nicht möglich) -&amp;gt; daher wohl eher ohne secret arbeiten&lt;/div&gt;</summary>
		<author><name>Opa00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Diskussion:Mailman_3_installieren&amp;diff=5347</id>
		<title>Diskussion:Mailman 3 installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Diskussion:Mailman_3_installieren&amp;diff=5347"/>
		<updated>2021-01-05T07:00:52Z</updated>

		<summary type="html">&lt;p&gt;Opa00: Neuer Abschnitt /* Pfad ist inkonsistent  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Pfad ist inkonsistent  ==&lt;br /&gt;
&lt;br /&gt;
Müsste &lt;br /&gt;
  ~/mailman-suite/mailman-suite_project/settings_local.py &lt;br /&gt;
nicht eigentlich &lt;br /&gt;
  ~/mailman/mailman-suite/mailman-suite_project/settings_local.py &lt;br /&gt;
sein?&lt;/div&gt;</summary>
		<author><name>Opa00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Mailman_3_installieren&amp;diff=5346</id>
		<title>Mailman 3 installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Mailman_3_installieren&amp;diff=5346"/>
		<updated>2021-01-05T06:33:12Z</updated>

		<summary type="html">&lt;p&gt;Opa00: Änderung 5345 von Opa00 (Diskussion) rückgängig gemacht.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die folgende Anleitung zur Installation von Mailman 3 auf Hostsharing geht davon aus, dass als Domäne &#039;&#039;lists.example.org&#039;&#039; und als Domänennutzer &#039;&#039;xyz00-lists&#039;&#039; verwendet wird. Es ist zu empfehlen, auszuführende Befehle und Konfigurationen vorab auf zu ersetzende Werte zu prüfen. Alle Befehle sind als Benutzer &#039;&#039;xyz00-lists&#039;&#039; zu starten. Damit mehrere aufeinander folgende Shell-Kommandos leichter kopiert werden können, wird nur vor das jeweils erste Kommando ein &#039;&#039;$&#039;&#039; gesetzt. Zum Verständnis mancher der folgenden Anweisungen kann es hilfreich sein, die [https://mailman.readthedocs.io/ Mailman-Dokumentation] gelesen und sich mit [https://pipenv.readthedocs.io/en/latest/ Pipenv] beschäftigt zu haben.&lt;br /&gt;
&lt;br /&gt;
Achtung: Mailman 3 benötigt zahlreiche Hintergrundprozesse, was beim Managed Webspace zusätzliche Kosten verursacht.&lt;br /&gt;
&lt;br /&gt;
== Datenbank ==&lt;br /&gt;
Zunächst muss eine PostgreSQL- oder MySQL-Datenbank angelegt werden. (Mailman läuft auch mit SQLite, ist aber für den Produktivbetrieb nicht empfohlen.) Je nach gewählter Datenbank unterscheiden sich manche Schritte geringfügig, was an den entsprechenden Stellen dokumentiert ist.&lt;br /&gt;
&lt;br /&gt;
== Mailman Core ==&lt;br /&gt;
Für die Installation von Mailman Core sind folgende Kommandos auszuführen:&lt;br /&gt;
 $ pip3 install --user pipenv&lt;br /&gt;
 echo &#039;export PATH=&amp;quot;$HOME/.local/bin:$PATH&amp;quot;&#039; &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
 source ~/.profile&lt;br /&gt;
 mkdir ~/mailman&lt;br /&gt;
 cd ~/mailman&lt;br /&gt;
 pipenv install mailman mailman-hyperkitty&lt;br /&gt;
 pipenv install psycopg2-binary # Für PostgreSQL&lt;br /&gt;
 pipenv install pymsql # Für MySQL&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend wird das Verzeichnis für die Konfigurationsdatei angelegt:&lt;br /&gt;
 $ mkdir -p ~/mailman/var/etc&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration wird in die Datei &amp;lt;code&amp;gt;~/mailman/var/etc/mailman.cfg&amp;lt;/code&amp;gt; geschrieben:&lt;br /&gt;
 [mailman]&lt;br /&gt;
 site_owner: admin@example.org&lt;br /&gt;
 default_language: de&lt;br /&gt;
 &lt;br /&gt;
 [database] # https://mailman.readthedocs.io/en/latest/src/mailman/docs/database.html&lt;br /&gt;
 class: mailman.database.postgresql.PostgreSQLDatabase&lt;br /&gt;
 url: postgres://myuser:mypassword@mypghost/mailman&lt;br /&gt;
 # Fallls MySQL verwendet:&lt;br /&gt;
 #class: mailman.database.mysql.MySQLDatabase&lt;br /&gt;
 #url: mysql+pymysql://myuser:mypassword@mymysqlhost/mailman?charset=utf8&amp;amp;use_unicode=1&lt;br /&gt;
 # SQLite ist Standard, wenn nichts konfiguriert ist&lt;br /&gt;
 &lt;br /&gt;
 [webservice] # REST Service von Mailman. Wird von [[#Web_Frontend|Web Frontend]] verwendet&lt;br /&gt;
 port: 8001 # ändern, falls belegt&lt;br /&gt;
 admin_user: restadmin&lt;br /&gt;
 admin_pass: restpass&lt;br /&gt;
 &lt;br /&gt;
 [mta]&lt;br /&gt;
 smtp_host: xyz00.hostsharing.net&lt;br /&gt;
 smtp_port: 4587&lt;br /&gt;
 smtp_user: xyz00-lists&lt;br /&gt;
 smtp_pass: secret&lt;br /&gt;
 smtp_secure_mode: starttls&lt;br /&gt;
 verp_confirm_format: $address # VERP ist nicht möglich, da [https://de.wikipedia.org/wiki/Mail_Transfer_Agent MTA] nicht selbst konfiguriert werden kann&lt;br /&gt;
 # https://mailman.readthedocs.io/en/latest/src/mailman/docs/mta.html&lt;br /&gt;
 incoming: mailman.mta.null.NullMTA # NullMTA, da MTA MTA nicht selbst konfiguriert werden kann&lt;br /&gt;
 lmtp_port: 8024 # ändern, falls belegt&lt;br /&gt;
 &lt;br /&gt;
 [runner.nntp]&lt;br /&gt;
 start: no # Runner für [https://de.wikipedia.org/wiki/Network_News_Transfer_Protocol NNTP] Gateway ausschalten&lt;br /&gt;
 &lt;br /&gt;
 [archiver.hyperkitty]&lt;br /&gt;
 class: mailman_hyperkitty.Archiver&lt;br /&gt;
 enable: yes&lt;br /&gt;
 # $HOME muss durch den tatsächlichen Pfad zum Benutzerverzeichnis ersetzt werden&lt;br /&gt;
 configuration: $HOME/mailman/var/etc/mailman-hyperkitty.cfg&lt;br /&gt;
&lt;br /&gt;
Zugriffsrechte einschränken:&lt;br /&gt;
 $ chmod 0600 ~/mailman/var/etc/mailman.cfg&lt;br /&gt;
&lt;br /&gt;
Damit Hyperkitty als [[#Web_Frontend|Web Frontend]] für das Archiv verwendet werden kann, ist in die Datei &amp;lt;code&amp;gt;~/mailman/var/etc/mailman-hyperkitty.cfg&amp;lt;/code&amp;gt; Foglendes zu schreiben:&lt;br /&gt;
 [general]&lt;br /&gt;
 base_url: &amp;lt;nowiki&amp;gt;https://lists.example.org/hyperkitty/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 # Muss identisch mit Key in Hyperkitty sein&lt;br /&gt;
 api_key: SecretArchiverAPIKey&lt;br /&gt;
&lt;br /&gt;
Zugriffsrechte einschränken:&lt;br /&gt;
 $ chmod 0600 ~/mailman/var/etc/mailman-hyperkitty.cfg&lt;br /&gt;
&lt;br /&gt;
Kommando &#039;&#039;mailman&#039;&#039; anlegen:&lt;br /&gt;
 $ cat &amp;lt;&amp;lt;&#039;EOD&#039; &amp;gt;~/.local/bin/mailman&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 &lt;br /&gt;
 cd ~/mailman&lt;br /&gt;
 pipenv run mailman &amp;quot;$@&amp;quot;&lt;br /&gt;
 EOD&lt;br /&gt;
 &lt;br /&gt;
 chmod +x ~/.local/bin/mailman&lt;br /&gt;
&lt;br /&gt;
Nun kann mit &amp;lt;code&amp;gt;mailman info&amp;lt;/code&amp;gt; nochmal die aktuelle Konfiguration geprüft werden.&lt;br /&gt;
Danach kann Mailman gestartet werden:&lt;br /&gt;
 $ mailman start&lt;br /&gt;
&lt;br /&gt;
== Web Frontend ==&lt;br /&gt;
In diesem Abschnitt wird die Installation des Web Frontends beschrieben.&lt;br /&gt;
&lt;br /&gt;
Zunächst werden die Redirects aus der &amp;lt;code&amp;gt;.htaccess&amp;lt;/code&amp;gt; gelöscht:&lt;br /&gt;
 $ echo &amp;quot;&amp;quot; &amp;gt; ~/doms/lists.example.org/htdocs-ssl/.htaccess&lt;br /&gt;
&lt;br /&gt;
Anschließend werden die erforderlichen Python-Pakete installiert:&lt;br /&gt;
 $ cd ~/mailman&lt;br /&gt;
 pipenv install whoosh postorius hyperkitty&lt;br /&gt;
&lt;br /&gt;
Um Plattenplatz freizugeben, kann optional der Pip Cache gelöscht werden:&lt;br /&gt;
 $ rm -r ~/.cache/pip*&lt;br /&gt;
&lt;br /&gt;
Nun werden die Dateien geladen, mit denen Postorius und Hyperkitty konfiguriert und gestartet werden:&lt;br /&gt;
 $ git clone https://gitlab.com/mailman/mailman-suite.git&lt;br /&gt;
&lt;br /&gt;
Zur Konfiguration von Hyperkitty wird die IP-Adresse benötigt, von der die Anfragen von Mailman Core kommen. Diese kann wie folgt ermittelt werden:&lt;br /&gt;
 $ cat &amp;lt;&amp;lt;EOD &amp;gt;~/doms/lists.example.org/htdocs-ssl/ip.php&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 echo $_SERVER[&#039;REMOTE_ADDR&#039;] . &amp;quot;\n&amp;quot;;&lt;br /&gt;
 EOD&lt;br /&gt;
 curl &amp;lt;nowiki&amp;gt;https://lists.example.org/ip.php&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 rm ~/doms/lists.example.org/htdocs-ssl/ip.php&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration wird nun in Die Datei &amp;lt;code&amp;gt;~/mailman-suite/mailman-suite_project/settings_local.py&amp;lt;/code&amp;gt; geschrieben:&lt;br /&gt;
 SECRET_KEY = &#039;change-this-on-your-production-server&#039;&lt;br /&gt;
 Debug = False&lt;br /&gt;
 ADMINS = (&lt;br /&gt;
      (&#039;Mailman Suite Admin&#039;, &#039;admin@example.org&#039;),&lt;br /&gt;
 )&lt;br /&gt;
 ALLOWED_HOSTS = [&lt;br /&gt;
     &#039;lists.example.org&#039;,&lt;br /&gt;
 ]&lt;br /&gt;
 MAILMAN_REST_API_URL = &#039;&amp;lt;nowiki&amp;gt;http://localhost:8001&amp;lt;/nowiki&amp;gt;&#039;&lt;br /&gt;
 MAILMAN_REST_API_USER = &#039;restadmin&#039;&lt;br /&gt;
 MAILMAN_REST_API_PASS = &#039;restpass&#039;&lt;br /&gt;
 MAILMAN_ARCHIVER_KEY = &#039;SecretArchiverAPIKey&#039;&lt;br /&gt;
 MAILMAN_ARCHIVER_FROM = (&#039;&amp;lt;IP von Mailman Core&amp;gt;&#039;)&lt;br /&gt;
 &lt;br /&gt;
 # Authentifizierung über externe Dienste ausschalten (s. django-allauth)&lt;br /&gt;
 from settings import INSTALLED_APPS&lt;br /&gt;
 INSTALLED_APPS = filter(lambda app: not app.startswith(&#039;allauth.socialaccount.&#039;) and app != &#039;django_mailman3.lib.auth.fedora&#039;, INSTALLED_APPS)&lt;br /&gt;
 INSTALLED_APPS = (&lt;br /&gt;
     &#039;hyperkitty&#039;,&lt;br /&gt;
     &#039;postorius&#039;,&lt;br /&gt;
     &#039;django_mailman3&#039;,&lt;br /&gt;
     # Uncomment the next line to enable the admin:&lt;br /&gt;
     &#039;django.contrib.admin&#039;,&lt;br /&gt;
     # Uncomment the next line to enable admin documentation:&lt;br /&gt;
     # &#039;django.contrib.admindocs&#039;,&lt;br /&gt;
     &#039;django.contrib.auth&#039;,&lt;br /&gt;
     &#039;django.contrib.contenttypes&#039;,&lt;br /&gt;
     &#039;django.contrib.sessions&#039;,&lt;br /&gt;
     &#039;django.contrib.sites&#039;,&lt;br /&gt;
     &#039;django.contrib.messages&#039;,&lt;br /&gt;
     &#039;django.contrib.staticfiles&#039;,&lt;br /&gt;
     &#039;rest_framework&#039;,&lt;br /&gt;
     &#039;django_gravatar&#039;,&lt;br /&gt;
     &#039;compressor&#039;,&lt;br /&gt;
     &#039;haystack&#039;,&lt;br /&gt;
     &#039;django_extensions&#039;,&lt;br /&gt;
     &#039;django_q&#039;,&lt;br /&gt;
     &#039;allauth&#039;,&lt;br /&gt;
     &#039;allauth.account&#039;,&lt;br /&gt;
     &#039;allauth.socialaccount&#039;,&lt;br /&gt;
 )&lt;br /&gt;
 &lt;br /&gt;
 # Standardkonfiguration verwendet SQLite&lt;br /&gt;
 DATABASES = {&lt;br /&gt;
     &#039;default&#039;: {&lt;br /&gt;
         &#039;ENGINE&#039;: &#039;django.db.backends.postgresql_psycopg2&#039;, # Für MySQL: django.db.backends.mysql&lt;br /&gt;
         &#039;HOST&#039;: &#039;localhost&#039;,&lt;br /&gt;
         &#039;NAME&#039;: &#039;database_name&#039;,&lt;br /&gt;
         &#039;USER&#039;: &#039;database_user&#039;,&lt;br /&gt;
         &#039;PASSWORD&#039;: &#039;database_password&#039;,&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 LANGUAGE_CODE = &#039;de-de&#039;&lt;br /&gt;
 TIME_ZONE = &#039;Europe/Berlin&#039;&lt;br /&gt;
 DEFAULT_FROM_EMAIL = &#039;mailing-lists@example.org&#039;&lt;br /&gt;
 SERVER_EMAIL = &#039;mailing-lists@example.org&#039;&lt;br /&gt;
 EMAIL_BACKEND = &#039;django.core.mail.backends.smtp.EmailBackend&#039;&lt;br /&gt;
 EMAIL_HOST = &#039;xyz00.hostsharing.net&#039;&lt;br /&gt;
 EMAIL_PORT = 4587&lt;br /&gt;
 EMAIL_USE_TLS = True&lt;br /&gt;
 EMAIL_HOST_USER = &#039;xyz00-lists&#039;&lt;br /&gt;
 EMAIL_HOST_PASSWORD = &#039;secret&#039;&lt;br /&gt;
 EMAIL_TIMEOUT = 60&lt;br /&gt;
 &lt;br /&gt;
 ACCOUNT_DEFAULT_HTTP_PROTOCOL = &#039;https&#039;&lt;br /&gt;
 &lt;br /&gt;
 COMPRESS_PRECOMPILERS = (&lt;br /&gt;
    (&#039;text/less&#039;, &#039;lessc {infile} {outfile}&#039;),&lt;br /&gt;
    (&#039;text/x-scss&#039;, &#039;sass -t compressed {infile} {outfile}&#039;),&lt;br /&gt;
    (&#039;text/x-sass&#039;, &#039;sass -t compressed {infile} {outfile}&#039;),&lt;br /&gt;
 )&lt;br /&gt;
 COMPRESS_OFFLINE = True&lt;br /&gt;
 &lt;br /&gt;
 # Workeranzahl reduzieren (optional)&lt;br /&gt;
 Q_CLUSTER = {&lt;br /&gt;
     &#039;workers&#039;: 1,&lt;br /&gt;
     &#039;timeout&#039;: 300,&lt;br /&gt;
     &#039;save_limit&#039;: 100,&lt;br /&gt;
     &#039;orm&#039;: &#039;default&#039;,&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Hinweis: Die Einstellungen in &amp;lt;code&amp;gt;settings_local.py&amp;lt;/code&amp;gt; überschreiben solche in &amp;lt;code&amp;gt;settings.py&amp;lt;/code&amp;gt;. Zwar kann &amp;lt;code&amp;gt;settings.py&amp;lt;/code&amp;gt; auch direkt angepasst werden, auf diese Weise werden jedoch mögliche Konflikte beim Update vermieden. &amp;lt;code&amp;gt;settings.py&amp;lt;/code&amp;gt; sollte dennoch dahingehend geprüft werden, ob man ggf. weitere Optionen ändern möchte.&lt;br /&gt;
&lt;br /&gt;
Das Mailman Web Frontend nutzt das Framework Django. Einige der Einstellungen sind in der [https://docs.djangoproject.com/en/2.2/ref/settings/ Dokumentation von Django] beschrieben, andere konfigurieren eine der in &amp;lt;code&amp;gt;INSTALLED_APPS&amp;lt;/code&amp;gt; definierten Anwendungen.&lt;br /&gt;
&lt;br /&gt;
Damit per Django verfügbare Kommandos leicht ausgeführt werden können, wird der Befehl &#039;&#039;mailman-django&#039;&#039; eingerichtet:&lt;br /&gt;
 $ cat &amp;lt;&amp;lt;&#039;EOD&#039; &amp;gt;~/.local/bin/mailman-django&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 &lt;br /&gt;
 cd ~/mailman&lt;br /&gt;
 pipenv run mailman-suite/mailman-suite_project/manage.py &amp;quot;$@&amp;quot;&lt;br /&gt;
 EOD&lt;br /&gt;
 &lt;br /&gt;
 chmod +x ~/.local/bin/mailman-django&lt;br /&gt;
&lt;br /&gt;
Anschließend können folgende Kommandos ausgeführt werden:&lt;br /&gt;
 $ mailman-django migrate&lt;br /&gt;
 mailman-django collectstatic&lt;br /&gt;
 mailman-django compress&lt;br /&gt;
 mailman-django createsuperuser&lt;br /&gt;
&lt;br /&gt;
Nun müssen die statischen Dateien für das Web Frontend noch per HTTPS verfügbar gemacht werden:&lt;br /&gt;
 $ ln -s ~/mailman/mailman-suite/mailman-suite_project/static ~/doms/lists.example.org/htdocs-ssl/&lt;br /&gt;
&lt;br /&gt;
Damit das Web Frontend per [[Phusion_Passenger|Phusion Passenger]] geladen werden kann:&lt;br /&gt;
 $ cat &amp;lt;&amp;lt;EOD &amp;gt;~/doms/lists.example.org/app-ssl/passenger_wsgi.py&lt;br /&gt;
 import os&lt;br /&gt;
 import subprocess&lt;br /&gt;
 import sys&lt;br /&gt;
 &lt;br /&gt;
 os.environ[&#039;LANG&#039;] = &#039;C.UTF-8&#039;&lt;br /&gt;
 os.environ[&#039;LC_ALL&#039;] = &#039;C.UTF-8&#039;&lt;br /&gt;
 &lt;br /&gt;
 HOME = os.getenv(&#039;HOME&#039;)&lt;br /&gt;
 PIPENV = os.path.join(HOME, &#039;.local&#039;, &#039;bin&#039;, &#039;pipenv&#039;)&lt;br /&gt;
 PIPFILE_DIR = os.path.join(HOME, &#039;mailman&#039;)&lt;br /&gt;
 INTERP = subprocess.check_output([PIPENV, &#039;run&#039;, &#039;which&#039;, &#039;python&#039;], cwd=PIPFILE_DIR).strip().decode(&#039;utf-8&#039;)&lt;br /&gt;
 if sys.executable != INTERP:&lt;br /&gt;
     os.execl(INTERP, INTERP, *sys.argv)&lt;br /&gt;
 &lt;br /&gt;
 WSGI_DIR = os.path.join(HOME, &#039;mailman&#039;, &#039;mailman-suite&#039;, &#039;mailman-suite_project&#039;)&lt;br /&gt;
 sys.path.append(WSGI_DIR)&lt;br /&gt;
 &lt;br /&gt;
 from wsgi import application&lt;br /&gt;
 EOD&lt;br /&gt;
&lt;br /&gt;
Nun steht das Web Frontend unter &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://lists.example.org/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; zur Verfügung. Über die Django Administration sollte unter &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://lists.example.org/admin/sites/site/1/change/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; die Domäne angepasst werden.&lt;br /&gt;
&lt;br /&gt;
== Cron Jobs ==&lt;br /&gt;
Es sind verschiedene Cron Jobs erforderlich. Hierzu &amp;lt;code&amp;gt;crontab -e&amp;lt;/code&amp;gt; ausführen und Folgendes eintragen:&lt;br /&gt;
 # An die in MAILTO eingetragene Adressen werden Ausgaben der Cron Jobs gesendet (optional)&lt;br /&gt;
 #MAILTO=admin@example.org&lt;br /&gt;
 PATH=$HOME/.local/bin:$PATH&lt;br /&gt;
 &lt;br /&gt;
 @reboot mailman start&lt;br /&gt;
 &lt;br /&gt;
 # Send periodic digests.&lt;br /&gt;
 @daily mailman digests --send&lt;br /&gt;
 &lt;br /&gt;
 @reboot mailman-django qcluster&lt;br /&gt;
 # Alternativ qcluster minütlich ausführen&lt;br /&gt;
 # * * * * * mailman-django qcluster --run-once&lt;br /&gt;
 &lt;br /&gt;
 * * * * * mailman-django runjobs minutely&lt;br /&gt;
 2,17,32,47 * * * * mailman-django runjobs quarter_hourly&lt;br /&gt;
 @hourly  mailman-django runjobs hourly&lt;br /&gt;
 @daily   mailman-django runjobs daily&lt;br /&gt;
 @weekly  mailman-django runjobs weekly&lt;br /&gt;
 @monthly mailman-django runjobs monthly&lt;br /&gt;
 @yearly  mailman-django runjobs yearly&lt;br /&gt;
&lt;br /&gt;
Hinweis: Der Einfachheit halber wird hier für &#039;&#039;mailman start&#039;&#039; und &#039;&#039;qcluster&#039;&#039; &amp;lt;code&amp;gt;@reboot&amp;lt;/code&amp;gt; verwendet. Besser wäre der Einsatz von monit. Beim Einsatz von monit würde sich auch der Neustart der Dienste nach einem [[#Update|Update]] ändern. (Anleitung gerne anpassen, sollte jemand monit einrichten.)&lt;br /&gt;
&lt;br /&gt;
== Mails an Mailman weiterleiten ==&lt;br /&gt;
Da die MTA-Konfiguration nicht direkt angepasst werden kann, ist ein Hilfskonstrukt erforderlich: Mittels &#039;&#039;.forward-Dateien&#039;&#039; werden eingehende Mails an das Programm msmtp weitergeleitet, welches diese per [https://de.wikipedia.org/wiki/Local_Mail_Transfer_Protocol LMTP] bei Mailman abliefert.&lt;br /&gt;
&lt;br /&gt;
msmtp kann wie folgt installiert werden:&lt;br /&gt;
 $ MSMTP_VERSION=1.8.6 # ggf. aktualisieren&lt;br /&gt;
 wget &amp;lt;nowiki&amp;gt;https://marlam.de/msmtp/releases/msmtp-$MSMTP_VERSION.tar.xz&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 tar xf msmtp-$MSMTP_VERSION.tar.xz&lt;br /&gt;
 cd msmtp-$MSMTP_VERSION&lt;br /&gt;
 ./configure --without-msmtpd&lt;br /&gt;
 make&lt;br /&gt;
 mv src/msmtp ~/.local/bin/&lt;br /&gt;
 cd ..&lt;br /&gt;
 rm -r msmtp-$MSMTP_VERSION msmtp-$MSMTP_VERSION.tar.xz&lt;br /&gt;
&lt;br /&gt;
Die Einrichtung der eigentlichen Weiterleitung erfolgt im nächsten Abschnitt.&lt;br /&gt;
&lt;br /&gt;
== Liste anlegen ==&lt;br /&gt;
Damit Mailman tatsächlich genutzt werden kann, muss natürlich eine Liste eingerichtet werden.&lt;br /&gt;
&lt;br /&gt;
Mit den folgenden Kommandos werden eine Liste in Mailman erstellt, E-Mail-Adressen angelegt sowie Weiterleitungen konfiguriert:&lt;br /&gt;
 $ LISTNAME=test&lt;br /&gt;
 DOMAIN_ADMIN=xyz00&lt;br /&gt;
 DOMAIN_USER=xyz00-lists&lt;br /&gt;
 DOMAIN=lists.example.org&lt;br /&gt;
 LMTP_PORT=8024 # In Mailman Core konfigurierter Port&lt;br /&gt;
 &lt;br /&gt;
 mailman create $LISTNAME@$DOMAIN # Alternativ über Web Frontend&lt;br /&gt;
 &lt;br /&gt;
 for localpart in $LISTNAME ${LISTNAME}-admin ${LISTNAME}-bounces ${LISTNAME}-confirm ${LISTNAME}-join ${LISTNAME}-leave ${LISTNAME}-owner ${LISTNAME}-request ${LISTNAME}-subscribe ${LISTNAME}-unsubscribe; do&lt;br /&gt;
     hsscript -u $DOMAIN_ADMIN -e &amp;quot;emailaddress.add({set:{domain:&#039;$DOMAIN&#039;,localpart:&#039;$localpart&#039;,target:&#039;$DOMAIN_USER+$localpart&#039;}})&amp;quot;&lt;br /&gt;
     echo &amp;quot;\&amp;quot;|$HOME/.local/bin/msmtp --host=localhost --port=$LMTP_PORT --protocol=lmtp $localpart@$DOMAIN\&amp;quot;&amp;quot; &amp;gt;~/.forward+$localpart&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
== Update ==&lt;br /&gt;
Mailman lässt sich wie im Folgenden beschrieben aktualisieren.&lt;br /&gt;
&lt;br /&gt;
Python-Pakete für die Aktualisierungen vorliegen ausgeben:&lt;br /&gt;
 $ cd ~/mailman&lt;br /&gt;
 pipenv update --outdated&lt;br /&gt;
&lt;br /&gt;
Vor dem eigentlichen Update empfiehlt es sich, die Release Notes (zumindest von Mailman) zu lesen und auf relevante Änderungen zu prüfen.&lt;br /&gt;
&lt;br /&gt;
Update der Pakete:&lt;br /&gt;
 $ pipenv update&lt;br /&gt;
&lt;br /&gt;
Ggf. Pip Cache löschen:&lt;br /&gt;
 $ rm -r ~/.cache/pip*&lt;br /&gt;
&lt;br /&gt;
Anschließend werden die Dateien aus dem &#039;&#039;mailman-suite&#039;&#039; Git-Repository aktualisiert. Vor dem Übernehmen der Änderungen (merge), sollten die Commit Logs und die Änderungen begutachtet werden, um festzustellen, ob ggf. die Konfiguration anzupassen ist:&lt;br /&gt;
 $ cd mailman-suite&lt;br /&gt;
 git fetch origin&lt;br /&gt;
 git log master..origin/master # Zeigt Commit logs&lt;br /&gt;
 git diff master..origin/master # Zeigt Änderungen&lt;br /&gt;
&lt;br /&gt;
Änderungen übernehmen:&lt;br /&gt;
 $ git merge origin/master&lt;br /&gt;
&lt;br /&gt;
Abschließend die verschiedenen Dienste neu starten:&lt;br /&gt;
 $ mailman restart&lt;br /&gt;
&lt;br /&gt;
qcluster neu starten, wenn als Dienst und nicht als Cron Job gestartet:&lt;br /&gt;
 $ pkill --oldest --full &#039;mailman-suite_project/manage.py qcluster$&#039;&lt;br /&gt;
 mailman-django qcluster &amp;amp;disown&lt;br /&gt;
&lt;br /&gt;
Web Frontend neu starten:&lt;br /&gt;
 $ mkdir -p ~/doms/&amp;lt;domain&amp;gt;/app-ssl/tmp&lt;br /&gt;
 touch ~/doms/&amp;lt;domain&amp;gt;/app-ssl/tmp/restart.txt&lt;br /&gt;
&lt;br /&gt;
Zur Aktualisierung von msmtp können die Schritte zur Installation (mit angepasster Versionsnummer) wiederholt werden.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Mailinglisten]]&lt;br /&gt;
[[Kategorie:E-Mail]]&lt;/div&gt;</summary>
		<author><name>Opa00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Mailman_3_installieren&amp;diff=5345</id>
		<title>Mailman 3 installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Mailman_3_installieren&amp;diff=5345"/>
		<updated>2021-01-05T06:25:20Z</updated>

		<summary type="html">&lt;p&gt;Opa00: /* Web Frontend */ kleine Änderung zur Klarstellung wohin cloned wird&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die folgende Anleitung zur Installation von Mailman 3 auf Hostsharing geht davon aus, dass als Domäne &#039;&#039;lists.example.org&#039;&#039; und als Domänennutzer &#039;&#039;xyz00-lists&#039;&#039; verwendet wird. Es ist zu empfehlen, auszuführende Befehle und Konfigurationen vorab auf zu ersetzende Werte zu prüfen. Alle Befehle sind als Benutzer &#039;&#039;xyz00-lists&#039;&#039; zu starten. Damit mehrere aufeinander folgende Shell-Kommandos leichter kopiert werden können, wird nur vor das jeweils erste Kommando ein &#039;&#039;$&#039;&#039; gesetzt. Zum Verständnis mancher der folgenden Anweisungen kann es hilfreich sein, die [https://mailman.readthedocs.io/ Mailman-Dokumentation] gelesen und sich mit [https://pipenv.readthedocs.io/en/latest/ Pipenv] beschäftigt zu haben.&lt;br /&gt;
&lt;br /&gt;
Achtung: Mailman 3 benötigt zahlreiche Hintergrundprozesse, was beim Managed Webspace zusätzliche Kosten verursacht.&lt;br /&gt;
&lt;br /&gt;
== Datenbank ==&lt;br /&gt;
Zunächst muss eine PostgreSQL- oder MySQL-Datenbank angelegt werden. (Mailman läuft auch mit SQLite, ist aber für den Produktivbetrieb nicht empfohlen.) Je nach gewählter Datenbank unterscheiden sich manche Schritte geringfügig, was an den entsprechenden Stellen dokumentiert ist.&lt;br /&gt;
&lt;br /&gt;
== Mailman Core ==&lt;br /&gt;
Für die Installation von Mailman Core sind folgende Kommandos auszuführen:&lt;br /&gt;
 $ pip3 install --user pipenv&lt;br /&gt;
 echo &#039;export PATH=&amp;quot;$HOME/.local/bin:$PATH&amp;quot;&#039; &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
 source ~/.profile&lt;br /&gt;
 mkdir ~/mailman&lt;br /&gt;
 cd ~/mailman&lt;br /&gt;
 pipenv install mailman mailman-hyperkitty&lt;br /&gt;
 pipenv install psycopg2-binary # Für PostgreSQL&lt;br /&gt;
 pipenv install pymsql # Für MySQL&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend wird das Verzeichnis für die Konfigurationsdatei angelegt:&lt;br /&gt;
 $ mkdir -p ~/mailman/var/etc&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration wird in die Datei &amp;lt;code&amp;gt;~/mailman/var/etc/mailman.cfg&amp;lt;/code&amp;gt; geschrieben:&lt;br /&gt;
 [mailman]&lt;br /&gt;
 site_owner: admin@example.org&lt;br /&gt;
 default_language: de&lt;br /&gt;
 &lt;br /&gt;
 [database] # https://mailman.readthedocs.io/en/latest/src/mailman/docs/database.html&lt;br /&gt;
 class: mailman.database.postgresql.PostgreSQLDatabase&lt;br /&gt;
 url: postgres://myuser:mypassword@mypghost/mailman&lt;br /&gt;
 # Fallls MySQL verwendet:&lt;br /&gt;
 #class: mailman.database.mysql.MySQLDatabase&lt;br /&gt;
 #url: mysql+pymysql://myuser:mypassword@mymysqlhost/mailman?charset=utf8&amp;amp;use_unicode=1&lt;br /&gt;
 # SQLite ist Standard, wenn nichts konfiguriert ist&lt;br /&gt;
 &lt;br /&gt;
 [webservice] # REST Service von Mailman. Wird von [[#Web_Frontend|Web Frontend]] verwendet&lt;br /&gt;
 port: 8001 # ändern, falls belegt&lt;br /&gt;
 admin_user: restadmin&lt;br /&gt;
 admin_pass: restpass&lt;br /&gt;
 &lt;br /&gt;
 [mta]&lt;br /&gt;
 smtp_host: xyz00.hostsharing.net&lt;br /&gt;
 smtp_port: 4587&lt;br /&gt;
 smtp_user: xyz00-lists&lt;br /&gt;
 smtp_pass: secret&lt;br /&gt;
 smtp_secure_mode: starttls&lt;br /&gt;
 verp_confirm_format: $address # VERP ist nicht möglich, da [https://de.wikipedia.org/wiki/Mail_Transfer_Agent MTA] nicht selbst konfiguriert werden kann&lt;br /&gt;
 # https://mailman.readthedocs.io/en/latest/src/mailman/docs/mta.html&lt;br /&gt;
 incoming: mailman.mta.null.NullMTA # NullMTA, da MTA MTA nicht selbst konfiguriert werden kann&lt;br /&gt;
 lmtp_port: 8024 # ändern, falls belegt&lt;br /&gt;
 &lt;br /&gt;
 [runner.nntp]&lt;br /&gt;
 start: no # Runner für [https://de.wikipedia.org/wiki/Network_News_Transfer_Protocol NNTP] Gateway ausschalten&lt;br /&gt;
 &lt;br /&gt;
 [archiver.hyperkitty]&lt;br /&gt;
 class: mailman_hyperkitty.Archiver&lt;br /&gt;
 enable: yes&lt;br /&gt;
 # $HOME muss durch den tatsächlichen Pfad zum Benutzerverzeichnis ersetzt werden&lt;br /&gt;
 configuration: $HOME/mailman/var/etc/mailman-hyperkitty.cfg&lt;br /&gt;
&lt;br /&gt;
Zugriffsrechte einschränken:&lt;br /&gt;
 $ chmod 0600 ~/mailman/var/etc/mailman.cfg&lt;br /&gt;
&lt;br /&gt;
Damit Hyperkitty als [[#Web_Frontend|Web Frontend]] für das Archiv verwendet werden kann, ist in die Datei &amp;lt;code&amp;gt;~/mailman/var/etc/mailman-hyperkitty.cfg&amp;lt;/code&amp;gt; Foglendes zu schreiben:&lt;br /&gt;
 [general]&lt;br /&gt;
 base_url: &amp;lt;nowiki&amp;gt;https://lists.example.org/hyperkitty/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 # Muss identisch mit Key in Hyperkitty sein&lt;br /&gt;
 api_key: SecretArchiverAPIKey&lt;br /&gt;
&lt;br /&gt;
Zugriffsrechte einschränken:&lt;br /&gt;
 $ chmod 0600 ~/mailman/var/etc/mailman-hyperkitty.cfg&lt;br /&gt;
&lt;br /&gt;
Kommando &#039;&#039;mailman&#039;&#039; anlegen:&lt;br /&gt;
 $ cat &amp;lt;&amp;lt;&#039;EOD&#039; &amp;gt;~/.local/bin/mailman&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 &lt;br /&gt;
 cd ~/mailman&lt;br /&gt;
 pipenv run mailman &amp;quot;$@&amp;quot;&lt;br /&gt;
 EOD&lt;br /&gt;
 &lt;br /&gt;
 chmod +x ~/.local/bin/mailman&lt;br /&gt;
&lt;br /&gt;
Nun kann mit &amp;lt;code&amp;gt;mailman info&amp;lt;/code&amp;gt; nochmal die aktuelle Konfiguration geprüft werden.&lt;br /&gt;
Danach kann Mailman gestartet werden:&lt;br /&gt;
 $ mailman start&lt;br /&gt;
&lt;br /&gt;
== Web Frontend ==&lt;br /&gt;
In diesem Abschnitt wird die Installation des Web Frontends beschrieben.&lt;br /&gt;
&lt;br /&gt;
Zunächst werden die Redirects aus der &amp;lt;code&amp;gt;.htaccess&amp;lt;/code&amp;gt; gelöscht:&lt;br /&gt;
 $ echo &amp;quot;&amp;quot; &amp;gt; ~/doms/lists.example.org/htdocs-ssl/.htaccess&lt;br /&gt;
&lt;br /&gt;
Anschließend werden die erforderlichen Python-Pakete installiert:&lt;br /&gt;
 $ cd ~/mailman&lt;br /&gt;
 pipenv install whoosh postorius hyperkitty&lt;br /&gt;
&lt;br /&gt;
Um Plattenplatz freizugeben, kann optional der Pip Cache gelöscht werden:&lt;br /&gt;
 $ rm -r ~/.cache/pip*&lt;br /&gt;
&lt;br /&gt;
Nun werden die Dateien geladen, mit denen Postorius und Hyperkitty konfiguriert und gestartet werden:&lt;br /&gt;
 $ cd &lt;br /&gt;
 git clone https://gitlab.com/mailman/mailman-suite.git&lt;br /&gt;
&lt;br /&gt;
Zur Konfiguration von Hyperkitty wird die IP-Adresse benötigt, von der die Anfragen von Mailman Core kommen. Diese kann wie folgt ermittelt werden:&lt;br /&gt;
 $ cat &amp;lt;&amp;lt;EOD &amp;gt;~/doms/lists.example.org/htdocs-ssl/ip.php&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 echo $_SERVER[&#039;REMOTE_ADDR&#039;] . &amp;quot;\n&amp;quot;;&lt;br /&gt;
 EOD&lt;br /&gt;
 curl &amp;lt;nowiki&amp;gt;https://lists.example.org/ip.php&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 rm ~/doms/lists.example.org/htdocs-ssl/ip.php&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration wird nun in Die Datei &amp;lt;code&amp;gt;~/mailman-suite/mailman-suite_project/settings_local.py&amp;lt;/code&amp;gt; geschrieben:&lt;br /&gt;
 SECRET_KEY = &#039;change-this-on-your-production-server&#039;&lt;br /&gt;
 Debug = False&lt;br /&gt;
 ADMINS = (&lt;br /&gt;
      (&#039;Mailman Suite Admin&#039;, &#039;admin@example.org&#039;),&lt;br /&gt;
 )&lt;br /&gt;
 ALLOWED_HOSTS = [&lt;br /&gt;
     &#039;lists.example.org&#039;,&lt;br /&gt;
 ]&lt;br /&gt;
 MAILMAN_REST_API_URL = &#039;&amp;lt;nowiki&amp;gt;http://localhost:8001&amp;lt;/nowiki&amp;gt;&#039;&lt;br /&gt;
 MAILMAN_REST_API_USER = &#039;restadmin&#039;&lt;br /&gt;
 MAILMAN_REST_API_PASS = &#039;restpass&#039;&lt;br /&gt;
 MAILMAN_ARCHIVER_KEY = &#039;SecretArchiverAPIKey&#039;&lt;br /&gt;
 MAILMAN_ARCHIVER_FROM = (&#039;&amp;lt;IP von Mailman Core&amp;gt;&#039;)&lt;br /&gt;
 &lt;br /&gt;
 # Authentifizierung über externe Dienste ausschalten (s. django-allauth)&lt;br /&gt;
 from settings import INSTALLED_APPS&lt;br /&gt;
 INSTALLED_APPS = filter(lambda app: not app.startswith(&#039;allauth.socialaccount.&#039;) and app != &#039;django_mailman3.lib.auth.fedora&#039;, INSTALLED_APPS)&lt;br /&gt;
 INSTALLED_APPS = (&lt;br /&gt;
     &#039;hyperkitty&#039;,&lt;br /&gt;
     &#039;postorius&#039;,&lt;br /&gt;
     &#039;django_mailman3&#039;,&lt;br /&gt;
     # Uncomment the next line to enable the admin:&lt;br /&gt;
     &#039;django.contrib.admin&#039;,&lt;br /&gt;
     # Uncomment the next line to enable admin documentation:&lt;br /&gt;
     # &#039;django.contrib.admindocs&#039;,&lt;br /&gt;
     &#039;django.contrib.auth&#039;,&lt;br /&gt;
     &#039;django.contrib.contenttypes&#039;,&lt;br /&gt;
     &#039;django.contrib.sessions&#039;,&lt;br /&gt;
     &#039;django.contrib.sites&#039;,&lt;br /&gt;
     &#039;django.contrib.messages&#039;,&lt;br /&gt;
     &#039;django.contrib.staticfiles&#039;,&lt;br /&gt;
     &#039;rest_framework&#039;,&lt;br /&gt;
     &#039;django_gravatar&#039;,&lt;br /&gt;
     &#039;compressor&#039;,&lt;br /&gt;
     &#039;haystack&#039;,&lt;br /&gt;
     &#039;django_extensions&#039;,&lt;br /&gt;
     &#039;django_q&#039;,&lt;br /&gt;
     &#039;allauth&#039;,&lt;br /&gt;
     &#039;allauth.account&#039;,&lt;br /&gt;
     &#039;allauth.socialaccount&#039;,&lt;br /&gt;
 )&lt;br /&gt;
 &lt;br /&gt;
 # Standardkonfiguration verwendet SQLite&lt;br /&gt;
 DATABASES = {&lt;br /&gt;
     &#039;default&#039;: {&lt;br /&gt;
         &#039;ENGINE&#039;: &#039;django.db.backends.postgresql_psycopg2&#039;, # Für MySQL: django.db.backends.mysql&lt;br /&gt;
         &#039;HOST&#039;: &#039;localhost&#039;,&lt;br /&gt;
         &#039;NAME&#039;: &#039;database_name&#039;,&lt;br /&gt;
         &#039;USER&#039;: &#039;database_user&#039;,&lt;br /&gt;
         &#039;PASSWORD&#039;: &#039;database_password&#039;,&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 LANGUAGE_CODE = &#039;de-de&#039;&lt;br /&gt;
 TIME_ZONE = &#039;Europe/Berlin&#039;&lt;br /&gt;
 DEFAULT_FROM_EMAIL = &#039;mailing-lists@example.org&#039;&lt;br /&gt;
 SERVER_EMAIL = &#039;mailing-lists@example.org&#039;&lt;br /&gt;
 EMAIL_BACKEND = &#039;django.core.mail.backends.smtp.EmailBackend&#039;&lt;br /&gt;
 EMAIL_HOST = &#039;xyz00.hostsharing.net&#039;&lt;br /&gt;
 EMAIL_PORT = 4587&lt;br /&gt;
 EMAIL_USE_TLS = True&lt;br /&gt;
 EMAIL_HOST_USER = &#039;xyz00-lists&#039;&lt;br /&gt;
 EMAIL_HOST_PASSWORD = &#039;secret&#039;&lt;br /&gt;
 EMAIL_TIMEOUT = 60&lt;br /&gt;
 &lt;br /&gt;
 ACCOUNT_DEFAULT_HTTP_PROTOCOL = &#039;https&#039;&lt;br /&gt;
 &lt;br /&gt;
 COMPRESS_PRECOMPILERS = (&lt;br /&gt;
    (&#039;text/less&#039;, &#039;lessc {infile} {outfile}&#039;),&lt;br /&gt;
    (&#039;text/x-scss&#039;, &#039;sass -t compressed {infile} {outfile}&#039;),&lt;br /&gt;
    (&#039;text/x-sass&#039;, &#039;sass -t compressed {infile} {outfile}&#039;),&lt;br /&gt;
 )&lt;br /&gt;
 COMPRESS_OFFLINE = True&lt;br /&gt;
 &lt;br /&gt;
 # Workeranzahl reduzieren (optional)&lt;br /&gt;
 Q_CLUSTER = {&lt;br /&gt;
     &#039;workers&#039;: 1,&lt;br /&gt;
     &#039;timeout&#039;: 300,&lt;br /&gt;
     &#039;save_limit&#039;: 100,&lt;br /&gt;
     &#039;orm&#039;: &#039;default&#039;,&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Hinweis: Die Einstellungen in &amp;lt;code&amp;gt;settings_local.py&amp;lt;/code&amp;gt; überschreiben solche in &amp;lt;code&amp;gt;settings.py&amp;lt;/code&amp;gt;. Zwar kann &amp;lt;code&amp;gt;settings.py&amp;lt;/code&amp;gt; auch direkt angepasst werden, auf diese Weise werden jedoch mögliche Konflikte beim Update vermieden. &amp;lt;code&amp;gt;settings.py&amp;lt;/code&amp;gt; sollte dennoch dahingehend geprüft werden, ob man ggf. weitere Optionen ändern möchte.&lt;br /&gt;
&lt;br /&gt;
Das Mailman Web Frontend nutzt das Framework Django. Einige der Einstellungen sind in der [https://docs.djangoproject.com/en/2.2/ref/settings/ Dokumentation von Django] beschrieben, andere konfigurieren eine der in &amp;lt;code&amp;gt;INSTALLED_APPS&amp;lt;/code&amp;gt; definierten Anwendungen.&lt;br /&gt;
&lt;br /&gt;
Damit per Django verfügbare Kommandos leicht ausgeführt werden können, wird der Befehl &#039;&#039;mailman-django&#039;&#039; eingerichtet:&lt;br /&gt;
 $ cat &amp;lt;&amp;lt;&#039;EOD&#039; &amp;gt;~/.local/bin/mailman-django&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 &lt;br /&gt;
 cd ~/mailman&lt;br /&gt;
 pipenv run mailman-suite/mailman-suite_project/manage.py &amp;quot;$@&amp;quot;&lt;br /&gt;
 EOD&lt;br /&gt;
 &lt;br /&gt;
 chmod +x ~/.local/bin/mailman-django&lt;br /&gt;
&lt;br /&gt;
Anschließend können folgende Kommandos ausgeführt werden:&lt;br /&gt;
 $ mailman-django migrate&lt;br /&gt;
 mailman-django collectstatic&lt;br /&gt;
 mailman-django compress&lt;br /&gt;
 mailman-django createsuperuser&lt;br /&gt;
&lt;br /&gt;
Nun müssen die statischen Dateien für das Web Frontend noch per HTTPS verfügbar gemacht werden:&lt;br /&gt;
 $ ln -s ~/mailman/mailman-suite/mailman-suite_project/static ~/doms/lists.example.org/htdocs-ssl/&lt;br /&gt;
&lt;br /&gt;
Damit das Web Frontend per [[Phusion_Passenger|Phusion Passenger]] geladen werden kann:&lt;br /&gt;
 $ cat &amp;lt;&amp;lt;EOD &amp;gt;~/doms/lists.example.org/app-ssl/passenger_wsgi.py&lt;br /&gt;
 import os&lt;br /&gt;
 import subprocess&lt;br /&gt;
 import sys&lt;br /&gt;
 &lt;br /&gt;
 os.environ[&#039;LANG&#039;] = &#039;C.UTF-8&#039;&lt;br /&gt;
 os.environ[&#039;LC_ALL&#039;] = &#039;C.UTF-8&#039;&lt;br /&gt;
 &lt;br /&gt;
 HOME = os.getenv(&#039;HOME&#039;)&lt;br /&gt;
 PIPENV = os.path.join(HOME, &#039;.local&#039;, &#039;bin&#039;, &#039;pipenv&#039;)&lt;br /&gt;
 PIPFILE_DIR = os.path.join(HOME, &#039;mailman&#039;)&lt;br /&gt;
 INTERP = subprocess.check_output([PIPENV, &#039;run&#039;, &#039;which&#039;, &#039;python&#039;], cwd=PIPFILE_DIR).strip().decode(&#039;utf-8&#039;)&lt;br /&gt;
 if sys.executable != INTERP:&lt;br /&gt;
     os.execl(INTERP, INTERP, *sys.argv)&lt;br /&gt;
 &lt;br /&gt;
 WSGI_DIR = os.path.join(HOME, &#039;mailman&#039;, &#039;mailman-suite&#039;, &#039;mailman-suite_project&#039;)&lt;br /&gt;
 sys.path.append(WSGI_DIR)&lt;br /&gt;
 &lt;br /&gt;
 from wsgi import application&lt;br /&gt;
 EOD&lt;br /&gt;
&lt;br /&gt;
Nun steht das Web Frontend unter &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://lists.example.org/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; zur Verfügung. Über die Django Administration sollte unter &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://lists.example.org/admin/sites/site/1/change/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; die Domäne angepasst werden.&lt;br /&gt;
&lt;br /&gt;
== Cron Jobs ==&lt;br /&gt;
Es sind verschiedene Cron Jobs erforderlich. Hierzu &amp;lt;code&amp;gt;crontab -e&amp;lt;/code&amp;gt; ausführen und Folgendes eintragen:&lt;br /&gt;
 # An die in MAILTO eingetragene Adressen werden Ausgaben der Cron Jobs gesendet (optional)&lt;br /&gt;
 #MAILTO=admin@example.org&lt;br /&gt;
 PATH=$HOME/.local/bin:$PATH&lt;br /&gt;
 &lt;br /&gt;
 @reboot mailman start&lt;br /&gt;
 &lt;br /&gt;
 # Send periodic digests.&lt;br /&gt;
 @daily mailman digests --send&lt;br /&gt;
 &lt;br /&gt;
 @reboot mailman-django qcluster&lt;br /&gt;
 # Alternativ qcluster minütlich ausführen&lt;br /&gt;
 # * * * * * mailman-django qcluster --run-once&lt;br /&gt;
 &lt;br /&gt;
 * * * * * mailman-django runjobs minutely&lt;br /&gt;
 2,17,32,47 * * * * mailman-django runjobs quarter_hourly&lt;br /&gt;
 @hourly  mailman-django runjobs hourly&lt;br /&gt;
 @daily   mailman-django runjobs daily&lt;br /&gt;
 @weekly  mailman-django runjobs weekly&lt;br /&gt;
 @monthly mailman-django runjobs monthly&lt;br /&gt;
 @yearly  mailman-django runjobs yearly&lt;br /&gt;
&lt;br /&gt;
Hinweis: Der Einfachheit halber wird hier für &#039;&#039;mailman start&#039;&#039; und &#039;&#039;qcluster&#039;&#039; &amp;lt;code&amp;gt;@reboot&amp;lt;/code&amp;gt; verwendet. Besser wäre der Einsatz von monit. Beim Einsatz von monit würde sich auch der Neustart der Dienste nach einem [[#Update|Update]] ändern. (Anleitung gerne anpassen, sollte jemand monit einrichten.)&lt;br /&gt;
&lt;br /&gt;
== Mails an Mailman weiterleiten ==&lt;br /&gt;
Da die MTA-Konfiguration nicht direkt angepasst werden kann, ist ein Hilfskonstrukt erforderlich: Mittels &#039;&#039;.forward-Dateien&#039;&#039; werden eingehende Mails an das Programm msmtp weitergeleitet, welches diese per [https://de.wikipedia.org/wiki/Local_Mail_Transfer_Protocol LMTP] bei Mailman abliefert.&lt;br /&gt;
&lt;br /&gt;
msmtp kann wie folgt installiert werden:&lt;br /&gt;
 $ MSMTP_VERSION=1.8.6 # ggf. aktualisieren&lt;br /&gt;
 wget &amp;lt;nowiki&amp;gt;https://marlam.de/msmtp/releases/msmtp-$MSMTP_VERSION.tar.xz&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 tar xf msmtp-$MSMTP_VERSION.tar.xz&lt;br /&gt;
 cd msmtp-$MSMTP_VERSION&lt;br /&gt;
 ./configure --without-msmtpd&lt;br /&gt;
 make&lt;br /&gt;
 mv src/msmtp ~/.local/bin/&lt;br /&gt;
 cd ..&lt;br /&gt;
 rm -r msmtp-$MSMTP_VERSION msmtp-$MSMTP_VERSION.tar.xz&lt;br /&gt;
&lt;br /&gt;
Die Einrichtung der eigentlichen Weiterleitung erfolgt im nächsten Abschnitt.&lt;br /&gt;
&lt;br /&gt;
== Liste anlegen ==&lt;br /&gt;
Damit Mailman tatsächlich genutzt werden kann, muss natürlich eine Liste eingerichtet werden.&lt;br /&gt;
&lt;br /&gt;
Mit den folgenden Kommandos werden eine Liste in Mailman erstellt, E-Mail-Adressen angelegt sowie Weiterleitungen konfiguriert:&lt;br /&gt;
 $ LISTNAME=test&lt;br /&gt;
 DOMAIN_ADMIN=xyz00&lt;br /&gt;
 DOMAIN_USER=xyz00-lists&lt;br /&gt;
 DOMAIN=lists.example.org&lt;br /&gt;
 LMTP_PORT=8024 # In Mailman Core konfigurierter Port&lt;br /&gt;
 &lt;br /&gt;
 mailman create $LISTNAME@$DOMAIN # Alternativ über Web Frontend&lt;br /&gt;
 &lt;br /&gt;
 for localpart in $LISTNAME ${LISTNAME}-admin ${LISTNAME}-bounces ${LISTNAME}-confirm ${LISTNAME}-join ${LISTNAME}-leave ${LISTNAME}-owner ${LISTNAME}-request ${LISTNAME}-subscribe ${LISTNAME}-unsubscribe; do&lt;br /&gt;
     hsscript -u $DOMAIN_ADMIN -e &amp;quot;emailaddress.add({set:{domain:&#039;$DOMAIN&#039;,localpart:&#039;$localpart&#039;,target:&#039;$DOMAIN_USER+$localpart&#039;}})&amp;quot;&lt;br /&gt;
     echo &amp;quot;\&amp;quot;|$HOME/.local/bin/msmtp --host=localhost --port=$LMTP_PORT --protocol=lmtp $localpart@$DOMAIN\&amp;quot;&amp;quot; &amp;gt;~/.forward+$localpart&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
== Update ==&lt;br /&gt;
Mailman lässt sich wie im Folgenden beschrieben aktualisieren.&lt;br /&gt;
&lt;br /&gt;
Python-Pakete für die Aktualisierungen vorliegen ausgeben:&lt;br /&gt;
 $ cd ~/mailman&lt;br /&gt;
 pipenv update --outdated&lt;br /&gt;
&lt;br /&gt;
Vor dem eigentlichen Update empfiehlt es sich, die Release Notes (zumindest von Mailman) zu lesen und auf relevante Änderungen zu prüfen.&lt;br /&gt;
&lt;br /&gt;
Update der Pakete:&lt;br /&gt;
 $ pipenv update&lt;br /&gt;
&lt;br /&gt;
Ggf. Pip Cache löschen:&lt;br /&gt;
 $ rm -r ~/.cache/pip*&lt;br /&gt;
&lt;br /&gt;
Anschließend werden die Dateien aus dem &#039;&#039;mailman-suite&#039;&#039; Git-Repository aktualisiert. Vor dem Übernehmen der Änderungen (merge), sollten die Commit Logs und die Änderungen begutachtet werden, um festzustellen, ob ggf. die Konfiguration anzupassen ist:&lt;br /&gt;
 $ cd mailman-suite&lt;br /&gt;
 git fetch origin&lt;br /&gt;
 git log master..origin/master # Zeigt Commit logs&lt;br /&gt;
 git diff master..origin/master # Zeigt Änderungen&lt;br /&gt;
&lt;br /&gt;
Änderungen übernehmen:&lt;br /&gt;
 $ git merge origin/master&lt;br /&gt;
&lt;br /&gt;
Abschließend die verschiedenen Dienste neu starten:&lt;br /&gt;
 $ mailman restart&lt;br /&gt;
&lt;br /&gt;
qcluster neu starten, wenn als Dienst und nicht als Cron Job gestartet:&lt;br /&gt;
 $ pkill --oldest --full &#039;mailman-suite_project/manage.py qcluster$&#039;&lt;br /&gt;
 mailman-django qcluster &amp;amp;disown&lt;br /&gt;
&lt;br /&gt;
Web Frontend neu starten:&lt;br /&gt;
 $ mkdir -p ~/doms/&amp;lt;domain&amp;gt;/app-ssl/tmp&lt;br /&gt;
 touch ~/doms/&amp;lt;domain&amp;gt;/app-ssl/tmp/restart.txt&lt;br /&gt;
&lt;br /&gt;
Zur Aktualisierung von msmtp können die Schritte zur Installation (mit angepasster Versionsnummer) wiederholt werden.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Mailinglisten]]&lt;br /&gt;
[[Kategorie:E-Mail]]&lt;/div&gt;</summary>
		<author><name>Opa00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Diskussion:Nextcloud&amp;diff=5344</id>
		<title>Diskussion:Nextcloud</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Diskussion:Nextcloud&amp;diff=5344"/>
		<updated>2021-01-04T23:26:35Z</updated>

		<summary type="html">&lt;p&gt;Opa00: Neuer Abschnitt /* Mehr Performance Tuning  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Umstellung auf bigint ==&lt;br /&gt;
Unter https://docs.nextcloud.com/server/17/admin_manual/configuration_database/bigint_identifiers.html steht etwas was wohl sudo benötigt.&lt;br /&gt;
Wie kann das eingerichtet werden?&lt;br /&gt;
&lt;br /&gt;
== Mehr Performance Tuning  ==&lt;br /&gt;
&lt;br /&gt;
https://docs.nextcloud.com/server/20/admin_manual/installation/server_tuning.html&lt;br /&gt;
&lt;br /&gt;
Bei mir war die Nextcloud anfangs enorm langsam (sogar der login ist gescheitert aufgrund der langen Laufzeit. Ich habe in die php.ini folgende Zeilen aus o.g. Doku hinzugefügt und ein bisschen die Apps / Plugins verändert. &lt;br /&gt;
&lt;br /&gt;
  pm = dynamic&lt;br /&gt;
  pm.max_children = 120&lt;br /&gt;
  pm.start_servers = 12&lt;br /&gt;
  pm.min_spare_servers = 6&lt;br /&gt;
  pm.max_spare_servers = 18&lt;/div&gt;</summary>
		<author><name>Opa00</name></author>
	</entry>
</feed>