From 921ecf3073a254f493cba20784d24b76f084515f Mon Sep 17 00:00:00 2001 From: DerLinkman Date: Sun, 30 Jan 2022 15:28:48 +0100 Subject: [PATCH] Added Troubleshooting Section + German Translation --- docs/assets/images/mailcow-bl_wl.png | Bin 0 -> 12338 bytes docs/assets/images/mailcow-spamalias.png | Bin 0 -> 41444 bytes docs/assets/images/mailcow-spamfilter.png | Bin 0 -> 32990 bytes docs/assets/images/mailcow-tagging.png | Bin 0 -> 25050 bytes .../troubleshooting/mailcow-backupmx.png | Bin 0 -> 6740 bytes docs/index.de.md | 8 +- docs/index.en.md | 8 +- .../debug-admin_login_sogo.de.md | 42 ++++++++ .../debug-admin_login_sogo.en.md | 44 +++++++++ .../debug-attach_service.de.md | 47 +++++++++ .../debug-attach_service.en.md | 47 +++++++++ .../debug-common_problems.de.md | 92 +++++++++++++++++ .../debug-common_problems.en.md | 92 +++++++++++++++++ docs/troubleshooting/debug-logs.de.md | 14 +++ docs/troubleshooting/debug-logs.en.md | 14 +++ docs/troubleshooting/debug-mysql_aria.de.md | 22 +++++ docs/troubleshooting/debug-mysql_aria.en.md | 22 +++++ .../debug-mysql_upgrades.de.md | 15 +++ .../debug-mysql_upgrades.en.md | 15 +++ docs/troubleshooting/debug-reset_pw.de.md | 93 ++++++++++++++++++ docs/troubleshooting/debug-reset_pw.en.md | 93 ++++++++++++++++++ docs/troubleshooting/debug-reset_tls.de.md | 17 ++++ docs/troubleshooting/debug-reset_tls.en.md | 17 ++++ docs/troubleshooting/debug-rm_volumes.de.md | 17 ++++ docs/troubleshooting/debug-rm_volumes.en.md | 17 ++++ .../debug-rspamd_memory_leaks.de.md | 27 +++++ .../debug-rspamd_memory_leaks.en.md | 27 +++++ docs/troubleshooting/debug.de.md | 9 ++ docs/troubleshooting/debug.en.md | 9 ++ mkdocs.yml | 24 ++--- 30 files changed, 814 insertions(+), 18 deletions(-) create mode 100644 docs/assets/images/mailcow-bl_wl.png create mode 100644 docs/assets/images/mailcow-spamalias.png create mode 100644 docs/assets/images/mailcow-spamfilter.png create mode 100644 docs/assets/images/mailcow-tagging.png create mode 100644 docs/assets/images/troubleshooting/mailcow-backupmx.png create mode 100644 docs/troubleshooting/debug-admin_login_sogo.de.md create mode 100644 docs/troubleshooting/debug-admin_login_sogo.en.md create mode 100644 docs/troubleshooting/debug-attach_service.de.md create mode 100644 docs/troubleshooting/debug-attach_service.en.md create mode 100644 docs/troubleshooting/debug-common_problems.de.md create mode 100644 docs/troubleshooting/debug-common_problems.en.md create mode 100644 docs/troubleshooting/debug-logs.de.md create mode 100644 docs/troubleshooting/debug-logs.en.md create mode 100644 docs/troubleshooting/debug-mysql_aria.de.md create mode 100644 docs/troubleshooting/debug-mysql_aria.en.md create mode 100644 docs/troubleshooting/debug-mysql_upgrades.de.md create mode 100644 docs/troubleshooting/debug-mysql_upgrades.en.md create mode 100644 docs/troubleshooting/debug-reset_pw.de.md create mode 100644 docs/troubleshooting/debug-reset_pw.en.md create mode 100644 docs/troubleshooting/debug-reset_tls.de.md create mode 100644 docs/troubleshooting/debug-reset_tls.en.md create mode 100644 docs/troubleshooting/debug-rm_volumes.de.md create mode 100644 docs/troubleshooting/debug-rm_volumes.en.md create mode 100644 docs/troubleshooting/debug-rspamd_memory_leaks.de.md create mode 100644 docs/troubleshooting/debug-rspamd_memory_leaks.en.md create mode 100644 docs/troubleshooting/debug.de.md create mode 100644 docs/troubleshooting/debug.en.md diff --git a/docs/assets/images/mailcow-bl_wl.png b/docs/assets/images/mailcow-bl_wl.png new file mode 100644 index 0000000000000000000000000000000000000000..3619868f54571b218c378cb3045b9ddece06391d GIT binary patch literal 12338 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 literal 0 HcmV?d00001 diff --git a/docs/assets/images/mailcow-spamalias.png b/docs/assets/images/mailcow-spamalias.png new file mode 100644 index 0000000000000000000000000000000000000000..a0e30ccf73b766b9ca36f0f6bad35297821247f3 GIT binary patch literal 41444 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%0D=8;-DNvrt%Zjbum9ERplOe( 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 JTC1Ou{{=@%kFNj# literal 0 HcmV?d00001 diff --git a/docs/assets/images/mailcow-spamfilter.png b/docs/assets/images/mailcow-spamfilter.png new file mode 100644 index 0000000000000000000000000000000000000000..dc1d7c3c67a22aa27451b8faa901abc6417ea7fa GIT binary patch literal 32990 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 literal 0 HcmV?d00001 diff --git a/docs/assets/images/mailcow-tagging.png b/docs/assets/images/mailcow-tagging.png new file mode 100644 index 0000000000000000000000000000000000000000..20591d514303d4813654be5feccd84e97a6f234e GIT binary patch literal 25050 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 literal 0 HcmV?d00001 diff --git a/docs/index.de.md b/docs/index.de.md index 53be74135..92f22f873 100644 --- a/docs/index.de.md +++ b/docs/index.de.md @@ -2,9 +2,9 @@ ## Hilf dem mailcow Projekt -Bitte erwägen Sie einen Supportvertrag gegen eine geringe monatliche Gebühr unter [Servercow DE](https://www.servercow.de/mailcow?#support), um die weitere Entwicklung zu unterstützen. _Wir_ unterstützen _Dich_, während _Du_ _uns_ unterstützt. :) +Bitte erwägen Sie einen Supportvertrag gegen eine geringe monatliche Gebühr unter [Servercow](https://www.servercow.de/mailcow?#support), um die weitere Entwicklung zu unterstützen. _Wir_ unterstützen _Dich_, während _Du_ _uns_ unterstützt. :) -Wenn du super toll bist und ohne Vertrag unterstützen möchtest, kannst du eine SAL-Lizenz bekommen, die deine Tollheit bestätigt (eine flexible Einmalzahlung) bei [Servercow DE](https://www.servercow.de/mailcow#sal). +Wenn du super toll bist und ohne Vertrag unterstützen möchtest, kannst du eine SAL-Lizenz bekommen, die deine Tollheit bestätigt (eine flexible Einmalzahlung) bei [Servercow](https://www.servercow.de/mailcow#sal). ## Support erhalten @@ -12,7 +12,7 @@ Es gibt zwei Möglichkeiten, Support für Ihre mailcow-Installation zu erhalten. ### Kommerzieller Support -Für professionellen und priorisierten kommerziellen Support können Sie ein Basis-Support-Abonnement unter [Servercow DE](https://www.servercow.de/mailcow#support) abschließen. Für kundenspezifische Anfragen oder Fragen kontaktieren Sie uns stattdessen bitte unter [info@servercow.de](mailto:info@servercow.de). +Für professionellen und priorisierten kommerziellen Support können Sie ein Basis-Support-Abonnement unter [Servercow](https://www.servercow.de/mailcow#support) abschließen. Für kundenspezifische Anfragen oder Fragen kontaktieren Sie uns stattdessen bitte unter [info@servercow.de](mailto:info@servercow.de). Darüber hinaus bieten wir auch eine voll ausgestattete und verwaltete Mailcow [hier](https://www.servercow.de/mailcow#managed) an. Auf diese Weise kümmern wir uns um die technische Magie darunter und Sie können Ihr ganzes Mail-Erlebnis auf eine problemlose Weise genießen. @@ -26,6 +26,8 @@ Die andere Alternative ist unser kostenloser Community-Support auf unseren versc - Telegram @ [t.me/mailcowOfftopic](https://t.me/mailcowOfftopic). +- Twitter [@mailcow_email](https://twitter.com/mailcow_email) + Telegram Desktop-Clients sind für [mehrere Plattformen](https://desktop.telegram.org) verfügbar. Sie können den Gruppenverlauf nach Stichworten durchsuchen. Nur für **Fehlerverfolgung, Feature Requests und Codebeiträge**: diff --git a/docs/index.en.md b/docs/index.en.md index d8b09f192..91014f65d 100644 --- a/docs/index.en.md +++ b/docs/index.en.md @@ -2,9 +2,9 @@ ## Help mailcow -Please consider a support contract for a small monthly fee at [Servercow EN](https://www.servercow.de/mailcow?lang=en#support)/[Servercow DE](https://www.servercow.de/mailcow?#support) to support further development. _We_ support _you_ while _you_ support _us_. :) +Please consider a support contract for a small monthly fee at [Servercow EN](https://www.servercow.de/mailcow?lang=en#support) to support further development. _We_ support _you_ while _you_ support _us_. :) -If you are super awesome and would like to support without a contract, you can get a SAL license that confirms your awesomeness (a flexible one-time payment) at [Servercow EN](https://www.servercow.de/mailcow?lang=en#sal)/[Servercow DE](https://www.servercow.de/mailcow#sal). +If you are super awesome and would like to support without a contract, you can get a SAL license that confirms your awesomeness (a flexible one-time payment) at [Servercow EN](https://www.servercow.de/mailcow?lang=en#sal). ## Get support @@ -12,7 +12,7 @@ There are two ways to achieve support for your mailcow installation. ### Commercial support -For professional and prioritized commercial support you can sign a basic support subscription at [Servercow EN](https://www.servercow.de/mailcow?lang=en#support)/[Servercow DE](https://www.servercow.de/mailcow#support). For custom inquiries or questions please contact us at [info@servercow.de](mailto:info@servercow.de) instead. +For professional and prioritized commercial support you can sign a basic support subscription at [Servercow EN](https://www.servercow.de/mailcow?lang=en#support). For custom inquiries or questions please contact us at [info@servercow.de](mailto:info@servercow.de) instead. Furthermore we do also provide a fully featured and managed mailcow [here](https://www.servercow.de/mailcow#managed). This way we take care about the technical magic underneath and you can enjoy your whole mail experience in a hassle-free way. @@ -26,6 +26,8 @@ The other alternative is our free community-support on our various channels belo - Telegram @ [t.me/mailcowOfftopic](https://t.me/mailcowOfftopic). +- Twitter [@mailcow_email](https://twitter.com/mailcow_email) + Telegram desktop clients are available for [multiple platforms](https://desktop.telegram.org). You can search the groups history for keywords. For **bug tracking, feature requests and code contributions** only: diff --git a/docs/troubleshooting/debug-admin_login_sogo.de.md b/docs/troubleshooting/debug-admin_login_sogo.de.md new file mode 100644 index 000000000..e8ec0e41d --- /dev/null +++ b/docs/troubleshooting/debug-admin_login_sogo.de.md @@ -0,0 +1,42 @@ +Dies ist eine experimentelle Funktion, die es Admins und Domänenadmins erlaubt, sich direkt als Mailbox-Benutzer direkt bei SOGo anzumelden, ohne das Passwort des Benutzers zu kennen. +Dazu wird ein zusätzlicher Link zu SOGo in der Mailbox-Liste (mailcow UI) angezeigt. + +Auch mehrere gleichzeitige Admin-Logins auf verschiedene Postfächer sind mit dieser Funktion möglich. + +## Aktivieren der Funktion + +Die Funktion ist standardmäßig deaktiviert. Es kann in der `mailcow.conf` durch Setzen aktiviert werden: +``` +ALLOW_ADMIN_EMAIL_LOGIN=y +``` +und die betroffenen Container neu erstellen mit +``` +docker-compose up -d +``` + +## Nachteile bei Aktivierung + +- Jeder SOGo-Seiten-Load und jede Active-Sync-Anfrage verursacht eine zusätzliche Ausführung eines internen PHP-Skripts. +Dies kann die Ladezeiten von SOGo / EAS beeinträchtigen. +In den meisten Fällen sollte dies nicht spürbar sein, aber Sie sollten es im Hinterkopf behalten, wenn Sie Performance-Probleme haben. +- SOGo zeigt keinen Logout-Link für Admin-Logins an, um sich normal anzumelden, muss man sich von der mailcow UI abmelden, so dass die PHP-Sitzung zerstört wird. +- Das Abonnieren des Kalenders oder Adressbuchs eines anderen Nutzers, während man als Admin eingeloggt ist, funktioniert nicht. Ebenso wenig funktioniert das Einladen anderer Nutzer zu Kalender-Events. Die Seite wird neu geladen, wenn diese Dinge versucht werden. + +## Technische Details + +Die Option SOGoTrustProxyAuthentication ist auf YES gesetzt, so dass SOGo dem x-webobjects-remote-user-Header vertraut. + +Dovecot erhält ein zufälliges Master-Passwort, das für alle Mailboxen gültig ist, wenn es vom SOGo-Container verwendet wird. + +Ein Klick auf den SOGo-Button in der Mailbox-Liste öffnet die Datei sogo-auth.php, die Berechtigungen prüft, Session-Variablen setzt und auf die SOGo-Mailbox umleitet. + +Jede SOGo, CardDAV, CalDAV und EAS http-Anfrage verursacht einen zusätzlichen, nginx-internen auth_request-Aufruf an sogo-auth.php mit folgendem Verhalten: + +- Wenn ein basic_auth-Header vorhanden ist, wird das Skript die Anmeldedaten anstelle von SOGo validieren und die folgenden Header bereitstellen: +`x-webobjects-remote-user`, `Authorization` und `x-webobjects-auth-type`. + +- Wenn kein basic_auth-Header vorhanden ist, wird das Skript nach einer aktiven Mailcow-Admin-Sitzung für den angeforderten E-Mail-Benutzer suchen und die gleichen Header bereitstellen, aber mit dem Dovecot-Master-Passwort, das im `Authorization`-Header verwendet wird. + +- Wenn beides fehlschlägt, werden die Header leer gesetzt, was SOGo dazu bringt, seine Standard-Authentifizierungsmethoden zu verwenden. + +Alle diese Optionen/Verhaltensweisen sind deaktiviert, wenn die Option `ALLOW_ADMIN_EMAIL_LOGIN` in der Konfiguration nicht aktiviert ist. \ No newline at end of file diff --git a/docs/troubleshooting/debug-admin_login_sogo.en.md b/docs/troubleshooting/debug-admin_login_sogo.en.md new file mode 100644 index 000000000..85b52e2d1 --- /dev/null +++ b/docs/troubleshooting/debug-admin_login_sogo.en.md @@ -0,0 +1,44 @@ +This is an experimental feature that allows admins and domain admins to directly +log into SOGo as a mailbox user, without knowing the users password. + +For this, an additional link to SOGo is displayed in the mailbox list (mailcow UI). + +Multiple concurrent admin-logins to different mailboxes are also possible when using this feature. + +## Enabling the feature + +The feature is disabled by default. It can be enabled in the `mailcow.conf` by setting: +``` +ALLOW_ADMIN_EMAIL_LOGIN=y +``` +and recreating the affected containers with +``` +docker-compose up -d +``` + +## Drawbacks when enabled + +- Each SOGo page-load and each Active-Sync request will cause an additional execution of an internal PHP script. +This might impact load-times of SOGo / EAS. +In most cases, this should not be noticeable but should be kept in mind if you face any performance issues. +- SOGo will not display a logout link for admin-logins, to login normally one has to logout from the mailcow UI so the PHP session is destroyed. +- Subscribing to another user's calendar or address book while logged in as admin does not work. Neither does inviting other users to calendar events. The page will reload when these things are attempted. + +## Technical details + +SOGoTrustProxyAuthentication option is set to YES which makes SOGo trust the x-webobjects-remote-user header. + +Dovecot will receive a random master-password which is valid for all mailboxes when used by the SOGo container. + +Clicking on the SOGo button in the mailbox list will open sogo-auth.php which checks permissions, sets session variables and redirects to the SOGo mailbox. + +Each SOGo, CardDAV, CalDAV and EAS http request will cause an additional, nginx internal auth_request call to sogo-auth.php with the following behavior: + +- If a basic_auth header is present, the script will validate the credentials in place of SOGo and provide the following headers: +`x-webobjects-remote-user`, `Authorization` and `x-webobjects-auth-type`. + +- If no basic_auth header is present, the script will check for an active mailcow admin session for the requested email user and provide the same headers but with the dovecot master password used in the `Authorization` header. + +- If both fails the headers will be set empty, which makes SOGo use its standard authentication methods. + +All of these options / behaviors are disabled if the `ALLOW_ADMIN_EMAIL_LOGIN` is not enabled in the config. \ No newline at end of file diff --git a/docs/troubleshooting/debug-attach_service.de.md b/docs/troubleshooting/debug-attach_service.de.md new file mode 100644 index 000000000..2509bc260 --- /dev/null +++ b/docs/troubleshooting/debug-attach_service.de.md @@ -0,0 +1,47 @@ +## Anhängen eines Containers an Ihre Shell + +Um einen Container an Ihre Shell anzuhängen, können Sie einfach folgendes ausführen + +``` +docker-compose exec $Dienst_Name /bin/bash +``` + +### Verbindung zu Diensten herstellen + +Wenn Sie sich direkt mit einem Dienst / einer Anwendung verbinden wollen, ist es immer eine gute Idee, `source mailcow.conf` zu benutzen, um alle relevanten Variablen in Ihre Umgebung zu bekommen. + +#### MySQL + +``` +Quelle mailcow.conf +docker-compose exec mysql-mailcow mysql -u${DBUSER} -p${DBPASS} ${DBNAME} +``` + +#### Redis + +``` +docker-compose exec redis-mailcow redis-cli +``` + +## Dienstbeschreibungen + +Hier ist eine kurze Übersicht, welcher Container / Dienst was macht: + +| Dienstname | Dienstbeschreibungen | +| ----------------- | ------------------------------------------------------------------------- | +| unbound-mailcow | Lokaler (DNSSEC) DNS-Auflöser | +| mysql-mailcow | Speichert die SOGo's und die meisten Einstellungen von mailcow | +| postfix-mailcow | Empfängt und sendet Mails | +| dovecot-mailcow | Benutzer-Logins und Siebfilter | +| redis-mailcow | Speicher-Backend für DKIM-Schlüssel und Rspamd | +| rspamd-mailcow | Mail-Filter-System. Verwendet für Av-Behandlung, DKIM-Signierung, Spam-Behandlung | +| clamd-mailcow | Scannt Anhänge auf Viren | +| olefy-mailcow | Scannt angehängte Office-Dokumente auf Makro-Viren | +| solr-mailcow | Bietet Volltextsuche in Dovecot | +| sogo-mailcow | Webmail-Client, der Microsoft ActiveSync und Cal- / CardDav verarbeitet | +| nginx-mailcow | Nginx Remote-Proxy, der alle mailcow-bezogenen HTTP / HTTPS-Anfragen bearbeitet | +| acme-mailcow | Automatisiert den Einsatz von HTTPS (SSL/TLS) Zertifikaten | +| memcached-mailcow | Internes Caching-System für mailcow-Dienste | +| watchdog-mailcow | Ermöglicht die Überwachung von Docker-Containern / Diensten | +| php-fpm-mailcow | Betreibt die mailcow Web UI | +| netfilter-mailcow | Fail2Ban ähnliche Integration | \ No newline at end of file diff --git a/docs/troubleshooting/debug-attach_service.en.md b/docs/troubleshooting/debug-attach_service.en.md new file mode 100644 index 000000000..6bf33628f --- /dev/null +++ b/docs/troubleshooting/debug-attach_service.en.md @@ -0,0 +1,47 @@ +## Attaching a Container to your Shell + +To attach a container to your shell you can simply run + +``` +docker-compose exec $Service_Name /bin/bash +``` + +### Connecting to Services + +If you want to connect to a service / application directly it is always a good idea to `source mailcow.conf` to get all relevant variables into your environment. + +#### MySQL + +``` +source mailcow.conf +docker-compose exec mysql-mailcow mysql -u${DBUSER} -p${DBPASS} ${DBNAME} +``` + +#### Redis + +``` +docker-compose exec redis-mailcow redis-cli +``` + +## Service Descriptions + +Here is a brief overview of what container / service does what: + +| Service Name | Service Descriptions | +| ----------------- | ------------------------------------------------------------------------- | +| unbound-mailcow | Local (DNSSEC) DNS Resolver | +| mysql-mailcow | Stores SOGo's and most of mailcow's settings | +| postfix-mailcow | Receives and sends mails | +| dovecot-mailcow | User logins and sieve filter | +| redis-mailcow | Storage back-end for DKIM keys and Rspamd | +| rspamd-mailcow | Mail filtering system. Used for av handling, dkim signing, spam handling | +| clamd-mailcow | Scans attachments for viruses | +| olefy-mailcow | Scans attached office documents for macro-viruses | +| solr-mailcow | Provides full-text search in Dovecot | +| sogo-mailcow | Webmail client that handles Microsoft ActiveSync and Cal- / CardDav | +| nginx-mailcow | Nginx remote proxy that handles all mailcow related HTTP / HTTPS requests | +| acme-mailcow | Automates HTTPS (SSL/TLS) certificate deployment | +| memcached-mailcow | Internal caching system for mailcow services | +| watchdog-mailcow | Allows the monitoring of docker containers / services | +| php-fpm-mailcow | Powers the mailcow web UI | +| netfilter-mailcow | Fail2Ban like integration | \ No newline at end of file diff --git a/docs/troubleshooting/debug-common_problems.de.md b/docs/troubleshooting/debug-common_problems.de.md new file mode 100644 index 000000000..4ff6dbcb6 --- /dev/null +++ b/docs/troubleshooting/debug-common_problems.de.md @@ -0,0 +1,92 @@ +Hier sind häufige Probleme und mögliche Lösungen: + +## Mail kommt in einer Schleife zu sich selbst zurück. + +Bitte überprüfen Sie in Ihrer mailcow UI, ob Sie die Domain als **Backup MX** eingestellt haben: +![Überprüfen Sie Ihre MX-Backup-Einstellungen](assets/images/troubleshooting/mailcow-backupmx.png) + +## Ich kann Mails empfangen, aber nicht senden + +Es gibt viele Gründe, die Sie daran hindern können, Mails zu versenden: + +- Prüfen Sie, ob Ihre IP-Adresse auf einer schwarzen Liste steht. Sie können [dnsbl.info](http://www.dnsbl.info/) oder einen ähnlichen Dienst verwenden, um Ihre IP-Adresse zu überprüfen. +- Es gibt einige ISP-Router, die Mail-Ports für nicht auf der Blacklist stehende Domains blockieren. Bitte überprüfen Sie, ob Sie Ihren Server über die Ports `465` oder `587` erreichen können: + +``` +# telnet 74.125.133.27 465 +Versucht 74.125.133.27... +Verbunden mit 74.125.133.27. +Escape-Zeichen ist '^]'. +``` + +## Meine Mails werden als Spam identifiziert + +Bitte lesen Sie unsere [DNS-Konfiguration](prerequisites/prerequisite-dns.de.md) Anleitung. + +## docker-compose wirft seltsame Fehler aus. + +... wie: + +- `ERROR: Ungültiges Interpolationsformat ...` +- `AttributeError: 'NoneType' Objekt hat kein Attribut 'keys'`. +- ERROR: In der Datei './docker-compose.yml' hat der Dienst 'version' keine Konfigurationsoptionen. + +Wenn Sie eine oder ähnliche Meldungen erhalten, während Sie versuchen, mailcow: dockerized auszuführen, überprüfen Sie bitte, ob Sie die **aktuellste** Version von **Docker** und **docker-compose** haben. + +## Container XY ist ungesund + +Dieser Fehler versucht Ihnen mitzuteilen, dass eine der (Gesundheits-)Bedingungen für einen bestimmten Container nicht erfüllt ist. Daher kann er nicht gestartet werden. Dies kann verschiedene Gründe haben, der häufigste ist ein aktualisierter Git-Klon, aber ein altes Docker-Image oder umgekehrt. + +Auch eine falsch konfigurierte Firewall kann einen solchen Fehler verursachen. Die Container müssen in der Lage sein, über das Netzwerk 172.22.1.1/24 miteinander zu kommunizieren. + +Es könnte auch eine falsch verknüpfte Datei sein (z. B. ein SSL-Zertifikat), die den Start eines wichtigen Containers (nginx) verhindert. Prüfen Sie daher immer Ihre Protokolle, um herauszufinden, woher das Problem kommt. + + +## Adresse bereits in Gebrauch + +Wenn Sie eine Fehlermeldung erhalten wie: + +``` +ERROR: for postfix-mailcow Cannot start service postfix-mailcow: driver failed programming external connectivity on endpoint mailcowdockerized_postfix-mailcow_1: Error starting userland proxy: listen tcp 0.0.0:25: bind: address already in use +``` + +während Sie versuchen, mailcow: dockerized zu starten / zu installieren, stellen Sie sicher, dass Sie unseren Abschnitt über [prerequisites](prerequisites/prerequisite-system.de.md/#firewall-ports) befolgt haben. + + +## XYZ kann keine Verbindung zu ... + +Bitte überprüfen Sie Ihre lokale Firewall! +Docker und iptables-basierte Firewalls erstellen manchmal widersprüchliche Regeln. Deaktivieren Sie daher die Firewall auf Ihrem Host, um festzustellen, ob Ihre Verbindungsprobleme durch solche Konflikte verursacht werden. Wenn dies der Fall ist, müssen Sie manuell entsprechende Regeln in Ihrer Host-Firewall erstellen, um die erforderlichen Verbindungen zuzulassen. + +Wenn Sie Verbindungsprobleme von zu Hause aus haben, überprüfen Sie bitte auch die Firewall Ihres ISP-Routers, da einige von ihnen den E-Mail-Verkehr über die Ports *SMTP* (587) oder *SMTPS* (465) blockieren. Es könnte auch sein, dass Ihr ISP die Ports für *SUBMISSION* (25) blockiert. + +Während Linux-Benutzer aus einer Vielzahl von Tools[^1] wählen können, um zu überprüfen, ob ein Port offen ist, steht Windows-Benutzern standardmäßig nur der PowerShell-Befehl `Test-NetConnection -ComputerName host -Port port` zur Verfügung. + +Um Telnet auf einem Windows nach Vista zu aktivieren, lesen Sie bitte diese [Anleitung](https://social.technet.microsoft.com/wiki/contents/articles/910.windows-7-enabling-telnet-client.aspx) oder geben Sie den folgenden Befehl in einem Terminal **mit Administratorrechten** ein: + +``` +dism /online /Enable-Feature /FeatureName:TelnetClient +``` + +## Inotify-Instanz-Limit überschritten für Benutzer 5000 (UID vmail) ([siehe #453](https://github.com/mailcow/mailcow-dockerized/issues/453#issuecomment-314711232)). + +Docker-Container verwenden die inotify-Limits von Docker-Hosts. Wenn Sie sie auf Ihrem Docker-Host setzen, werden sie an den Container weitergegeben. + +## Dovecot startet ständig neu (siehe [#2672](https://github.com/mailcow/mailcow-dockerized/issues/2672)). + +Stellen Sie sicher, dass Sie mindestens die folgenden Dateien in `data/assets/ssl` haben: + +``` +cert.pem +dhparams.pem +key.pem +``` + +Wenn `dhparams.pem` fehlt, können Sie es mit Bash + +```bash +openssl dhparam -out data/assets/ssl/dhparams.pem 4096 +``` + + +[^1]: [netcat](https://linux.die.net/man/1/nc), [nmap](https://linux.die.net/man/1/nmap), [openssl](https://wiki.openssl.org/index.php/Manual:S_client(1)), [telnet](https://linux \ No newline at end of file diff --git a/docs/troubleshooting/debug-common_problems.en.md b/docs/troubleshooting/debug-common_problems.en.md new file mode 100644 index 000000000..ce86bbe11 --- /dev/null +++ b/docs/troubleshooting/debug-common_problems.en.md @@ -0,0 +1,92 @@ +Here we list common problems and possible solutions: + +## Mail loops back to myself + +Please check in your mailcow UI if you made the domain a **backup MX**: + +![Check your MX Backup settings](assets/images/troubleshooting/mailcow-backupmx.png) + +## I can receive but not send mails + +There are a lot of things that could prevent you from sending mail: + +- Check if your IP address is on any blacklists. You could use [dnsbl.info](http://www.dnsbl.info/) or any other similar service to check for your IP address. +- There are some consumer ISP routers out there, that block mail ports for non whitelisted domains. Please check if you can reach your server on the ports `465` or `587`: + +``` +# telnet 74.125.133.27 465 +Trying 74.125.133.27... +Connected to 74.125.133.27. +Escape character is '^]'. +``` + +## My mails are identified as Spam + +Please read our guide on [DNS configuration](prerequisites/prerequisite-dns.en.md). + +## docker-compose throws weird errors + +... like: + +- `ERROR: Invalid interpolation format ...` +- `AttributeError: 'NoneType' object has no attribute 'keys'`. +- `ERROR: In file './docker-compose.yml' service 'version' doesn't have any configuration options`. + +When you encounter one or similar messages while trying to run mailcow: dockerized please check if you have the **latest** version of **Docker** and **docker-compose** + +## Container XY is unhealthy + +This error tries to tell you that one of the (health) conditions for a certain container are not met. Therefore it can't be started. This can have several reasons, the most common one is an updated git clone but old docker image or vice versa. + +A wrong configured firewall could also cause such a failure. The containers need to be able to talk to each other over the network 172.22.1.1/24. + +It might also be wrongly linked file (i.e. SSL certificate) that prevents a crucial container (nginx) from starting, so always check your logs to get an idea where your problem is coming from. + + +## Address already in use + +If you get an error message like: + +``` +ERROR: for postfix-mailcow Cannot start service postfix-mailcow: driver failed programming external connectivity on endpoint mailcowdockerized_postfix-mailcow_1: Error starting userland proxy: listen tcp 0.0.0.0:25: bind: address already in use +``` + +while trying to start / install mailcow: dockerized, make sure you've followed our section on the [prerequisites](prerequisites/prerequisite-system.en.md/#firewall-ports). + +## XYZ can't connect to ... + +Please check your local firewall! +Docker and iptables-based firewalls sometimes create conflicting rules, so disable the firewall on your host to determine whether your connection issues are caused by such conflicts. If they are, you need to manually create appropriate rules in your host firewall to permit the necessary connections. + +If you experience connection problems from home, please check your ISP router's firewall too, some of them block mail traffic on the *SMTP* (587) or *SMTPS* (465) ports. It could also be, that your ISP is blocking the ports for *SUBMISSION* (25). + +While Linux users can chose from a variety of tools[^1] to check if a port is open, the Windows user has only the PowerShell command `Test-NetConnection -ComputerName host -Port port` available by default. + +To enable telnet on a Windows after Vista please check this [guide](https://social.technet.microsoft.com/wiki/contents/articles/910.windows-7-enabling-telnet-client.aspx) or enter the following command in an terminal **with administrator privileges**: + +``` +dism /online /Enable-Feature /FeatureName:TelnetClient +``` + +## Inotify instance limit for user 5000 (UID vmail) exceeded ([see #453](https://github.com/mailcow/mailcow-dockerized/issues/453#issuecomment-314711232)) + +Docker containers use the Docker hosts inotify limits. Setting them on your Docker host will pass them to the container. + +## Dovecot keeps restarting (see [#2672](https://github.com/mailcow/mailcow-dockerized/issues/2672)) + +Check that you have at least the following files in `data/assets/ssl`: + +``` +cert.pem +dhparams.pem +key.pem +``` + +If `dhparams.pem` is missing, you can generate it with + +```bash +openssl dhparam -out data/assets/ssl/dhparams.pem 4096 +``` + + +[^1]: [netcat](https://linux.die.net/man/1/nc), [nmap](https://linux.die.net/man/1/nmap), [openssl](https://wiki.openssl.org/index.php/Manual:S_client(1)), [telnet](https://linux.die.net/man/1/telnet), etc. \ No newline at end of file diff --git a/docs/troubleshooting/debug-logs.de.md b/docs/troubleshooting/debug-logs.de.md new file mode 100644 index 000000000..d02fa91dc --- /dev/null +++ b/docs/troubleshooting/debug-logs.de.md @@ -0,0 +1,14 @@ +!!! warning + Dieser Abschnitt gilt nur für Docker's Standard-Logging-Treiber (JSON). + +Um die Logs aller mailcow: dockerized bezogenen Container zu sehen, können Sie `docker-compose logs` innerhalb Ihres mailcow-dockerized Ordners verwenden, der Ihre `mailcow.conf` enthält. Dies ist normalerweise ein bisschen viel, aber Sie können die Ausgabe mit `--tail=100` auf die letzten 100 Zeilen pro Container kürzen, oder ein `-f` hinzufügen, um die Live-Ausgabe aller Ihrer Dienste zu verfolgen. + +Um die Logs eines bestimmten Dienstes zu sehen, kann man `docker-compose logs [options] $service_name` verwenden + +!!! info + Die verfügbaren Optionen für den Befehl **docker-compose logs** sind: + + - **-no-color**: Erzeugt eine einfarbige Ausgabe. + - **-f**: Der Log-Ausgabe folgen. + - **-t**: Zeitstempel anzeigen. + - **--tail="all "**: Anzahl der Zeilen, die ab dem Ende der Protokolle für jeden Container angezeigt werden sollen. \ No newline at end of file diff --git a/docs/troubleshooting/debug-logs.en.md b/docs/troubleshooting/debug-logs.en.md new file mode 100644 index 000000000..20b955517 --- /dev/null +++ b/docs/troubleshooting/debug-logs.en.md @@ -0,0 +1,14 @@ +!!! warning + This section only applies for Dockers default logging driver (JSON). + +To view the logs of all mailcow: dockerized related containers, you can use `docker-compose logs` inside your mailcow-dockerized folder that contains your `mailcow.conf`. This is usually a bit much, but you could trim the output with `--tail=100` to the last 100 lines per container, or add a `-f` to follow the live output of all your services. + +To view the logs of a specific service you can use `docker-compose logs [options] $service_name` + +!!! info + The available options for the command **docker-compose logs** are: + + - **--no-color**: Produce monochrome output. + - **-f**: Follow the log output. + - **-t**: Show timestamps. + - **--tail="all"**: Number of lines to show from the end of the logs for each container. \ No newline at end of file diff --git a/docs/troubleshooting/debug-mysql_aria.de.md b/docs/troubleshooting/debug-mysql_aria.de.md new file mode 100644 index 000000000..47a0c6f22 --- /dev/null +++ b/docs/troubleshooting/debug-mysql_aria.de.md @@ -0,0 +1,22 @@ +## MariaDB: Aria-Wiederherstellung nach Absturz + +Wenn Ihr Server abgestürzt ist und MariaDB eine Fehlermeldung ähnlich `[ERROR] mysqld: Aria recovery failed. Please run aria_chk -r on all Aria tables (*.MAI) and delete all aria_log.######## files`, können Sie Folgendes versuchen, um die Datenbank in einen gesunden Zustand zu bringen: + +Starten Sie den Stack und warten Sie, bis mysql-mailcow beginnt, einen Neustart zu melden. Überprüfen Sie dies, indem Sie `docker-compose ps` ausführen. + +Führen Sie nun die folgenden Befehle aus: + +``` +# Stoppe den Stack, führe nicht "down" aus +docker-compose stop +# Führen Sie eine Bash in dem gestoppten Container als Benutzer mysql aus +docker-compose run --rm --entrypoint '/bin/sh -c "gosu mysql bash"' mysql-mailcow +# cd in das SQL-Datenverzeichnis +cd /var/lib/mysql +# aria_chk ausführen +aria_chk --check --force */*.MAI +# Löschen der aria-Logdateien +rm aria_log.* +``` + +Führen Sie nun `docker-compose down` gefolgt von `docker-compose up -d` aus. \ No newline at end of file diff --git a/docs/troubleshooting/debug-mysql_aria.en.md b/docs/troubleshooting/debug-mysql_aria.en.md new file mode 100644 index 000000000..0783f26b6 --- /dev/null +++ b/docs/troubleshooting/debug-mysql_aria.en.md @@ -0,0 +1,22 @@ +## MariaDB: Aria recovery after crash + +If your server crashed and MariaDB logs an error similar to `[ERROR] mysqld: Aria recovery failed. Please run aria_chk -r on all Aria tables (*.MAI) and delete all aria_log.######## files` you may want to try the following to recover the database to a healthy state: + +Start the stack and wait until mysql-mailcow begins to report a restarting state. Check by running `docker-compose ps`. + +Now run the following commands: + +``` +# Stop the stack, don't run "down" +docker-compose stop +# Run a bash in the stopped container as user mysql +docker-compose run --rm --entrypoint '/bin/sh -c "gosu mysql bash"' mysql-mailcow +# cd to the SQL data directory +cd /var/lib/mysql +# Run aria_chk +aria_chk --check --force */*.MAI +# Delete aria log files +rm aria_log.* +``` + +Now run `docker-compose down` followed by `docker-compose up -d`. \ No newline at end of file diff --git a/docs/troubleshooting/debug-mysql_upgrades.de.md b/docs/troubleshooting/debug-mysql_upgrades.de.md new file mode 100644 index 000000000..6fc6af814 --- /dev/null +++ b/docs/troubleshooting/debug-mysql_upgrades.de.md @@ -0,0 +1,15 @@ +## Führen Sie ein manuelles mysql_upgrade durch. + +Dieser Schritt ist normalerweise nicht notwendig. + +``` +docker-compose stop mysql-mailcow watchdog-mailcow +docker-compose run --rm --entrypoint '/bin/sh -c "gosu mysql mysqld --skip-grant-tables & sleep 10 && bash && exit 0"' mysql-mailcow +``` + +Sobald die SQL-Shell gestartet wurde, führen Sie `mysql_upgrade` aus und verlassen den Container: + +``` +mysql_upgrade +exit +``` diff --git a/docs/troubleshooting/debug-mysql_upgrades.en.md b/docs/troubleshooting/debug-mysql_upgrades.en.md new file mode 100644 index 000000000..51ffd498e --- /dev/null +++ b/docs/troubleshooting/debug-mysql_upgrades.en.md @@ -0,0 +1,15 @@ +## Run a manual mysql_upgrade + +This step is usually not necessary. + +``` +docker-compose stop mysql-mailcow watchdog-mailcow +docker-compose run --rm --entrypoint '/bin/sh -c "gosu mysql mysqld --skip-grant-tables & sleep 10 && bash && exit 0"' mysql-mailcow +``` + +As soon as the SQL shell spawned, run `mysql_upgrade` and exit the container: + +``` +mysql_upgrade +exit +``` \ No newline at end of file diff --git a/docs/troubleshooting/debug-reset_pw.de.md b/docs/troubleshooting/debug-reset_pw.de.md new file mode 100644 index 000000000..84cab9250 --- /dev/null +++ b/docs/troubleshooting/debug-reset_pw.de.md @@ -0,0 +1,93 @@ +## mailcow Admin-Konto + +Setzt den mailcow Admin Account auf ein zufälliges Passwort zurück. Ältere mailcow: dockerisierte Installationen können das `mailcow-reset-admin.sh` Skript in ihrem mailcow Stammverzeichnis (mailcow_path) finden. + +``` +cd mailcow_pfad +./helper-scripts/mailcow-reset-admin.sh +``` + +## MySQL-Passwörter zurücksetzen + +Stoppen Sie den Stack, indem Sie `docker-compose stop` ausführen. + +Wenn die Container heruntergefahren sind, führen Sie diesen Befehl aus: + +``` +docker-compose run --rm --entrypoint '/bin/sh -c "gosu mysql mysqld --skip-grant-tables & sleep 10 && mysql -hlocalhost -uroot && exit 0"' mysql-mailcow +``` + +### 1\. Datenbank-Name finden + +``` +# source mailcow.conf +# docker-compose exec mysql-mailcow mysql -u${DBUSER} -p${DBPASS} ${DBNAME} +MariaDB [(none)]> show databases; ++--------------------+ +| Database | ++--------------------+ +| information_schema | +| mailcow_database | <===== +| mysql | +| performance_schema | ++--------------------+ +4 rows in set (0.00 sec) +``` + +### 2\. Einen oder mehrere Benutzer zurücksetzen + +#### 2\.1 Maria DB < 10.4 (ältere mailcow-Installationen) + +Sowohl "password" als auch "authentication_string" existieren. Derzeit wird "password" verwendet, aber besser ist es, beide zu setzen. + +``` +MariaDB [(none)]> SELECT user FROM mysql.user; ++--------------+ +| user | ++--------------+ +| mailcow | <===== +| root | ++--------------+ +2 rows in set (0.00 sec) + +MariaDB [(none)]> FLUSH PRIVILEGES; +MariaDB [(none)]> UPDATE mysql.user SET authentication_string = PASSWORD('gotr00t'), password = PASSWORD('gotr00t') WHERE User = 'root'; +MariaDB [(none)]> UPDATE mysql.user SET authentication_string = PASSWORD('mookuh'), password = PASSWORD('mookuh') WHERE User = 'mailcow' AND Host = '%'; +MariaDB [(none)]> FLUSH PRIVILEGES; +``` + +#### 2\.2 Maria DB >= 10.4 (aktuelle mailcows) + +``` +MariaDB [(none)]> SELECT user FROM mysql.user; ++--------------+ +| user | ++--------------+ +| mailcow | <===== +| root | ++--------------+ +2 rows in set (0.00 sec) + +MariaDB [(none)]> FLUSH PRIVILEGES; +MariaDB [(none)]> ALTER USER 'mailcow'@'%' IDENTIFIED BY 'mookuh'; +MariaDB [(none)]> ALTER USER 'root'@'%' IDENTIFIED BY 'gotr00t'; MariaDB [(none)]> ALTER USER 'root'@'%' IDENTIFIED BY 'gotr00t'; +MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY 'gotr00t'; MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY 'gotr00t'; +MariaDB [(none)]> FLUSH PRIVILEGES; +``` + +## Zwei-Faktor-Authentifizierung entfernen + +### Für mailcow WebUI: + +Dies funktioniert ähnlich wie das Zurücksetzen eines MySQL-Passworts, jetzt machen wir es vom Host aus, ohne uns mit dem MySQL CLI zu verbinden: + +``` +Quelle mailcow.conf +docker-compose exec mysql-mailcow mysql -u${DBUSER} -p${DBPASS} ${DBNAME} -e "DELETE FROM tfa WHERE username='YOUR_USERNAME';" +``` + +### Für SOGo: + +``` +docker-compose exec -u sogo sogo-mailcow sogo-tool user-preferences set defaults user@example.com SOGoGoogleAuthenticatorEnabled '{"SOGoGoogleAuthenticatorEnabled":0}' +``` \ No newline at end of file diff --git a/docs/troubleshooting/debug-reset_pw.en.md b/docs/troubleshooting/debug-reset_pw.en.md new file mode 100644 index 000000000..d476e10b0 --- /dev/null +++ b/docs/troubleshooting/debug-reset_pw.en.md @@ -0,0 +1,93 @@ +## mailcow Admin Account + +Resets the mailcow admin account to a random password. Older mailcow: dockerized installations may find the `mailcow-reset-admin.sh` script in their mailcow root directory (mailcow_path). + +``` +cd mailcow_path +./helper-scripts/mailcow-reset-admin.sh +``` + +## Reset MySQL Passwords + +Stop the stack by running `docker-compose stop`. + +When the containers came to a stop, run this command: + +``` +docker-compose run --rm --entrypoint '/bin/sh -c "gosu mysql mysqld --skip-grant-tables & sleep 10 && mysql -hlocalhost -uroot && exit 0"' mysql-mailcow +``` + +### 1\. Find database name + +``` +# source mailcow.conf +# docker-compose exec mysql-mailcow mysql -u${DBUSER} -p${DBPASS} ${DBNAME} +MariaDB [(none)]> show databases; ++--------------------+ +| Database | ++--------------------+ +| information_schema | +| mailcow_database | <===== +| mysql | +| performance_schema | ++--------------------+ +4 rows in set (0.00 sec) +``` + +### 2\. Reset one or more users + +#### 2\.1 Maria DB < 10.4 (older mailcow installations) + +Both "password" and "authentication_string" exist. Currently "password" is used, but better set both. + +``` +MariaDB [(none)]> SELECT user FROM mysql.user; ++--------------+ +| user | ++--------------+ +| mailcow | <===== +| root | ++--------------+ +2 rows in set (0.00 sec) + +MariaDB [(none)]> FLUSH PRIVILEGES; +MariaDB [(none)]> UPDATE mysql.user SET authentication_string = PASSWORD('gotr00t'), password = PASSWORD('gotr00t') WHERE User = 'root'; +MariaDB [(none)]> UPDATE mysql.user SET authentication_string = PASSWORD('mookuh'), password = PASSWORD('mookuh') WHERE User = 'mailcow' AND Host = '%'; +MariaDB [(none)]> FLUSH PRIVILEGES; +``` + +#### 2\.2 Maria DB >= 10.4 (current mailcows) + +``` +MariaDB [(none)]> SELECT user FROM mysql.user; ++--------------+ +| user | ++--------------+ +| mailcow | <===== +| root | ++--------------+ +2 rows in set (0.00 sec) + +MariaDB [(none)]> FLUSH PRIVILEGES; +MariaDB [(none)]> ALTER USER 'mailcow'@'%' IDENTIFIED BY 'mookuh'; +MariaDB [(none)]> ALTER USER 'root'@'%' IDENTIFIED BY 'gotr00t'; +MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY 'gotr00t'; +MariaDB [(none)]> FLUSH PRIVILEGES; +``` + +## Remove Two-Factor Authentication + +### For mailcow WebUI: + +This works similar to resetting a MySQL password, now we do it from the host without connecting to the MySQL CLI: + +``` +source mailcow.conf +docker-compose exec mysql-mailcow mysql -u${DBUSER} -p${DBPASS} ${DBNAME} -e "DELETE FROM tfa WHERE username='YOUR_USERNAME';" +``` + +### For SOGo: + +``` +docker-compose exec -u sogo sogo-mailcow sogo-tool user-preferences set defaults user@example.com SOGoGoogleAuthenticatorEnabled '{"SOGoGoogleAuthenticatorEnabled":0}' +``` \ No newline at end of file diff --git a/docs/troubleshooting/debug-reset_tls.de.md b/docs/troubleshooting/debug-reset_tls.de.md new file mode 100644 index 000000000..7e4c94c29 --- /dev/null +++ b/docs/troubleshooting/debug-reset_tls.de.md @@ -0,0 +1,17 @@ +Sollten Sie Probleme mit Ihrem Zertifikat, Schlüssel oder Let's Encrypt-Konto haben, versuchen Sie bitte, die TLS-Assets zurückzusetzen: + +``` +source mailcow.conf +docker-compose down +rm -rf data/assets/ssl +mkdir data/assets/ssl +openssl req -x509 -newkey rsa:4096 -keyout data/assets/ssl-example/key.pem -out data/assets/ssl-example/cert.pem -days 365 -subj "/C=DE/ST=NRW/L=Willich/O=mailcow/OU=mailcow/CN=${MAILCOW_HOSTNAME}" -sha256 -nodes +cp -n -d data/assets/ssl-example/*.pem data/assets/ssl/ +docker-compose up -d +``` + +Dies wird mailcow stoppen, die benötigten Variablen beschaffen, ein selbstsigniertes Zertifikat erstellen und mailcow starten. + +Wenn Sie Let's Encrypt verwenden, sollten Sie vorsichtig sein, da Sie ein neues Konto und einen neuen Satz von Zertifikaten erstellen werden. Sie werden früher oder später auf ein Ratelimit stoßen. + +Bitte beachten Sie auch, dass frühere TLSA-Datensätze ungültig werden. \ No newline at end of file diff --git a/docs/troubleshooting/debug-reset_tls.en.md b/docs/troubleshooting/debug-reset_tls.en.md new file mode 100644 index 000000000..8ecce380a --- /dev/null +++ b/docs/troubleshooting/debug-reset_tls.en.md @@ -0,0 +1,17 @@ +In case you encounter problems with your certificate, key or Let's Encrypt account, please try to reset the TLS assets: + +``` +source mailcow.conf +docker-compose down +rm -rf data/assets/ssl +mkdir data/assets/ssl +openssl req -x509 -newkey rsa:4096 -keyout data/assets/ssl-example/key.pem -out data/assets/ssl-example/cert.pem -days 365 -subj "/C=DE/ST=NRW/L=Willich/O=mailcow/OU=mailcow/CN=${MAILCOW_HOSTNAME}" -sha256 -nodes +cp -n -d data/assets/ssl-example/*.pem data/assets/ssl/ +docker-compose up -d +``` + +This will stop mailcow, source the variables we need, create a self-signed certificate and start mailcow. + +If you use Let's Encrypt you should be careful as you will create a new account and a new set of certificates. You will run into a ratelimit sooner or later. + +Please also note that previous TLSA records will be invalid. \ No newline at end of file diff --git a/docs/troubleshooting/debug-rm_volumes.de.md b/docs/troubleshooting/debug-rm_volumes.de.md new file mode 100644 index 000000000..37eb73a8b --- /dev/null +++ b/docs/troubleshooting/debug-rm_volumes.de.md @@ -0,0 +1,17 @@ +Es kann sein, dass Sie einen Satz persistenter Daten entfernen wollen, um einen Konflikt zu lösen oder um neu zu beginnen. + +`mailcowdockerized` kann variieren und hängt von Ihrem Compose-Projektnamen ab (wenn er unverändert ist, ist `mailcowdockerized` der richtige Wert). Wenn Sie sich unsicher sind, führen Sie `docker volume ls` aus, um eine vollständige Liste zu erhalten. + +Löschen Sie ein einzelnes Volume: + +``` +docker volume rm mailcowdockerized_${VOLUME_NAME} +``` + +- Entfernen Sie Volume `mysql-vol-1`, um alle MySQL-Daten zu entfernen. +- Entfernen Sie Volume `redis-vol-1` um alle Redis Daten zu entfernen. +- Volume `vmail-vol-1` entfernen, um alle Inhalte von `/var/vmail` zu entfernen, die in `dovecot-mailcow` eingebunden sind. +- Entfernen Sie das Volume `rspamd-vol-1`, um alle Rspamd-Daten zu entfernen. +- Entfernen Sie Volume `crypt-vol-1`, um alle Crypto-Daten zu entfernen. Dies wird **alle Mails** unlesbar machen. + +Alternativ dazu wird die Ausführung von `docker-compose down -v` **alle mailcow: dockerized volumes** zerstören und alle zugehörigen Container und Netzwerke löschen. diff --git a/docs/troubleshooting/debug-rm_volumes.en.md b/docs/troubleshooting/debug-rm_volumes.en.md new file mode 100644 index 000000000..fc8cd7b25 --- /dev/null +++ b/docs/troubleshooting/debug-rm_volumes.en.md @@ -0,0 +1,17 @@ +You may want to remove a set of persistent data to resolve a conflict or to start over. + +`mailcowdockerized` can vary and depends on your compose project name (if it's unchanged, `mailcowdockerized` is the correct value). If you are unsure about volume names, run `docker volume ls` for a full list. + +Delete a single volume: + +``` +docker volume rm mailcowdockerized_${VOLUME_NAME} +``` + +- Remove volume `mysql-vol-1` to remove all MySQL data. +- Remove volume `redis-vol-1` to remove all Redis data. +- Remove volume `vmail-vol-1` to remove all contents of `/var/vmail` mounted to `dovecot-mailcow`. +- Remove volume `rspamd-vol-1` to remove all Rspamd data. +- Remove volume `crypt-vol-1` to remove all crypto data. This will render **all mails** unreadable. + +Alternatively, running `docker-compose down -v` will **destroy all mailcow: dockerized volumes** and delete any related containers and networks. diff --git a/docs/troubleshooting/debug-rspamd_memory_leaks.de.md b/docs/troubleshooting/debug-rspamd_memory_leaks.de.md new file mode 100644 index 000000000..9f2df8c05 --- /dev/null +++ b/docs/troubleshooting/debug-rspamd_memory_leaks.de.md @@ -0,0 +1,27 @@ +Eine kurze Anleitung, um einen schlecht funktionierenden Rspamd tiefgehend zu analysieren. + +``` +docker-compose exec rspamd-mailcow bash + +if ! grep -qi 'apt-stable-asan' /etc/apt/sources.list.d/rspamd.list; then + sed -i 's/apt-stabil/apt-stabil-asan/i' /etc/apt/sources.list.d/rspamd.list +fi + +apt-get update ; apt-get upgrade rspamd + +nano /docker-entrypoint.sh + +# Fügen Sie vor "exec "$@"" die folgenden Zeilen ein: + +export G_SLICE=always-malloc +export ASAN_OPTIONS=new_delete_type_mismatch=0:detect_leaks=1:detect_odr_violation=0:log_path=/tmp/rspamd-asan:quarantine_size_mb=2048:malloc_context_size=8:fast_unwind_on_malloc=0 + +``` + +Starten Sie Rspamd neu: `docker-compose restart rspamd-mailcow` + +Ihr Speicherverbrauch wird stark ansteigen, er wird auch stetig wachsen, was nicht mit einem möglichen Memory Leak zusammenhängt, nach dem Sie suchen. + +Lassen Sie den Container für ein paar Minuten, Stunden oder Tage laufen (es sollte die Zeit sein, die Sie normalerweise warten, bis der Memory Leak "passiert") und starten Sie ihn neu: `docker-compose restart rspamd-mailcow`. + +Betreten Sie nun den Container, indem Sie `docker-compose exec rspamd-mailcow bash` ausführen, wechseln Sie das Verzeichnis zu /tmp und kopieren Sie die asan-Dateien an den gewünschten Ort oder laden Sie sie über termbin.com hoch (`cat /tmp/rspamd-asan.* | nc termbin.com 9999`). \ No newline at end of file diff --git a/docs/troubleshooting/debug-rspamd_memory_leaks.en.md b/docs/troubleshooting/debug-rspamd_memory_leaks.en.md new file mode 100644 index 000000000..97cae3393 --- /dev/null +++ b/docs/troubleshooting/debug-rspamd_memory_leaks.en.md @@ -0,0 +1,27 @@ +A quick guide to deeply analyze a malfunctioning Rspamd. + +``` +docker-compose exec rspamd-mailcow bash + +if ! grep -qi 'apt-stable-asan' /etc/apt/sources.list.d/rspamd.list; then + sed -i 's/apt-stable/apt-stable-asan/i' /etc/apt/sources.list.d/rspamd.list +fi + +apt-get update ; apt-get upgrade rspamd + +nano /docker-entrypoint.sh + +# Before "exec "$@"" add the following lines: + +export G_SLICE=always-malloc +export ASAN_OPTIONS=new_delete_type_mismatch=0:detect_leaks=1:detect_odr_violation=0:log_path=/tmp/rspamd-asan:quarantine_size_mb=2048:malloc_context_size=8:fast_unwind_on_malloc=0 + +``` + +Restart Rspamd: `docker-compose restart rspamd-mailcow` + +Your memory consumption will increase by a lot, it will also steadily grow, which is not related to a possible memory leak you are looking for. + +Leave the container running for a few minutes, hours or days (it should match the time you usually wait for the leak to "happen") and restart it: `docker-compose restart rspamd-mailcow`. + +Now enter the container by running `docker-compose exec rspamd-mailcow bash`, change the directory to /tmp and copy the asan Files to your desired location or upload them via termbin.com (`cat /tmp/rspamd-asan.* | nc termbin.com 9999`). \ No newline at end of file diff --git a/docs/troubleshooting/debug.de.md b/docs/troubleshooting/debug.de.md new file mode 100644 index 000000000..ab6a2ca77 --- /dev/null +++ b/docs/troubleshooting/debug.de.md @@ -0,0 +1,9 @@ +Wenn ein Problem auftritt, dann immer aus einem bestimmten Grund! Was Sie in einem solchen Fall tun sollten, ist: + +1. Lesen Sie Ihre Logs; verfolgen Sie sie, um herauszufinden, was der Grund für Ihr Problem ist. +2. Folgen Sie den Hinweisen in Ihren Logdateien und beginnen Sie mit der Untersuchung. +3. Starten Sie den gestörten Dienst oder den gesamten Stack neu, um zu sehen, ob das Problem weiterhin besteht. +4. Lesen Sie die Dokumentation des gestörten Dienstes und suchen Sie in dessen Bugtracker nach Ihrem Problem. +5. Durchsuchen Sie unsere [Github Issues](https://github.com/mailcow/mailcow-dockerized/issues) nach Ihrem Problem. +6. Erstelle einen [Github Issue](https://github.com/mailcow/mailcow-dockerized/issues) in unserem GitHub Repository, wenn Sie glauben, dass Ihr Problem ein Fehler oder eine fehlende Funktion ist, die Sie dringend benötigen. Bitte stellen Sie aber sicher, dass Sie **alle Logs** und eine vollständige Beschreibung Ihres Problems mitschicken. Bitte fragen Sie nicht nach Support auf Github. +7. Treten Sie unserer [Telegram-Community](https://t.me/mailcow) bei oder finden Sie die offiziellen Support-Pakete bei [Servercow](https://servercow.de). Alternativ fragen Sie Twitter um Rat und taggen uns mit **@mailcow_email**. \ No newline at end of file diff --git a/docs/troubleshooting/debug.en.md b/docs/troubleshooting/debug.en.md new file mode 100644 index 000000000..3c72c0470 --- /dev/null +++ b/docs/troubleshooting/debug.en.md @@ -0,0 +1,9 @@ +When a problem occurs, then always for a reason! What you want to do in such a case is: + +1. Read your logs; follow them to see what the reason for your problem is. +2. Follow the leads given to you in your logfiles and start investigating. +3. Restarting the troubled service or the whole stack to see if the problem persists. +4. Read the documentation of the troubled service and search it's bugtracker for your problem. +5. Search our [issues](https://github.com/mailcow/mailcow-dockerized/issues) for your problem. +6. [Create an issue](https://github.com/mailcow/mailcow-dockerized/issues) over at our GitHub repository if you think your problem might be a bug or a missing feature you badly need. But please make sure, that you include **all the logs** and a full description to your problem. Please do not ask for support on Git. +7. Join our [Telegram community](https://t.me/mailcow) or find the official support packages at [Servercow](https://servercow.de).
Alternatively ask Twitter and tag us with **@mailcow_email** \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index cb8f9f660..2e8176a42 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -52,17 +52,17 @@ nav: - 'Password hashing': 'models/model-passwd.md' - 'Sender and receiver model': 'models/model-sender_rcv.md' - 'General Troubleshooting': - - 'Introduction': 'debug.md' - - 'Admin login to SOGo': 'debug-admin_login_sogo.md' - - 'Advanced: Find memory leaks in Rspamd': 'debug-asan_rspamd.md' - - 'Attach a Container': 'debug-attach_service.md' - - 'Common Problems': 'debug-common_problems.md' - - 'Logs': 'debug-logs.md' - - 'Manual MySQL upgrade': 'debug-mysql_upgrade.md' - - 'Recover crashed Aria storage engine': 'debug-mysql_aria.md' - - 'Remove Persistent Data': 'debug-rm_volumes.md' - - 'Reset Passwords (incl. SQL)': 'debug-reset_pw.md' - - 'Reset TLS certificates': 'debug-reset_tls.md' + - 'Introduction': 'troubleshooting/debug.md' + - 'Admin login to SOGo': 'troubleshooting/debug-admin_login_sogo.md' + - 'Advanced: Find memory leaks in Rspamd': 'troubleshooting/debug-rspamd_memory_leaks.md' + - 'Attach to a Container': 'troubleshooting/debug-attach_service.md' + - 'Common Problems': 'troubleshooting/debug-common_problems.md' + - 'Logs': 'troubleshooting/debug-logs.md' + - 'Manual MySQL upgrade': 'troubleshooting/debug-mysql_upgrade.md' + - 'Recover crashed Aria storage engine': 'troubleshooting/debug-mysql_aria.md' + - 'Remove Persistent Data': 'troubleshooting/debug-rm_volumes.md' + - 'Reset Passwords (incl. SQL)': 'troubleshooting/debug-reset_pw.md' + - 'Reset TLS certificates': 'troubleshooting/debug-reset_tls.md' - 'Backup & Restore': - 'Component backup & restore': - 'Backup': 'b_n_r-backup.md' @@ -183,7 +183,7 @@ plugins: 'Introduction': 'Einführung' 'Admin login to SOGo': 'Admin-Anmeldung bei SOGo' 'Advanced: Find memory leaks in Rspamd': 'Fortgeschritten: Memory-Leaks in Rspamd finden' - 'Attach a Container' : 'Einen Container anhängen' + 'Attach to a Container' : 'In einen Container wechseln (CLI)' 'Common Problems': 'Häufig auftretende Probleme' 'Manual MySQL upgrade': 'Manuelles MySQL-Upgrade' 'Recover crashed Aria storage engine': 'Abgestürzte Aria-Speicher-Engine wiederherstellen'