Automx2: Unterschied zwischen den Versionen

Aus Foxwiki
KKeine Bearbeitungszusammenfassung
K Textersetzung - „Man-Pages“ durch „Man-Page“
 
(38 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
= automx2: E-Mail-Client-Konfiguration leicht gemacht =
'''automx2''' - Dienst zur automatischen Konfiguration von E-Mail-Clients


== Vorwort  ==
= Beschreibung =
automx2 ist ein Webdienst.
* Es befindet sich normalerweise hinter einem Webserver und wartet auf Konfigurationsanfragen
* Wenn ein E-Mail-Benutzeragent (MUA), auch als E-Mail-Client bezeichnet, eine Konfiguration anfordert, kontaktiert er den Webserver.
* Der Webserver fungiert dann als Proxy und leitet alle Anfragen an automx2 weiter und gibt Antworten an den MUA zurück.


Dieses Dokument erklärt, wie automx2 funktioniert, wie [https://rseichter.github.io/automx2/#muaconf die automatisierte Mail-Client-Konfiguration] funktioniert und was zur Installation und Konfiguration von automx2 erforderlich ist. Wenn Sie bereits mit automatisierten Mailbox-Konfigurationsmethoden vertraut sind, können Sie die folgenden Abschnitte überspringen und direkt mit [https://rseichter.github.io/automx2/#install Automx2 installieren ]und [https://rseichter.github.io/automx2/#configure Automx2 konfigurieren fortfahren].
  Image:Bild1.png
 
== Wie funktioniert automx2? ==
 
automx2 ist ein Webdienst. Es befindet sich normalerweise hinter einem Webserver wie NGINX und wartet auf Konfigurationsanfragen. Wenn ein E-Mail-Benutzeragent (MUA), auch als E-Mail-Client bezeichnet, eine Konfiguration anfordert, kontaktiert er den Webserver. Der Webserver fungiert dann als Proxy und leitet alle Anfragen an automx2 weiter und gibt Antworten an den MUA zurück.
 
[[Image:Bild1.png|top]]
 
== Wie funktioniert die automatische Konfiguration?  ==
 
Moderne E-Mail-Clients (Mail User Agents) können nach Konfigurationsdaten suchen, wenn ein Benutzer beginnt, ein neues Konto zu erstellen. Sie senden entweder die E-Mail-Adresse des Benutzers an einen Dienst und bitten den Dienst, mit einer Konfiguration zu antworten, die zum Profil des Benutzers passt, oder sie fragen das DNS-System um Rat.
 
Die Verwendung eines spezialisierten Konfigurationsdienstes für E-Mail-Konten ermöglicht individuelle Einstellungen. Es ermöglicht auch die Durchsetzung einer bestimmten Richtlinie, die beispielsweise den E-Mail-Client so konfiguriert, dass er einen bestimmten Authentifizierungsmechanismus verwendet. Das Abfragen des DNS nach E-Mail-Dienststandorten ermöglicht allgemeine Anweisungen, gibt jedoch nicht so viel Kontrolle über die Einstellungen wie ein spezialisierter Dienst wie automx2.
 
Ab heute gibt es vier Methoden, die bei der Konfiguration eines E-Mail-Kontos helfen. Drei davon – [https://rseichter.github.io/automx2/#autoconfig Autoconfig ], [https://rseichter.github.io/automx2/#autodiscover Autodiscover ]und [https://rseichter.github.io/automx2/#mobileconfig Mobileconfig ]– wurden von Anbietern entwickelt, um die spezifischen Anforderungen ihrer Produkte abzudecken. Der vierte ist ein RFC-Standard, der die oben erwähnten allgemeineren [https://rseichter.github.io/automx2/#dnsrr DNS-SRV-Ressourceneinträge ]Methode.
 
Die herstellerspezifischen Methoden haben gemeinsam, dass der Mail-Client, der eine Konfiguration sucht, eine Anfrage, die zumindest die Mail-Adresse des Benutzers enthält, an einen Konfigurationsdienst senden muss. Der Dienst verwendet die E-Mail-Adresse, um Konfigurationsdaten nachzuschlagen, und sendet diese Daten als Antwort an den Client zurück. Format – XML-Antwort oder Datei – und Komplexität unterscheiden sich je nach Methode.
 
automx2 implementiert alles, was zum Konfigurieren von E-Mail-Konten erforderlich ist. Funktionen zum Konfigurieren von Kalender- oder Adressbucheinstellungen sind nicht enthalten. Dies kann sich in einer zukünftigen Version ändern, aber der Fokus von automx2 liegt auf E-Mail.
 
=== Autokonfig  ===
 
Autoconfig ist eine proprietäre Methode, die von der Mozilla Foundation entwickelt wurde. Es wurde entwickelt, um ein E-Mail-Konto in Thunderbird und anderen E-Mail-Suiten wie Evolution und KMail zu konfigurieren [https://wiki.mozilla.org/Thunderbird:Autoconfiguration:ConfigFileFormat haben ]den Mechanismus übernommen.
 
Wenn ein Benutzer beginnt, ein neues E-Mail-Konto zu erstellen, wird er aufgefordert, seinen echten Namen und seine E-Mail-Adresse einzugeben, z ''alice@example.com ''. Thunderbird extrahiert dann den Domänenteil ( ''example.com '') aus der E-Mail-Adresse und erstellt eine Liste von URIs, um in der folgenden Reihenfolge nach einem Konfigurations-Webdienst zu suchen:
 
https://autoconfig.thunderbird.net/v1.1/example.com
https://autoconfig.example.com/mail/config-v1.1.xml?emailaddress=alice@example.com
https://example.com/.well-known/autoconfig/mail/config-v1.1.xml
http://autoconfig.thunderbird.net/v1.1/example.com
http://autoconfig.example.com/mail/config-v1.1.xml?emailaddress=alice@example.com
http://example.com/.well-known/autoconfig/mail/config-v1.1.xml
 
Ein Konfigurationsdienst wie automx2, der einen der aufgelisteten URIs überwacht, empfängt die Anfrage, verarbeitet sie und antwortet mit einer Reihe von Konfigurationsanweisungen.
 
Thunderbird verwendet die Anweisungen, um die erforderlichen Felder im Konto automatisch auszufüllen. Die einzige verbleibende Aufgabe für den Benutzer besteht darin, die Einstellungen zu bestätigen. Danach kann sie sofort mit der Nutzung ihres neuen E-Mail-Kontos beginnen.
 
=== Automatische Erkennung  ===
 
Autodiscover ist eine proprietäre Methode, die von Microsoft entwickelt wurde. Die von automx2 unterstützte Protokollversion wurde entwickelt, um ein E-Mail-Konto innerhalb von Outlook 2016 ff zu konfigurieren. Dienstsuchen verwenden die unten gezeigten URLs und als Fallback-Option DNS-Suchen. Bitte beachten Sie, dass Microsoft für Office 365 einen anderen Autodiscover-Mechanismus verwendet, der von automx2 noch nicht unterstützt wird, da Informationen zu den technischen Details nicht kostenlos zur Verfügung stehen.
 
https://example.com/autodiscover/autodiscover.xml
https://autodiscover.example.com/autodiscover/autodiscover.xml
http://autodiscover.example.com/autodiscover/autodiscover.xml
 
dns: autodiscover.example.com
dns: _autodiscover._tcp.example.com
 
Alle HTTP(S)-Abfragen senden eine POST-Anfrage und übermitteln XML, das Informationen über das zu konfigurierende Konto enthält. Die DNS-Abfragen suchen nach a <tt>CNAME</tt>Ressourceneintrag zuerst, der den E-Mail-Client auf eine Ressource außerhalb der Domäne des Postfachbesitzers umleiten soll, z. ''alice@example.com ''würde <tt>service.example-provider.com</tt>für Konfigurationsanweisungen. Wenn die erste DNS-Abfrage fehlschlägt, kann der Client mithilfe von a zu einem Konfigurationsdienst umgeleitet werden <tt>SRV</tt>RR so:
 
_autodiscover._tcp.example.com.  0  443 service.example-provider.com.
 
Die <tt>SRV</tt>Das im obigen Beispiel verwendete RR würde Alices Client an senden <tt>service.example-provider.com</tt>und weisen Sie ihn an, die Abfrage an den Konfigurationsdienst auf Port zu senden <tt>443</tt>.
 
=== Mobileconfig  ===
 
Anfragen und Antworten verwenden proprietäre Inhaltstypen mit einem zugrunde liegenden [https://en.wikipedia.org/wiki/Property_list Eigenschaftslistenformat ]. automx2 gibt ''unsignierte ''Daten zurück, was bedeutet, dass auf den Dienst nur über HTTPS zugegriffen werden muss. Andernfalls haben Ihre Benutzer keine Möglichkeit zu wissen, ob sie auf den richtigen Dienst zugreifen, und sind anfällig für Man-in-the-Middle-Angriffe.
 
=== DNS-SRV-Ressourceneinträge  ===
 
_imap._tcp.example.com          SRV  10  20  143  mail.example.com.
_imaps._tcp.example.com        SRV  0  1  993  .
_pop3._tcp.example.com          SRV  0  1  110  .
_pop3s._tcp.example.com        SRV  0  1  995  .
_smtp._tcp.example.com.        SRV  0  1  25  .
_submission._tcp.example.com.  SRV  10  20  587  mail.example.com.
 
== automx2 installieren  ==


= Installation =
automx2 benötigt zur Ausführung Python ab Version 3.7, idealerweise in Form einer virtuellen Python-Umgebung. Überprüfen Sie die Python3-Version wie folgt:  
automx2 benötigt zur Ausführung Python ab Version 3.7, idealerweise in Form einer virtuellen Python-Umgebung. Überprüfen Sie die Python3-Version wie folgt:  
  $ python3 --version
  $ python3 --version
  Python 3.9.9
  Python 3.9.9


'''Nicht als root ausführen'''


{| style="border-spacing:0;width:17cm;"
Wenn Sie eine Portnummer größer als 1024 verwenden (ich schlage Port 4243 vor), benötigt die Anwendung beim Ausführen keine Superuser-Rechte.
|- style="border:none;padding:0.049cm;"
* Dies würde ein Sicherheitsrisiko darstellen und wird daher dringend davon abgeraten.  
|| Nicht als root ausführen
* Ich empfehle die Erstellung eines neuen Benutzerkontos namens <tt>automx2</tt>.


Wenn Sie eine Portnummer größer als 1024 verwenden (ich schlage Port 4243 vor), benötigt die Anwendung beim Ausführen keine Superuser-Rechte. Dies würde ein Sicherheitsrisiko darstellen und wird daher dringend davon abgeraten. Ich empfehle die Erstellung eines neuen Benutzerkontos namens <tt>automx2</tt>.
Bereiten Sie die virtuelle Umgebung für den automx2-Webdienst vor, indem Sie den Installationspfad nach Ihrem Geschmack anpassen (automx2 selbst kümmert sich nicht darum).  
|-
* Der Weg <tt>/srv/web/automx2</tt>wird in dieser Dokumentation als Beispiel verwendet.  
|}
* Die folgenden BASH-Shell-Befehle sollten mit jeder modernen Linux-Distribution funktionieren.  
Bereiten Sie die virtuelle Umgebung für den automx2-Webdienst vor, indem Sie den Installationspfad nach Ihrem Geschmack anpassen (automx2 selbst kümmert sich nicht darum). Der Weg <tt>/srv/web/automx2</tt>wird in dieser Dokumentation als Beispiel verwendet. Die folgenden BASH-Shell-Befehle sollten mit jeder modernen Linux-Distribution funktionieren.  


<nowiki># Best practice: Create a fresh user account.</nowiki>
# Best practice: Create a fresh user account.
sudo useradd --home-dir /srv/web/automx2 --create-home automx2
# useradd --home-dir /srv/web/automx2 --create-home automx2


<nowiki># Alternative: If the user account already exists.</nowiki>
# Alternative: If the user account already exists.
  <nowiki># sudo bash -c 'mkdir -p /srv/web/automx2 && chown automx2 /srv/web/automx2'</nowiki>
  # bash -c 'mkdir -p /srv/web/automx2 && chown automx2 /srv/web/automx2'


Stellen Sie als Nächstes sicher, dass Sie sich entweder als der oben erstellte Benutzer anmelden oder über den Befehl „su“ zu diesem Benutzer wechseln. Dies ist wichtig, um die richtigen Dateiberechtigungen sicherzustellen. Laden Sie das Skript herunter, das Ihren automx2-Dienst herunterlädt und einrichtet:  
Stellen Sie als Nächstes sicher, dass Sie sich entweder als der oben erstellte Benutzer anmelden oder über den Befehl „su“ zu diesem Benutzer wechseln.  
* Dies ist wichtig, um die richtigen Dateiberechtigungen sicherzustellen.  
* Laden Sie das Skript herunter, das Ihren automx2-Dienst herunterlädt und einrichtet:  


  cd /srv/web/automx2
  cd /srv/web/automx2
Zeile 100: Zeile 39:


Durch Ausführen des Setup-Skripts wird eine virtuelle Python-Umgebung namens erstellt <tt>.venv</tt>im aktuellen Verzeichnis.  
Durch Ausführen des Setup-Skripts wird eine virtuelle Python-Umgebung namens erstellt <tt>.venv</tt>im aktuellen Verzeichnis.  
  ./setupvenv.sh
  ./setupvenv.sh


Aktivieren Sie die virtuelle Umgebung und installieren Sie die neueste automx2-Version von PyPI. Stellen Sie sicher, dass Sie die richtige Aktivierung für Ihre Shell aus der auswählen <tt>.venv/bin</tt>Verzeichnis. Dies ist ein Beispiel für BASH:  
Aktivieren Sie die virtuelle Umgebung und installieren Sie die neueste automx2-Version von PyPI.  
* Stellen Sie sicher, dass Sie die richtige Aktivierung für Ihre Shell aus der auswählen <tt>.venv/bin</tt>Verzeichnis.  
* Dies ist ein Beispiel für BASH:  


  source .venv/bin/activate
  source .venv/bin/activate
  pip install automx2
  pip install automx2


{|| class="wikitable sortable"
|-
|| Aktualisieren auf eine neuere automx2-Version


{| style="border-spacing:0;width:17cm;"
Wechseln Sie in das Verzeichnis, in dem zuvor automx2 installiert wurde.  
|- style="border:none;padding:0.049cm;"
|| Aktualisieren auf eine neuere automx2-Version


Wechseln Sie in das Verzeichnis, in dem zuvor automx2 installiert wurde. Aktivieren Sie die virtuelle Umgebung wie gewohnt und verwenden Sie Pips <tt>--upgrade</tt> option:  
Aktivieren Sie die virtuelle Umgebung wie gewohnt und verwenden Sie Pips <tt>--upgrade</tt> option:  


  cd /srv/web/automx2
  cd /srv/web/automx2
  source .venv/bin/activate
  source .venv/bin/activate
  pip install --upgrade automx2
  pip install --upgrade automx2


|-
|-
|}
|}
== automx2 konfigurieren  ==


= Syntax =
== Parameter ==
== Optionen ==
= Konfiguration =
automx2 verwendet eine Datei, um Laufzeitanweisungen zu lesen, und eine Datenbank, um Konfigurationsdaten für E-Mail-Konten nachzuschlagen.  
automx2 verwendet eine Datei, um Laufzeitanweisungen zu lesen, und eine Datenbank, um Konfigurationsdaten für E-Mail-Konten nachzuschlagen.  


=== Platzhalter  ===
=== Platzhalter  ===
 
Um die Konfiguration bequemer zu machen, unterstützt automx2 [https://wiki.mozilla.org/Thunderbird:Autoconfiguration:ConfigFileFormat#Placeholders Platzhalter im Mozilla-Stil ].  
Um die Konfiguration bequemer zu machen, unterstützt automx2 [https://wiki.mozilla.org/Thunderbird:Autoconfiguration:ConfigFileFormat#Placeholders Platzhalter im Mozilla-Stil ]. Zum Beispiel die Zeichenfolge <tt>%EMAILADDRESS%</tt>in Datenbankeinträgen wird durch die bei der Abfrage angegebene E-Mail-Adresse ersetzt. Obwohl automx2 auf einer proprietären Funktion von Autoconfig basiert, wendet es Platzhalter auch auf Autodiscover- und Mobileconfig-Antworten an.  
* Zum Beispiel die Zeichenfolge <tt>%EMAILADDRESS%</tt>in Datenbankeinträgen wird durch die bei der Abfrage angegebene E-Mail-Adresse ersetzt.  
* Obwohl automx2 auf einer proprietären Funktion von Autoconfig basiert, wendet es Platzhalter auch auf Autodiscover- und Mobileconfig-Antworten an.  


=== Laufzeitkonfiguration  ===
=== Laufzeitkonfiguration  ===
Die Konfigurationsdatei definiert das Laufzeitverhalten von automx2 und gibt das Backend an, aus dem automx2 die Konfigurationsdaten des Postfachkontos lesen soll.  
Die Konfigurationsdatei definiert das Laufzeitverhalten von automx2 und gibt das Backend an, aus dem automx2 die Konfigurationsdaten des Postfachkontos lesen soll.  


'''Läuft ohne Laufzeitkonfiguration'''
Wenn Sie automx2 ohne Konfigurationsdatei starten, verwendet es interne Standardeinstellungen.
* Diese sind nur zum Testen geeignet.
* Wird es ohne Konfiguration gestartet, verwendet es eine In-Memory-SQLite-Datenbank und alle Daten gehen verloren, sobald die Anwendung beendet wird.


{| style="border-spacing:0;width:17cm;"
Während des Starts sucht automx2 an den folgenden Stellen nach Anweisungen zur Laufzeitkonfiguration.  
|- style="border:none;padding:0.049cm;"
* Die erste Übereinstimmung bestimmt die verwendete Konfiguration.  
|| Läuft ohne Laufzeitkonfiguration
 
Wenn Sie automx2 ohne Konfigurationsdatei starten, verwendet es interne Standardeinstellungen. Diese sind nur zum Testen geeignet. Wird es ohne Konfiguration gestartet, verwendet es eine In-Memory-SQLite-Datenbank und alle Daten gehen verloren, sobald die Anwendung beendet wird.
|-
|}
Während des Starts sucht automx2 an den folgenden Stellen nach Anweisungen zur Laufzeitkonfiguration. Die erste Übereinstimmung bestimmt die verwendete Konfiguration.  


  env  : AUTOMX2_CONF   
  env  : AUTOMX2_CONF   
Zeile 149: Zeile 90:
  file : /etc/automx2.conf
  file : /etc/automx2.conf


Falls vorhanden, muss die Umgebungsvariable AUTOMX2_CONF auf den absoluten Pfad einer Konfigurationsdatei zeigen.


{| style="border-spacing:0;width:17cm;"
Um Parameter und Optionen anzugeben, verwendet automx2 eine [https://docs.python.org/3.9/library/configparser.html#supported-ini-file-structure INI Dateisyntax ].  
|- style="border:none;padding:0.049cm;"
* Die [https://github.com/rseichter/automx2/blob/master/contrib/automx2-sample.conf Beispiel Konfiguration ], die mit automx2 geliefert wird, sieht so aus:  
|| Falls vorhanden, muss die Umgebungsvariable AUTOMX2_CONF auf den absoluten Pfad einer Konfigurationsdatei zeigen.
|-
|}
Um Parameter und Optionen anzugeben, verwendet automx2 eine [https://docs.python.org/3.9/library/configparser.html#supported-ini-file-structure INI Dateisyntax ]. Die [https://github.com/rseichter/automx2/blob/master/contrib/automx2-sample.conf Beispiel Konfiguration ], die mit automx2 geliefert wird, sieht so aus:  


  [automx2]
  [automx2]
  <nowiki># A typical production setup would use loglevel WARNING.</nowiki>
  # A typical production setup would use loglevel WARNING.
  loglevel = DEBUG
  loglevel = DEBUG
  <nowiki># Echo SQL commands into log? Used for debugging.</nowiki>
  # Echo SQL commands into log? Used for debugging.
  db_echo = no
  db_echo = no
  <nowiki># In-memory SQLite database</nowiki>
  # In-memory SQLite database
  db_uri = sqlite:///:memory:
  db_uri = sqlite:///:memory:


  <nowiki># SQLite database in a UNIX-like file system</nowiki>
  # SQLite database in a UNIX-like file system
  <nowiki>#db_uri = sqlite:////var/lib/automx2/db.sqlite</nowiki>
  #db_uri = sqlite:////var/lib/automx2/db.sqlite


  <nowiki># MySQL database on a remote server. This example does not use an encrypted</nowiki>
  # MySQL database on a remote server.  
  <nowiki># connection and is therefore *not* recommended for production use.</nowiki>
* This example does not use an encrypted
  <nowiki>#db_uri = mysql://username:password@server.example.com/db</nowiki>
  # connection and is therefore *not* recommended for production use.
  #db_uri = mysql://username:password@server.example.com/db


  <nowiki># Number of proxy servers between automx2 and the client (default: 0).</nowiki>
  # Number of proxy servers between automx2 and the client (default: 0).
  <nowiki># If your logs only show 127.0.0.1 or ::1 as the source IP for incoming</nowiki>
  # If your logs only show 127.0.0.1 or ::1 as the source IP for incoming
  <nowiki># connections, proxy_count probably needs to be changed.</nowiki>
  # connections, proxy_count probably needs to be changed.
  proxy_count = 1
  proxy_count = 1


Platzieren Sie den Inhalt der Beispielkonfiguration an einem der von automx2 gesuchten Konfigurationsorte und passen Sie ihn an Ihre Bedürfnisse an. Konfigurieren Sie dann das Datenbank-Backend mit Daten, die zu Ihrem Setup passen, wie unten beschrieben.  
Platzieren Sie den Inhalt der Beispielkonfiguration an einem der von automx2 gesuchten Konfigurationsorte und passen Sie ihn an Ihre Bedürfnisse an.  
* Konfigurieren Sie dann das Datenbank-Backend mit Daten, die zu Ihrem Setup passen, wie unten beschrieben.


=== Automx2 eigenständig testen  ===
=== Automx2 eigenständig testen  ===
 
Wenn Sie überprüfen möchten, ob eine Vanilla-Installation von automx2 funktioniert, können Sie sie mit internen Testdaten füllen.  
Wenn Sie überprüfen möchten, ob eine Vanilla-Installation von automx2 funktioniert, können Sie sie mit internen Testdaten füllen. Starten Sie automx2 wie im Abschnitt [https://rseichter.github.io/automx2/#run Ausführen von automx2 ]und senden Sie die folgende Anfrage, um Ihre Datenbank zu füllen:  
* Starten Sie automx2 wie im Abschnitt [https://rseichter.github.io/automx2/#run Ausführen von automx2 ]und senden Sie die folgende Anfrage, um Ihre Datenbank zu füllen:  


  curl http://127.0.0.1:4243/initdb/
  curl http://127.0.0.1:4243/initdb/
Zeile 187: Zeile 127:
Dieses Beispiel geht davon aus, dass Sie automx2 auf localhost ausführen und TCP-Port 4243 abhören, was der vorgeschlagene Standardport ist.  
Dieses Beispiel geht davon aus, dass Sie automx2 auf localhost ausführen und TCP-Port 4243 abhören, was der vorgeschlagene Standardport ist.  


Nachdem Sie die Datenbank mit Beispieldaten gefüllt haben, können Sie testen, ob automx2 funktioniert. Verwenden Sie curl, um eine Kontokonfigurationsanforderung für user@example.com zu senden:  
Nachdem Sie die Datenbank mit Beispieldaten gefüllt haben, können Sie testen, ob automx2 funktioniert.  
* Verwenden Sie curl, um eine Kontokonfigurationsanforderung für user@example.com zu senden:  


  curl 'http://127.0.0.1:4243/mail/config-v1.1.xml?emailaddress=user@example.com'
  curl 'http://127.0.0.1:4243/mail/config-v1.1.xml?emailaddress=user@example.com'


Achten Sie, wie im Beispiel gezeigt, darauf, die URL nach Bedarf in Anführungszeichen zu setzen. Andernfalls führt Ihre Befehlsshell möglicherweise einen Musterabgleich für Zeichen wie das Fragezeichen durch <tt>?</tt>(FISCH tut es).  
Achten Sie, wie im Beispiel gezeigt, darauf, die URL nach Bedarf in Anführungszeichen zu setzen.  
* Andernfalls führt Ihre Befehlsshell möglicherweise einen Musterabgleich für Zeichen wie das Fragezeichen durch <tt>?</tt>(FISCH tut es).  


=== Datenbankkonfiguration  ===
=== Datenbankkonfiguration  ===
automx2 verwendet das SQLAlchemy-Toolkit, um auf Datenbanken zuzugreifen.
* Dadurch können verschiedene Datenbanken, auch [https://docs.sqlalchemy.org/en/latest/dialects/ Dialekte genannt ], verwendet werden, indem einfach die entsprechende Verbindungs-URL definiert wird.


automx2 verwendet das SQLAlchemy-Toolkit, um auf Datenbanken zuzugreifen. Dadurch können verschiedene Datenbanken, auch [https://docs.sqlalchemy.org/en/latest/dialects/ Dialekte genannt ], verwendet werden, indem einfach die entsprechende Verbindungs-URL definiert wird.
{|| class="wikitable sortable"  
 
|-  
 
{| style="border-spacing:0;width:17cm;"
|- style="border:none;padding:0.049cm;"
|| API-basierte Konfiguration  
|| API-basierte Konfiguration  


Ich erwäge das Hinzufügen einer API für Konfigurationsänderungen in einer kommenden Version, habe aber noch nicht entschieden, wann dies geschehen könnte. können Sie mich gerne kontaktieren [https://rseichter.github.io/automx2/#sponsorship Patenschaft ].  
Ich erwäge das Hinzufügen einer API für Konfigurationsänderungen in einer kommenden Version, habe aber noch nicht entschieden, wann dies geschehen könnte.  
 
* können Sie mich gerne kontaktieren [https://rseichter.github.io/automx2/#sponsorship Patenschaft ].  


|-
|-
Zeile 209: Zeile 150:


==== Datenbankunterstützung  ====
==== Datenbankunterstützung  ====
Während Sie wahrscheinlich bereits SQLite-Unterstützung auf Ihrem lokalen Computer haben, müssen Sie möglicherweise zusätzliche Python-Pakete für PostgreSQL, MySQL usw.
* installieren.
* Detaillierte Anweisungen zur Unterstützung eines bestimmten Datenbankdialekts sind in diesem Dokument nicht enthalten.
* Bitte suchen Sie im Internet nach detaillierten Anweisungen zur Unterstützung eines bestimmten Dialekts.
* Die SQLAlchemy-Dokumentation bietet einen nützlichen Ausgangspunkt.


Während Sie wahrscheinlich bereits SQLite-Unterstützung auf Ihrem lokalen Computer haben, müssen Sie möglicherweise zusätzliche Python-Pakete für PostgreSQL, MySQL usw. installieren. Detaillierte Anweisungen zur Unterstützung eines bestimmten Datenbankdialekts sind in diesem Dokument nicht enthalten. Bitte suchen Sie im Internet nach detaillierten Anweisungen zur Unterstützung eines bestimmten Dialekts. Die SQLAlchemy-Dokumentation bietet einen nützlichen Ausgangspunkt.
Während <tt>contrib</tt>Verzeichnis Beispieldatenbankschemata enthält, die Sie als Referenz verwenden können, empfehle ich die Verwendung der integrierten Methode, um die erforderliche DB-Struktur von Grund auf neu zu erstellen, indem Sie auf die zugreifen <tt>/initdb/</tt>Dienstendpunkt.  
 
* Dadurch wird die Datenbank auch mit einigen Beispieldaten gefüllt.  
Während <tt>contrib</tt>Verzeichnis Beispieldatenbankschemata enthält, die Sie als Referenz verwenden können, empfehle ich die Verwendung der integrierten Methode, um die erforderliche DB-Struktur von Grund auf neu zu erstellen, indem Sie auf die zugreifen <tt>/initdb/</tt>Dienstendpunkt. Dadurch wird die Datenbank auch mit einigen Beispieldaten gefüllt.  


Wenn Sie von einer frühen automx2-Version aktualisieren und Ihre vorhandene Datenbank migrieren möchten, können Sie die integrierte Alembic-Unterstützung verwenden. Dies erfordert jedoch das Klonen des Git-Repositorys, das Ändern <tt>alembic.ini</tt>und Aufrufen der Migration von der Befehlszeile. Es ist normalerweise einfacher, Ihre vorhandenen Daten zu exportieren, eine neue DB zu erstellen und die Daten zu importieren.  
Wenn Sie von einer frühen automx2-Version aktualisieren und Ihre vorhandene Datenbank migrieren möchten, können Sie die integrierte Alembic-Unterstützung verwenden.  
* Dies erfordert jedoch das Klonen des Git-Repositorys, das Ändern <tt>alembic.ini</tt>und Aufrufen der Migration von der Befehlszeile.  
* Es ist normalerweise einfacher, Ihre vorhandenen Daten zu exportieren, eine neue DB zu erstellen und die Daten zu importieren.  


==== SQLite  ====
==== SQLite  ====
Dieser Abschnitt zeigt, was Sie tun müssen, um SQLite Version 3 oder höher als Backend-Datenbank für automx2 zu verwenden.  
Dieser Abschnitt zeigt, was Sie tun müssen, um SQLite Version 3 oder höher als Backend-Datenbank für automx2 zu verwenden.  


Schritt 1: Legen Sie den Datenbank-URI in Ihrer automx2-Konfiguration fest. Bitte beachten Sie, dass die Angabe eines absoluten Pfades für die Datenbank insgesamt vier Schrägstriche nach der Schema-Kennung erfordert:  
Schritt 1: Legen Sie den Datenbank-URI in Ihrer automx2-Konfiguration fest.  
* Bitte beachten Sie, dass die Angabe eines absoluten Pfades für die Datenbank insgesamt vier Schrägstriche nach der Schema-Kennung erfordert:  


  [automx2]
  [automx2]
Zeile 229: Zeile 176:
  curl http://127.0.0.1:4243/initdb/
  curl http://127.0.0.1:4243/initdb/


Das Git-Repository enthält ein [https://rseichter.github.io/contrib/sqlite-generate.sh sqlite-generate.sh-Hilfsskript ], das demonstriert, wie die Datenbank programmgesteuert gefüllt werden kann. Sie müssen nur wenige Einstellungen Ihren Bedürfnissen anpassen:  
Das Git-Repository enthält ein [https://rseichter.github.io/contrib/sqlite-generate.sh sqlite-generate.sh-Hilfsskript ], das demonstriert, wie die Datenbank programmgesteuert gefüllt werden kann.  
* Sie müssen nur wenige Einstellungen Ihren Bedürfnissen anpassen:  


  PROVIDER_NAME='Example Inc.'
  PROVIDER_NAME='Example Inc.'
Zeile 238: Zeile 186:
  TLD='com'
  TLD='com'


Das Skript gibt die SQL-Anweisungen auf der Standardausgabe aus, an die weitergeleitet werden kann <tt>sqlite3</tt>zum Bearbeiten. Stellen Sie sicher, dass die automx2.conf übereinstimmt <tt>db_uri</tt>Einstellung bei der Angabe der Datenbank.  
Das Skript gibt die SQL-Anweisungen auf der Standardausgabe aus, an die weitergeleitet werden kann <tt>sqlite3</tt>zum Bearbeiten.  
* Stellen Sie sicher, dass die automx2.conf übereinstimmt <tt>db_uri</tt>Einstellung bei der Angabe der Datenbank.  


contrib/sqlite-generate.sh | sqlite3 /var/lib/automx2/db.sqlite
contrib/sqlite-generate.sh | sqlite3 /var/lib/automx2/db.sqlite
Zeile 245: Zeile 194:


==== MySQL  ====
==== MySQL  ====
Schritt 1: Erstellen Sie eine Datenbank.  
Schritt 1: Erstellen Sie eine Datenbank.  


  CREATE DATABASE `automx2` COLLATE 'utf8mb4_general_ci';
  CREATE DATABASE `automx2` COLLATE 'utf8mb4_general_ci';


Schritt 2: Legen Sie den Datenbank-URI in Ihrer automx2-Konfiguration fest. Das folgende Beispiel verwendet ''pymysql ''als DB-Treiber, der nicht in der automx2-Distribution enthalten ist.  
Schritt 2: Legen Sie den Datenbank-URI in Ihrer automx2-Konfiguration fest.  
* Das folgende Beispiel verwendet ''pymysql ''als DB-Treiber, der nicht in der automx2-Distribution enthalten ist.  


  [automx2]
  [automx2]
Zeile 259: Zeile 208:
  curl http://127.0.0.1:4243/initdb/
  curl http://127.0.0.1:4243/initdb/


=== Destillierkolben ===
=== Alembic ===
 
Wie in einem vorherigen Abschnitt erwähnt, können Sie [https://alembic.sqlalchemy.org/ Alembic ], um Ihre Datenbank zu erstellen oder zu aktualisieren.  
Wie in einem vorherigen Abschnitt erwähnt, können Sie [https://alembic.sqlalchemy.org/ Alembic ], um Ihre Datenbank zu erstellen oder zu aktualisieren. Sie müssen Ihren ersten Lauf mit einer leeren Datenbank starten, damit dies funktioniert, da Alembic Versionsinformationen in dieser Datenbank speichert. Datenbank-Upgrades basieren auf diesen Informationen. Befolgen Sie die nachstehenden Schritte, um die einzustellen <tt>RELEASE</tt>-Variable zum GitHub-Tag oder zur Release-Nummer Ihrer Wahl.  
* Sie müssen Ihren ersten Lauf mit einer leeren Datenbank starten, damit dies funktioniert, da Alembic Versionsinformationen in dieser Datenbank speichert.  
* Datenbank-Upgrades basieren auf diesen Informationen.  
* Befolgen Sie die nachstehenden Schritte, um die einzustellen <tt>RELEASE</tt>-Variable zum GitHub-Tag oder zur Release-Nummer Ihrer Wahl.  


  export RELEASE="2021.6"
  export RELEASE="2021.6"
Zeile 268: Zeile 219:
  cd automx2-$RELEASE/alembic
  cd automx2-$RELEASE/alembic


Ändern Sie als Nächstes den Wert für ''sqlalchemy.url ''in <tt>alembic.ini</tt>passend zu Ihrer automx2-Konfiguration. Erstellen Sie eine leere Datenbank, es sei denn, Sie verwenden SQLite. In diesem Fall erstellt Alembic die Datenbank für Sie. Die letzten Schritte sind die Aktivierung der virtuellen Python-Umgebung automx2 und das Aufrufen ''von make ''.  
Ändern Sie als Nächstes den Wert für ''sqlalchemy.url ''in <tt>alembic.ini</tt>passend zu Ihrer automx2-Konfiguration.  
* Erstellen Sie eine leere Datenbank, es sei denn, Sie verwenden SQLite.  
* In diesem Fall erstellt Alembic die Datenbank für Sie.  
* Die letzten Schritte sind die Aktivierung der virtuellen Python-Umgebung automx2 und das Aufrufen ''von make ''.  


  source /path/to/automx2/.venv/bin/activate
  source /path/to/automx2/.venv/bin/activate
Zeile 275: Zeile 229:
Sie sollten eine Ausgabe ähnlich der folgenden sehen:  
Sie sollten eine Ausgabe ähnlich der folgenden sehen:  


  PYTHONPATH=.. FLASK_APP=automx2.server:app flask db upgrade -d .
  PYTHONPATH=..  
* FLASK_APP=automx2.server:app flask db upgrade -d .
  Running automx2 version 2021.6
  Running automx2 version 2021.6
  INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
  INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
Zeile 285: Zeile 240:
  INFO  [alembic.runtime.migration] Running upgrade 5334f8a8282c -> 43ebb40d0578, DAV server support
  INFO  [alembic.runtime.migration] Running upgrade 5334f8a8282c -> 43ebb40d0578, DAV server support


== Ausführen von automx2  ==


Zum Ausführen von automx2 muss automx2 als Dienst gestartet und seine Ausgabe über einen Webserver der Öffentlichkeit bereitgestellt werden. Sie sollten automx2 nicht mit Superuser-Rechten ausführen. Verwenden Sie stattdessen einen dedizierten Benutzer.  
== Konfigurieren eines Webservers  ==
Obwohl es technisch möglich ist, automx2 ohne einen Webserver davor zu betreiben, empfehle ich dies nicht in einer Produktionsumgebung.
* Ein Webserver kann Funktionen bereitstellen, für die automx2 nicht entwickelt wurde.
* Features wie die Kryptografie der Transportschicht für HTTPS (erforderlich für [https://rseichter.github.io/automx2/#mobileconfig Mobileconfig ]) oder beispielsweise die Möglichkeit, Clients zu begrenzen, werden von vollwertigen Webservern, die als Reverse-Proxys arbeiten, sehr gut gehandhabt.  
* Es wäre Verschwendung, all dies in einem Webdienst neu zu implementieren.  


Die folgenden Beispiele gehen davon aus, dass Sie einen Benutzer und eine Gruppe erstellt haben <tt>automx2</tt> und diesem Benutzer die entsprechenden Rechte eingeräumt haben: * Leseberechtigungen für die <tt>automx2.conf</tt>Konfigurationsdatei.
In diesem Abschnitt wird erläutert, wie Sie einen Webserver als Reverse-Proxy vor automx2 konfigurieren.
* Lese- und Zugriffsberechtigungen für die virtuelle Python-Umgebung.
* Bevor Sie den Proxy einrichten, müssen Sie automx2 mitteilen, dass er hinter einem Proxy arbeitet.
* Lese- und Zugriffsberechtigungen für die SQLite-Datenbank.
* Ergänzen Sie die <tt>proxy_count</tt>Parameter in Ihre automx2-Konfigurationsdatei oder kommentieren Sie den Parameter aus, wenn er bereits vorhanden ist:


[automx2]
# A typical production setup would use loglevel = WARNING
loglevel = WARNING
# Disable SQL command echo. 
db_echo = no
# SQLite database in a UNIX-like file system
db_uri = sqlite:////var/lib/automx2/db.sqlite
# Number of proxy servers between automx2 and the client (default: 0).
# If your logs only show 127.0.0.1 or ::1 as the source IP for incoming
# connections, proxy_count probably needs to be changed. 
proxy_count = 1


'''Das Echoen von SQL-Befehlen ist nur für Debugging-Zwecke gedacht'''
Stellen Sie die Zahl so ein, dass sie die Anzahl der Proxys widerspiegelt, die vor automx2 verkettet sind, dh die Anzahl der "Proxy-Hops", die eine Client-Anfrage passieren muss, bevor sie automx2 erreicht.


=== Als Systemdienst ===
=== Apache ===
Das folgende Beispiel zeigt eine ähnliche Apache-Konfiguration wie oben. <tt>ProxyPreserveHost</tt>Anweisungen veranlassen Apache, relevante Daten über die Herkunft eingehender Anfragen weiterzugeben.


Wenn Ihr System ''systemd ''verwendet, möchten Sie möglicherweise die folgende [https://rseichter.github.io/contrib/automx2.service automx2.service ]aus dem Abschnitt contrib bereitstellen und <tt>/etc/systemd/system/automx2.service</tt>:
# Apache 2.4 example configuration snippet to forward incoming requests to automx2.
 
  # vim:ts=4:sw=4:et:ft=apache
  [Unit]
   
After=network.target
  <VirtualHost *:80>
  Description=MUA configuration service
    ServerName autoconfig.example.com
  Documentation=https://rseichter.github.io/automx2/
    ServerAlias autodiscover.example.com
 
    ProxyPreserveHost On
[Service]
    ProxyPass "/" "http://127.0.0.1:4243/"
Environment=FLASK_APP=automx2.server:app
    ProxyPassReverse "/" "http://127.0.0.1:4243/"
Environment=FLASK_CONFIG=production
    <Location /initdb>
ExecStart=/srv/www/automx2/bin/flask run --host=127.0.0.1 --port=4243
        # Limit access to clients connecting from localhost
Restart=always
        Order Deny,Allow
User=automx2
        Deny from all
WorkingDirectory=/var/lib/automx2
        Allow from 127.0.0.1
 
    </Location>
[Install]
  </VirtualHost>
WantedBy=multi-user.target
 
Sobald Sie den Dienst installiert haben, müssen Sie systemd anweisen, die Liste der verfügbaren Dienste neu zu laden:  
 
sudo systemctl daemon-reload
 
Es sollte jetzt in der Lage sein, Sie über einen Dienst namens automx2 zu informieren:
 
sudo systemctl status automx2
● automx2.service - MUA configuration service
      Loaded: loaded (/etc/systemd/system/automx2.service; disabled; vendor preset: enabled)
      Active: inactive (dead)
 
Als nächstes aktivieren und starten Sie automx2 mit dem folgenden Befehl:
 
  sudo systemctl enable automx2 --now
Created symlink /etc/systemd/system/multi-user.target.wants/automx2.service → /etc/systemd/system/automx2.service.


Sie sollten sehen, dass automx2 aktiviert ist und ausgeführt wird:
== Dateien ==
 
sudo systemctl status automx2
● automx2.service - MUA configuration service
      Loaded: loaded (/etc/systemd/system/automx2.service; enabled; vendor preset: enabled)
      Active: active (running) since Mon 2021-03-01 12:54:31 CET; 19s ago
    Main PID: 126966 (python)
      Tasks: 1 (limit: 4620)
      Memory: 46.1M
      CGroup: /system.slice/automx2.service
              └─126966 /srv/www/automx2/bin/flask run --host=127.0.0.1 --port=4243
[...]
Mar 01 12:54:32 mail python[126966]: Reading /etc/automx2.conf
Mar 01 12:54:32 mail python[126966]: Config.get: loglevel = WARNING
Mar 01 12:54:32 mail python[126966]:  <nowiki>* Running on http://127.0.0.1:4243/ (Press CTRL+C to quit)</nowiki>
 
beschrieben mit dem Testen von automx2 beginnen [https://rseichter.github.io/automx2/#localtest unten ].
 
=== Manuell aus einer Shell  ===
 
Wechseln Sie als nichtprivilegierter Benutzer in das Installationsverzeichnis und starten Sie die <tt>.venv/scripts/flask.sh</tt>Startskript:
 
cd /srv/web/automx2
.venv/scripts/flask.sh run --host=127.0.0.1 --port=4243
 
 
{| style="border-spacing:0;width:17cm;"
|- style="border:none;padding:0.049cm;"
|| Handhabung der Terminalausgabe
 
Das Startskript lässt automx2 absichtlich im Vordergrund laufen und die Protokolldaten werden im Terminal angezeigt. Wenn Sie Strg-C drücken oder die Shell-Sitzung schließen, wird die Anwendung beendet. Um automx2 im Hintergrund auszuführen, können Sie einen Fenstermanager wie [https://www.gnu.org/software/screen/ GNU Bildschirm ]oder [https://en.wikipedia.org/wiki/Tmux tmux ].
|-
|}
Nachdem automx2 nun läuft, müssen Sie den Webserver-Proxy konfigurieren, der Anfragen von außen entgegennimmt und an automx2 weiterleitet.


= Anwendung =
== Automx2 lokal testen  ==
== Automx2 lokal testen  ==
 
Sie können ''curl ''in einer Befehlsshell verwenden, um eine GET-Anforderung an Ihre lokale automx2-Instanz zu senden.  
Sie können ''curl ''in einer Befehlsshell verwenden, um eine GET-Anforderung an Ihre lokale automx2-Instanz zu senden. Das folgende Beispiel geht davon aus, dass Ihr Dienst auf localhost auf Port 4243 ausgeführt wird. Die genaue Ausgabe hängt von Ihrem Datenbankinhalt ab, sollte aber ähnlich aussehen.  
* Das folgende Beispiel geht davon aus, dass Ihr Dienst auf localhost auf Port 4243 ausgeführt wird.  
* Die genaue Ausgabe hängt von Ihrem Datenbankinhalt ab, sollte aber ähnlich aussehen.  


  curl 'http://127.0.0.1:4243/mail/config-v1.1.xml?emailaddress=user@example.com'
  curl 'http://127.0.0.1:4243/mail/config-v1.1.xml?emailaddress=user@example.com'
Zeile 402: Zeile 329:
  </clientConfig>
  </clientConfig>


Nachdem Sie überprüft haben, dass automx2 Konfigurationsdaten zurückgibt, sollten Sie den Dienst mithilfe eines Webservers als Proxy verfügbar machen.  
Nachdem Sie überprüft haben, dass automx2 Konfigurationsdaten zurückgibt, sollten Sie den Dienst mithilfe eines Webservers als Proxy verfügbar machen.
 
== Konfigurieren eines Webservers  ==
 
Obwohl es technisch möglich ist, automx2 ohne einen Webserver davor zu betreiben, empfehle ich dies nicht in einer Produktionsumgebung. Ein Webserver kann Funktionen bereitstellen, für die automx2 nicht entwickelt wurde. Features wie die Verschlüsselung der Transportschicht für HTTPS (erforderlich für [https://rseichter.github.io/automx2/#mobileconfig Mobileconfig ]) oder beispielsweise die Möglichkeit, Clients zu begrenzen, werden von vollwertigen Webservern, die als Reverse-Proxys arbeiten, sehr gut gehandhabt. Es wäre Verschwendung, all dies in einem Webdienst neu zu implementieren.
 
In diesem Abschnitt wird erläutert, wie Sie einen Webserver als Reverse-Proxy vor automx2 konfigurieren. Bevor Sie den Proxy einrichten, müssen Sie automx2 mitteilen, dass er hinter einem Proxy arbeitet. Ergänzen Sie die <tt>proxy_count</tt>Parameter in Ihre automx2-Konfigurationsdatei oder kommentieren Sie den Parameter aus, wenn er bereits vorhanden ist:
 
[automx2]
<nowiki># A typical production setup would use loglevel = WARNING</nowiki>
loglevel = WARNING
 
<nowiki># Disable SQL command echo. </nowiki>
db_echo = no
 
<nowiki># SQLite database in a UNIX-like file system</nowiki>
db_uri = sqlite:////var/lib/automx2/db.sqlite
 
<nowiki># Number of proxy servers between automx2 and the client (default: 0).</nowiki>
<nowiki># If your logs only show 127.0.0.1 or ::1 as the source IP for incoming</nowiki>
<nowiki># connections, proxy_count probably needs to be changed. </nowiki>
proxy_count = 1
 
 
{| style="border-spacing:0;width:17cm;"
|- style="border:none;padding:0.049cm;"
|| Das Echoen von SQL-Befehlen ist nur für Debugging-Zwecke gedacht.
|- style="border:none;padding:0.049cm;"
|| Stellen Sie die Zahl so ein, dass sie die Anzahl der Proxys widerspiegelt, die vor automx2 verkettet sind, dh die Anzahl der "Proxy-Hops", die eine Client-Anfrage passieren muss, bevor sie automx2 erreicht.
 
 
|-
|}


=== Apache  ===
= Dokumentation =
#
== Man-Page ==
== Info-Pages ==
= Links =
== Intern ==
== Weblinks ==
# [https://mail.sys4.de/mailman/listinfo/automx-users Mailingliste]
# [https://github.com/rseichter/automx2/issues Issue-Tracker]
# https://rseichter.github.io/automx2/#muaconf


Das folgende Beispiel zeigt eine ähnliche Apache-Konfiguration wie oben. <tt>ProxyPreserveHost</tt>Anweisungen veranlassen Apache, relevante Daten über die Herkunft eingehender Anfragen weiterzugeben.
<nowiki># Apache 2.4 example configuration snippet to forward incoming requests to automx2.</nowiki>
<nowiki># vim:ts=4:sw=4:et:ft=apache</nowiki>
<VirtualHost *:80>
    ServerName autoconfig.example.com
    ServerAlias autodiscover.example.com
    ProxyPreserveHost On
    ProxyPass "/" "http://127.0.0.1:4243/"
    ProxyPassReverse "/" "http://127.0.0.1:4243/"
    <Location /initdb>
        <nowiki># Limit access to clients connecting from localhost</nowiki>
        Order Deny,Allow
        Deny from all
        Allow from 127.0.0.1
    </Location>
</VirtualHost>


== Kontakt  ==


Wenn Sie Fragen zur Einrichtung oder zum Betrieb von automx2 haben oder wenn Sie Funktionen besprechen oder vorschlagen möchten, verwenden Sie bitte die [https://mail.sys4.de/mailman/listinfo/automx-users Mailingliste ]als bevorzugtes Mittel, um mich zu kontaktieren. Dies erleichtert anderen Benutzern die Teilnahme, und es ist normalerweise wenig Verkehr, sodass Sie sich keine Gedanken über die Lautstärke machen müssen. Es ist auch ein [https://github.com/rseichter/automx2/issues Issue-Tracker ]verfügbar. Sollten Sie Interesse haben, das Projekt als Sponsor zu unterstützen, finden Sie im [https://rseichter.github.io/automx2/#sponsorship Sponsoring ].
[[Kategorie:Autodiscover]]

Aktuelle Version vom 6. November 2024, 12:26 Uhr

automx2 - Dienst zur automatischen Konfiguration von E-Mail-Clients

Beschreibung

automx2 ist ein Webdienst.

  • Es befindet sich normalerweise hinter einem Webserver und wartet auf Konfigurationsanfragen
  • Wenn ein E-Mail-Benutzeragent (MUA), auch als E-Mail-Client bezeichnet, eine Konfiguration anfordert, kontaktiert er den Webserver.
  • Der Webserver fungiert dann als Proxy und leitet alle Anfragen an automx2 weiter und gibt Antworten an den MUA zurück.
Image:Bild1.png

Installation

automx2 benötigt zur Ausführung Python ab Version 3.7, idealerweise in Form einer virtuellen Python-Umgebung. Überprüfen Sie die Python3-Version wie folgt:

$ python3 --version
Python 3.9.9

Nicht als root ausführen

Wenn Sie eine Portnummer größer als 1024 verwenden (ich schlage Port 4243 vor), benötigt die Anwendung beim Ausführen keine Superuser-Rechte.

  • Dies würde ein Sicherheitsrisiko darstellen und wird daher dringend davon abgeraten.
  • Ich empfehle die Erstellung eines neuen Benutzerkontos namens automx2.

Bereiten Sie die virtuelle Umgebung für den automx2-Webdienst vor, indem Sie den Installationspfad nach Ihrem Geschmack anpassen (automx2 selbst kümmert sich nicht darum).

  • Der Weg /srv/web/automx2wird in dieser Dokumentation als Beispiel verwendet.
  • Die folgenden BASH-Shell-Befehle sollten mit jeder modernen Linux-Distribution funktionieren.
  1. Best practice: Create a fresh user account.
# useradd --home-dir /srv/web/automx2 --create-home automx2
  1. Alternative: If the user account already exists.
# bash -c 'mkdir -p /srv/web/automx2 && chown automx2 /srv/web/automx2'

Stellen Sie als Nächstes sicher, dass Sie sich entweder als der oben erstellte Benutzer anmelden oder über den Befehl „su“ zu diesem Benutzer wechseln.

  • Dies ist wichtig, um die richtigen Dateiberechtigungen sicherzustellen.
  • Laden Sie das Skript herunter, das Ihren automx2-Dienst herunterlädt und einrichtet:
cd /srv/web/automx2
wget https://github.com/rseichter/automx2/raw/master/contrib/setupvenv.sh
chmod u+x setupvenv.sh

Durch Ausführen des Setup-Skripts wird eine virtuelle Python-Umgebung namens erstellt .venvim aktuellen Verzeichnis.

./setupvenv.sh

Aktivieren Sie die virtuelle Umgebung und installieren Sie die neueste automx2-Version von PyPI.

  • Stellen Sie sicher, dass Sie die richtige Aktivierung für Ihre Shell aus der auswählen .venv/binVerzeichnis.
  • Dies ist ein Beispiel für BASH:
source .venv/bin/activate
pip install automx2
Aktualisieren auf eine neuere automx2-Version

Wechseln Sie in das Verzeichnis, in dem zuvor automx2 installiert wurde.

Aktivieren Sie die virtuelle Umgebung wie gewohnt und verwenden Sie Pips --upgrade option:

cd /srv/web/automx2
source .venv/bin/activate
pip install --upgrade automx2

Syntax

Parameter

Optionen

Konfiguration

automx2 verwendet eine Datei, um Laufzeitanweisungen zu lesen, und eine Datenbank, um Konfigurationsdaten für E-Mail-Konten nachzuschlagen.

Platzhalter

Um die Konfiguration bequemer zu machen, unterstützt automx2 Platzhalter im Mozilla-Stil .

  • Zum Beispiel die Zeichenfolge %EMAILADDRESS%in Datenbankeinträgen wird durch die bei der Abfrage angegebene E-Mail-Adresse ersetzt.
  • Obwohl automx2 auf einer proprietären Funktion von Autoconfig basiert, wendet es Platzhalter auch auf Autodiscover- und Mobileconfig-Antworten an.

Laufzeitkonfiguration

Die Konfigurationsdatei definiert das Laufzeitverhalten von automx2 und gibt das Backend an, aus dem automx2 die Konfigurationsdaten des Postfachkontos lesen soll.

Läuft ohne Laufzeitkonfiguration
Wenn Sie automx2 ohne Konfigurationsdatei starten, verwendet es interne Standardeinstellungen. 
* Diese sind nur zum Testen geeignet. 
* Wird es ohne Konfiguration gestartet, verwendet es eine In-Memory-SQLite-Datenbank und alle Daten gehen verloren, sobald die Anwendung beendet wird. 

Während des Starts sucht automx2 an den folgenden Stellen nach Anweisungen zur Laufzeitkonfiguration.

  • Die erste Übereinstimmung bestimmt die verwendete Konfiguration.
env  : AUTOMX2_CONF  
file : ~/.automx2.conf
file : /etc/automx2/automx2.conf
file : /etc/automx2.conf

Falls vorhanden, muss die Umgebungsvariable AUTOMX2_CONF auf den absoluten Pfad einer Konfigurationsdatei zeigen.

Um Parameter und Optionen anzugeben, verwendet automx2 eine INI Dateisyntax .

[automx2]
# A typical production setup would use loglevel WARNING.
loglevel = DEBUG
# Echo SQL commands into log? Used for debugging.
db_echo = no
# In-memory SQLite database
db_uri = sqlite:///:memory:
# SQLite database in a UNIX-like file system
#db_uri = sqlite:////var/lib/automx2/db.sqlite
# MySQL database on a remote server. 
  • This example does not use an encrypted
# connection and is therefore *not* recommended for production use.
#db_uri = mysql://username:password@server.example.com/db
# Number of proxy servers between automx2 and the client (default: 0).
# If your logs only show 127.0.0.1 or ::1 as the source IP for incoming
# connections, proxy_count probably needs to be changed.
proxy_count = 1

Platzieren Sie den Inhalt der Beispielkonfiguration an einem der von automx2 gesuchten Konfigurationsorte und passen Sie ihn an Ihre Bedürfnisse an.

  • Konfigurieren Sie dann das Datenbank-Backend mit Daten, die zu Ihrem Setup passen, wie unten beschrieben.

Automx2 eigenständig testen

Wenn Sie überprüfen möchten, ob eine Vanilla-Installation von automx2 funktioniert, können Sie sie mit internen Testdaten füllen.

  • Starten Sie automx2 wie im Abschnitt Ausführen von automx2 und senden Sie die folgende Anfrage, um Ihre Datenbank zu füllen:
curl http://127.0.0.1:4243/initdb/

Dieses Beispiel geht davon aus, dass Sie automx2 auf localhost ausführen und TCP-Port 4243 abhören, was der vorgeschlagene Standardport ist.

Nachdem Sie die Datenbank mit Beispieldaten gefüllt haben, können Sie testen, ob automx2 funktioniert.

  • Verwenden Sie curl, um eine Kontokonfigurationsanforderung für user@example.com zu senden:
curl 'http://127.0.0.1:4243/mail/config-v1.1.xml?emailaddress=user@example.com'

Achten Sie, wie im Beispiel gezeigt, darauf, die URL nach Bedarf in Anführungszeichen zu setzen.

  • Andernfalls führt Ihre Befehlsshell möglicherweise einen Musterabgleich für Zeichen wie das Fragezeichen durch ?(FISCH tut es).

Datenbankkonfiguration

automx2 verwendet das SQLAlchemy-Toolkit, um auf Datenbanken zuzugreifen.

  • Dadurch können verschiedene Datenbanken, auch Dialekte genannt , verwendet werden, indem einfach die entsprechende Verbindungs-URL definiert wird.
API-basierte Konfiguration

Ich erwäge das Hinzufügen einer API für Konfigurationsänderungen in einer kommenden Version, habe aber noch nicht entschieden, wann dies geschehen könnte.

Datenbankunterstützung

Während Sie wahrscheinlich bereits SQLite-Unterstützung auf Ihrem lokalen Computer haben, müssen Sie möglicherweise zusätzliche Python-Pakete für PostgreSQL, MySQL usw.

  • installieren.
  • Detaillierte Anweisungen zur Unterstützung eines bestimmten Datenbankdialekts sind in diesem Dokument nicht enthalten.
  • Bitte suchen Sie im Internet nach detaillierten Anweisungen zur Unterstützung eines bestimmten Dialekts.
  • Die SQLAlchemy-Dokumentation bietet einen nützlichen Ausgangspunkt.

Während contribVerzeichnis Beispieldatenbankschemata enthält, die Sie als Referenz verwenden können, empfehle ich die Verwendung der integrierten Methode, um die erforderliche DB-Struktur von Grund auf neu zu erstellen, indem Sie auf die zugreifen /initdb/Dienstendpunkt.

  • Dadurch wird die Datenbank auch mit einigen Beispieldaten gefüllt.

Wenn Sie von einer frühen automx2-Version aktualisieren und Ihre vorhandene Datenbank migrieren möchten, können Sie die integrierte Alembic-Unterstützung verwenden.

  • Dies erfordert jedoch das Klonen des Git-Repositorys, das Ändern alembic.iniund Aufrufen der Migration von der Befehlszeile.
  • Es ist normalerweise einfacher, Ihre vorhandenen Daten zu exportieren, eine neue DB zu erstellen und die Daten zu importieren.

SQLite

Dieser Abschnitt zeigt, was Sie tun müssen, um SQLite Version 3 oder höher als Backend-Datenbank für automx2 zu verwenden.

Schritt 1: Legen Sie den Datenbank-URI in Ihrer automx2-Konfiguration fest.

  • Bitte beachten Sie, dass die Angabe eines absoluten Pfades für die Datenbank insgesamt vier Schrägstriche nach der Schema-Kennung erfordert:
[automx2]
db_uri = sqlite:////var/lib/automx2/db.sqlite

Schritt 2: Starten Sie automx2 und greifen Sie auf die DB-Initialisierungs-URL zu:

curl http://127.0.0.1:4243/initdb/

Das Git-Repository enthält ein sqlite-generate.sh-Hilfsskript , das demonstriert, wie die Datenbank programmgesteuert gefüllt werden kann.

  • Sie müssen nur wenige Einstellungen Ihren Bedürfnissen anpassen:
PROVIDER_NAME='Example Inc.'
PROVIDER_SHORTNAME='Example'
PROVIDER_ID=100
DOM='example'
TLD='com'

Das Skript gibt die SQL-Anweisungen auf der Standardausgabe aus, an die weitergeleitet werden kann sqlite3zum Bearbeiten.

  • Stellen Sie sicher, dass die automx2.conf übereinstimmt db_uriEinstellung bei der Angabe der Datenbank.

contrib/sqlite-generate.sh | sqlite3 /var/lib/automx2/db.sqlite

Sobald Sie die Datenbank gefüllt haben, ist automx2 betriebsbereit.

MySQL

Schritt 1: Erstellen Sie eine Datenbank.

CREATE DATABASE `automx2` COLLATE 'utf8mb4_general_ci';

Schritt 2: Legen Sie den Datenbank-URI in Ihrer automx2-Konfiguration fest.

  • Das folgende Beispiel verwendet pymysql als DB-Treiber, der nicht in der automx2-Distribution enthalten ist.
[automx2]
db_uri = mysql+pymysql://user:pass@dbhost/automx2?charset=utf8mb4

Schritt 3: Starten Sie automx2 und greifen Sie auf die DB-Initialisierungs-URL zu:

curl http://127.0.0.1:4243/initdb/

Alembic

Wie in einem vorherigen Abschnitt erwähnt, können Sie Alembic , um Ihre Datenbank zu erstellen oder zu aktualisieren.

  • Sie müssen Ihren ersten Lauf mit einer leeren Datenbank starten, damit dies funktioniert, da Alembic Versionsinformationen in dieser Datenbank speichert.
  • Datenbank-Upgrades basieren auf diesen Informationen.
  • Befolgen Sie die nachstehenden Schritte, um die einzustellen RELEASE-Variable zum GitHub-Tag oder zur Release-Nummer Ihrer Wahl.
export RELEASE="2021.6"
wget https://github.com/rseichter/automx2/archive/refs/tags/$RELEASE.zip
unzip $RELEASE.zip
cd automx2-$RELEASE/alembic

Ändern Sie als Nächstes den Wert für sqlalchemy.url in alembic.inipassend zu Ihrer automx2-Konfiguration.

  • Erstellen Sie eine leere Datenbank, es sei denn, Sie verwenden SQLite.
  • In diesem Fall erstellt Alembic die Datenbank für Sie.
  • Die letzten Schritte sind die Aktivierung der virtuellen Python-Umgebung automx2 und das Aufrufen von make .
source /path/to/automx2/.venv/bin/activate
make upgrade

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

PYTHONPATH=.. 
  • FLASK_APP=automx2.server:app flask db upgrade -d .
Running automx2 version 2021.6
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.runtime.migration] Running upgrade  -> f62e64b43d2f, DB schema for automx2 version 2020.0
Created: 2020-01-17 22:30:05.748651
INFO  [alembic.runtime.migration] Running upgrade f62e64b43d2f -> 5334f8a8282c, Add "prio" column to "server" table.
Created: 2020-12-15 15:04:49.371802
INFO  [alembic.runtime.migration] Running upgrade 5334f8a8282c -> 43ebb40d0578, DAV server support


Konfigurieren eines Webservers

Obwohl es technisch möglich ist, automx2 ohne einen Webserver davor zu betreiben, empfehle ich dies nicht in einer Produktionsumgebung.

  • Ein Webserver kann Funktionen bereitstellen, für die automx2 nicht entwickelt wurde.
  • Features wie die Kryptografie der Transportschicht für HTTPS (erforderlich für Mobileconfig ) oder beispielsweise die Möglichkeit, Clients zu begrenzen, werden von vollwertigen Webservern, die als Reverse-Proxys arbeiten, sehr gut gehandhabt.
  • Es wäre Verschwendung, all dies in einem Webdienst neu zu implementieren.

In diesem Abschnitt wird erläutert, wie Sie einen Webserver als Reverse-Proxy vor automx2 konfigurieren.

  • Bevor Sie den Proxy einrichten, müssen Sie automx2 mitteilen, dass er hinter einem Proxy arbeitet.
  • Ergänzen Sie die proxy_countParameter in Ihre automx2-Konfigurationsdatei oder kommentieren Sie den Parameter aus, wenn er bereits vorhanden ist:
[automx2]
# A typical production setup would use loglevel = WARNING
loglevel = WARNING

# Disable SQL command echo.  
db_echo = no

# SQLite database in a UNIX-like file system
db_uri = sqlite:////var/lib/automx2/db.sqlite

# Number of proxy servers between automx2 and the client (default: 0).
# If your logs only show 127.0.0.1 or ::1 as the source IP for incoming
# connections, proxy_count probably needs to be changed.  
proxy_count = 1
Das Echoen von SQL-Befehlen ist nur für Debugging-Zwecke gedacht
Stellen Sie die Zahl so ein, dass sie die Anzahl der Proxys widerspiegelt, die vor automx2 verkettet sind, dh die Anzahl der "Proxy-Hops", die eine Client-Anfrage passieren muss, bevor sie automx2 erreicht. 

Apache

Das folgende Beispiel zeigt eine ähnliche Apache-Konfiguration wie oben. ProxyPreserveHostAnweisungen veranlassen Apache, relevante Daten über die Herkunft eingehender Anfragen weiterzugeben.

# Apache 2.4 example configuration snippet to forward incoming requests to automx2.
# vim:ts=4:sw=4:et:ft=apache

<VirtualHost *:80>
    ServerName autoconfig.example.com
    ServerAlias autodiscover.example.com
    ProxyPreserveHost On
    ProxyPass "/" "http://127.0.0.1:4243/"
    ProxyPassReverse "/" "http://127.0.0.1:4243/"
    <Location /initdb>
        # Limit access to clients connecting from localhost
        Order Deny,Allow
        Deny from all
        Allow from 127.0.0.1
    </Location>
</VirtualHost>

Dateien

Anwendung

Automx2 lokal testen

Sie können curl in einer Befehlsshell verwenden, um eine GET-Anforderung an Ihre lokale automx2-Instanz zu senden.

  • Das folgende Beispiel geht davon aus, dass Ihr Dienst auf localhost auf Port 4243 ausgeführt wird.
  • Die genaue Ausgabe hängt von Ihrem Datenbankinhalt ab, sollte aber ähnlich aussehen.
curl 'http://127.0.0.1:4243/mail/config-v1.1.xml?emailaddress=user@example.com'
<clientConfig version="1.1">
    <emailProvider id="automx2-100">
        <identity/>
        <domain>example.com</domain>
        <displayName>Example Inc.</displayName>
        <displayShortName>Example</displayShortName>
        <incomingServer type="imap">
            <hostname>mail.example.com</hostname>
            <port>993</port>
            <socketType>SSL</socketType>
            <username>%EMAILADDRESS%</username>
            <authentication>plain</authentication>
        </incomingServer>
        <incomingServer type="pop3">
            <hostname>mail.example.com</hostname>
            <port>110</port>
            <socketType>STARTTLS</socketType>
            <username>%EMAILADDRESS%</username>
            <authentication>plain</authentication>
        </incomingServer>
        <outgoingServer type="smtp">
            <hostname>mail.example.com</hostname>
            <port>587</port>
            <socketType>STARTTLS</socketType>
            <username>%EMAILADDRESS%</username>
            <authentication>plain</authentication>
        </outgoingServer>
    </emailProvider>
</clientConfig>

Nachdem Sie überprüft haben, dass automx2 Konfigurationsdaten zurückgibt, sollten Sie den Dienst mithilfe eines Webservers als Proxy verfügbar machen.

Dokumentation

Man-Page

Info-Pages

Links

Intern

Weblinks

  1. Mailingliste
  2. Issue-Tracker
  3. https://rseichter.github.io/automx2/#muaconf