<?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=Zuk</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=Zuk"/>
	<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Spezial:Beitr%C3%A4ge/Zuk"/>
	<updated>2026-04-25T21:34:17Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Contao_Installieren&amp;diff=5595</id>
		<title>Contao Installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Contao_Installieren&amp;diff=5595"/>
		<updated>2021-08-19T21:11:42Z</updated>

		<summary type="html">&lt;p&gt;Zuk: Hinweis auf Neuerung in Version 4.12&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
1. Browser / HSAdmin:&lt;br /&gt;
Lege einen Domain-User und eine Domain an (Domain wird zuerst technisch angelegt, später bestellt).&lt;br /&gt;
Lege einen Datenbank-User und eine Datenbank an.&lt;br /&gt;
Lege einen Mail-User (Postfach) und eine Emailadresse für den Systemadministrator an.&lt;br /&gt;
2. Shell:&lt;br /&gt;
Navigiere zu $HOME des Domain-Users, lege die Verzeichnisse contao und contao/web an.&lt;br /&gt;
Lösche die Verzeichnisse doms/&amp;lt;domain&amp;gt;/subs/www, doms/&amp;lt;domain&amp;gt;/subs-ssl/www und doms/&amp;lt;domain&amp;gt;/htdocs-ssl.&lt;br /&gt;
Richte einen Symlink ein von /home/pacs/&amp;lt;Paketname&amp;gt;/users/&amp;lt;domain-user&amp;gt;/contao/web auf doms/&amp;lt;domain&amp;gt;/htdocs-ssl.&lt;br /&gt;
Lege eine php.ini mit deinen Änderungen an unter doms/&amp;lt;domain&amp;gt;/fastcgi-ssl (falls notwendig).&lt;br /&gt;
Kopiere die contao-manager.phar in das Verzeichnis contao/web und rename zu contao-manager.phar.php.&lt;br /&gt;
3. Browser / https://&amp;lt;domain&amp;gt;/contao-manager.phar.php:&lt;br /&gt;
Installiere Contao.&lt;br /&gt;
4. Installationsdetails findest du im Contao-Handbuch: [https://docs.contao.org/manual/de/]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Seit Version 4.12 unterstützt contao neben &amp;quot;web&amp;quot; auch &amp;quot;public&amp;quot; für das document root. (Der contao manager verwendet allerdings weiter &amp;quot;web&amp;quot;.)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zuk</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Mailman_3_installieren&amp;diff=5396</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=5396"/>
		<updated>2021-02-23T16:29:40Z</updated>

		<summary type="html">&lt;p&gt;Zuk: /* Mailman Core */ pip install korrigiert&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 pymysql # 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 ist nicht möglich, da [https://de.wikipedia.org/wiki/Mail_Transfer_Agent MTA] nicht selbst konfiguriert werden kann&lt;br /&gt;
 verp_confirm_format: $address&lt;br /&gt;
 # https://mailman.readthedocs.io/en/latest/src/mailman/docs/mta.html&lt;br /&gt;
 # NullMTA, da MTA nicht selbst konfiguriert werden kann&lt;br /&gt;
 incoming: mailman.mta.null.NullMTA&lt;br /&gt;
 lmtp_port: 8024 # ändern, falls belegt&lt;br /&gt;
 &lt;br /&gt;
 [runner.nntp]&lt;br /&gt;
 # Runner für [https://de.wikipedia.org/wiki/Network_News_Transfer_Protocol NNTP] Gateway ausschalten &lt;br /&gt;
 start: no&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/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; und &#039;&#039;.promailrc&#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. msmtp ist auf den Managed Servern vorinstalliert.&lt;br /&gt;
Dazu lege ich im $HOME des Users zwei Dateien an: &#039;.forward&#039; bekommt die Mails vom Postfix-Mailserver übergeben und leitet weiter an procmail, das über die Datei &#039;.procmailrc&#039; konfiguriert wird.&lt;br /&gt;
&lt;br /&gt;
  ~$ cat .forward &lt;br /&gt;
  &amp;quot;|/usr/bin/procmail -p&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  ~$ cat .procmailrc &lt;br /&gt;
  SHELL=/bin/sh&lt;br /&gt;
  HOMEDIR=/home/pacs/xyz00/users/lists&lt;br /&gt;
  MAILDIR=/home/pacs/xyz00/users/lists/Maildir&lt;br /&gt;
  PMDIR=/home/pacs/xyz00/users/lists&lt;br /&gt;
  VERBOSE=yes&lt;br /&gt;
  LOGFILE=/home/pacs/xyz00/users/lists/var/procmail.log&lt;br /&gt;
  DEFAULT&lt;br /&gt;
  &lt;br /&gt;
  :0:&lt;br /&gt;
  * ^X-Original-To: ()\/[^@+]+&lt;br /&gt;
  |/usr/bin/msmtp --host=127.0.0.1 --port=8024 --protocol=lmtp --read-envelope-from ${MATCH}@lists.example.org&lt;br /&gt;
  &lt;br /&gt;
  :0&lt;br /&gt;
  { EXITCODE 67 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Mailadresse wird als Catchall-Adresse in HSAdmin angelegt. Bei einer Catchall-Adresse wird als &amp;quot;localpart&amp;quot; ein leerer String angegeben.&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;
== 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>Zuk</name></author>
	</entry>
</feed>