Add Caddy v2 Section for Reverse Proxies
Dieser Commit ist enthalten in:
Ursprung
e15409d50d
Commit
7bb0e15cff
2 geänderte Dateien mit 135 neuen und 5 gelöschten Zeilen
|
@ -153,8 +153,8 @@ server {
|
|||
|
||||
### HAProxy (von der Community unterstützt)
|
||||
|
||||
!!! warning
|
||||
Dies ist ein nicht unterstützter Community Beitrag. Sie können gerne Korrekturen bereitstellen.
|
||||
!!! warning "Warnung"
|
||||
Dies ist ein nicht unterstützter Community Beitrag. Korrekturen sind immer erwünscht!
|
||||
|
||||
**Wichtig/Fix erwünscht**: Dieses Beispiel leitet nur HTTPS-Verkehr weiter und benutzt nicht den in mailcow eingebauten ACME-Client.
|
||||
|
||||
|
@ -172,8 +172,8 @@ backend mailcow
|
|||
|
||||
### Traefik v2 (von der Community unterstützt)
|
||||
|
||||
!!! warning
|
||||
Dies ist ein nicht unterstützter Community Beitrag. Fühlen Sie sich frei, Korrekturen bereitzustellen.
|
||||
!!! warning "Warnung"
|
||||
Dies ist ein nicht unterstützter Community Beitrag. Korrekturen sind immer erwünscht!
|
||||
|
||||
**Wichtig**: Diese Konfiguration deckt nur das "Reverseproxing" des Webpanels (nginx-mailcow) unter Verwendung von Traefik v2 ab. Wenn Sie auch die Mail-Dienste wie dovecot, postfix... reproxen wollen, müssen Sie die folgende Konfiguration an jeden Container anpassen und einen [EntryPoint](https://docs.traefik.io/routing/entrypoints/) in Ihrer `traefik.toml` oder `traefik.yml` (je nachdem, welche Konfiguration Sie verwenden) für jeden Port erstellen.
|
||||
|
||||
|
@ -232,7 +232,7 @@ networks:
|
|||
|
||||
Starten Sie die neuen Container mit `docker compose up -d`.
|
||||
|
||||
Da Traefik 2 ein acme v2 Format verwendet, um ALLE Lizenzen von allen Domains zu speichern, müssen wir einen Weg finden, die Zertifikate auszulagern. Zum Glück haben wir [diesen kleinen Container] (https://hub.docker.com/r/humenius/traefik-certs-dumper), der die Datei `acme.json` über ein Volume und eine Variable `DOMAIN=example. org`, und damit wird der Container die `cert.pem` und `key.pem` Dateien ausgeben, dafür lassen wir einfach den `traefik-certs-dumper` Container laufen, binden das `/traefik` Volume an den Ordner, in dem unsere `acme.json` gespeichert ist, binden das `/output` Volume an unseren mailcow `data/assets/ssl/` Ordner, und setzen die `DOMAIN=example.org` Variable auf die Domain, von der wir die Zertifikate ausgeben wollen.
|
||||
Da Traefik 2 ein acme v2 Format verwendet, um ALLE Zertifikaten von allen Domains zu speichern, müssen wir einen Weg finden, die Zertifikate auszulagern. Zum Glück haben wir [diesen kleinen Container] (https://hub.docker.com/r/humenius/traefik-certs-dumper), der die Datei `acme.json` über ein Volume und eine Variable `DOMAIN=example. org`, und damit wird der Container die `cert.pem` und `key.pem` Dateien ausgeben, dafür lassen wir einfach den `traefik-certs-dumper` Container laufen, binden das `/traefik` Volume an den Ordner, in dem unsere `acme.json` gespeichert ist, binden das `/output` Volume an unseren mailcow `data/assets/ssl/` Ordner, und setzen die `DOMAIN=example.org` Variable auf die Domain, von der wir die Zertifikate ausgeben wollen.
|
||||
|
||||
Dieser Container überwacht die Datei `acme.json` auf Änderungen und generiert die Dateien `cert.pem` und `key.pem` direkt in `data/assets/ssl/`, wobei der Pfad mit dem `/output`-Pfad des Containers verbunden ist.
|
||||
|
||||
|
@ -242,6 +242,72 @@ Nachdem wir die Zertifikate übertragen haben, müssen wir die Konfigurationen a
|
|||
|
||||
Und das sollte es gewesen sein 😊, Sie können überprüfen, ob der Traefik-Router einwandfrei funktioniert, indem Sie das Dashboard von Traefik / traefik logs / über https auf die eingestellte Domain zugreifen, oder / und HTTPS, SMTP und IMAP mit den Befehlen auf der zuvor verlinkten Seite überprüfen.
|
||||
|
||||
### Caddy v2 (von der Community unterstützt)
|
||||
|
||||
!!! warning "Warnung"
|
||||
Dies ist ein nicht unterstützter Communitybeitrag. Korrekturen sind immer erwünscht!
|
||||
|
||||
Die Konfiguration von Caddy mit mailcow ist sehr simpel.
|
||||
|
||||
In der Caddyfile muss einfach nur ein Bereich für den E-Mailserver angelegt werden.
|
||||
|
||||
Bspw:
|
||||
|
||||
``` hl_lines="1 3 13"
|
||||
|
||||
MAILCOW_HOSTNAME autodiscover.MAILCOW_HOSTNAME autoconfig.MAILCOW_HOSTNAME {
|
||||
log {
|
||||
output file /var/log/caddy/MAILCOW_HOSTNAME.log {
|
||||
roll_disabled
|
||||
roll_size 512M
|
||||
roll_uncompressed
|
||||
roll_local_time
|
||||
roll_keep 3
|
||||
roll_keep_for 48h
|
||||
}
|
||||
}
|
||||
|
||||
reverse_proxy 127.0.0.1:HTTP_BIND
|
||||
}
|
||||
```
|
||||
|
||||
Dies erlaubt es Caddy automatisch die Zertifikate zu erstellen und den Traffic für diese erwähnten Domains anzunehmen und an mailcow weiterzuleiten.
|
||||
|
||||
**Wichtig**: Der ACME Client der mailcow muss deaktiviert sein, da es sonst zu Fehlern seitens mailcow kommt.
|
||||
|
||||
Da Caddy sich direkt selbst um die Zertifikate kümmert, können wir mit dem folgenden Skript die Caddy generierten Zertifikate in die mailcow inkludieren:
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
MD5SUM_CURRENT_CERT=($(md5sum /opt/mailcow-dockerized/data/assets/ssl/cert.pem))
|
||||
MD5SUM_NEW_CERT=($(md5sum /var/lib/caddy/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory/develcow.derlinkman.de/develcow.derlinkman.de.crt))
|
||||
|
||||
if [ $MD5SUM_CURRENT_CERT != $MD5SUM_NEW_CERT ]; then
|
||||
cp /var/lib/caddy/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory/develcow.derlinkman.de/develcow.derlinkman.de.crt /opt/mailcow-dockerized/data/assets/ssl/cert.pem
|
||||
cp /var/lib/caddy/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory/develcow.derlinkman.de/develcow.derlinkman.de.key /opt/mailcow-dockerized/data/assets/ssl/key.pem
|
||||
postfix_c=$(docker ps -qaf name=postfix-mailcow)
|
||||
dovecot_c=$(docker ps -qaf name=dovecot-mailcow)
|
||||
nginx_c=$(docker ps -qaf name=nginx-mailcow)
|
||||
docker restart ${postfix_c} ${dovecot_c} ${nginx_c}
|
||||
|
||||
else
|
||||
echo "Certs not copied from Caddy (Not needed)"
|
||||
fi
|
||||
```
|
||||
|
||||
!!! warning "Achtung"
|
||||
Der Zertifikatspfad von Caddy variiert je nach Installationsart.<br>
|
||||
Bei diesem Installationsbeispiel wurde Caddy mithilfe des Caddy Repos ([weitere Informationen hier](https://caddyserver.com/docs/install#debian-ubuntu-raspbian)) installiert.<br>
|
||||
<br>
|
||||
Um den Caddy Zertifikatspfad auf Ihrem System herauszufinden, genügt ein `find / -name "certificates"`.
|
||||
|
||||
|
||||
Dieses Skript könnte dann als Cronjob jede Stunde aufgerufen werden:
|
||||
|
||||
```bash
|
||||
0 * * * * /bin/bash /path/to/script/deploy-certs.sh >/dev/null 2>&1
|
||||
```
|
||||
|
||||
### Optional: Post-Hook-Skript für nicht-mailcow ACME-Clients
|
||||
|
||||
Die Verwendung eines lokalen Certbots (oder eines anderen ACME-Clients) erfordert den Neustart einiger Container, was Sie mit einem Post-Hook-Skript erledigen können.
|
||||
|
|
|
@ -246,6 +246,70 @@ After we have the certs dumped, we'll have to reload the configs from our postfi
|
|||
Aaand that should be it 😊, you can check if the Traefik router works fine trough Traefik's dashboard / traefik logs / accessing the setted domain trough https, or / and check HTTPS, SMTP and IMAP trough the commands shown on the page linked before.
|
||||
|
||||
|
||||
### Caddy v2 (supported by the community)
|
||||
|
||||
!!! warning
|
||||
This is an unsupported community contribution. Feel free to provide fixes.
|
||||
|
||||
The configuration of Caddy with mailcow is very simple.
|
||||
|
||||
In the caddyfile you just have to create a section for the mailserver.
|
||||
|
||||
For example
|
||||
``` hl_lines="1 3 13"
|
||||
|
||||
MAILCOW_HOSTNAME autodiscover.MAILCOW_HOSTNAME autoconfig.MAILCOW_HOSTNAME {
|
||||
log {
|
||||
output file /var/log/caddy/MAILCOW_HOSTNAME.log {
|
||||
roll_disabled
|
||||
roll_size 512M
|
||||
roll_uncompressed
|
||||
roll_local_time
|
||||
roll_keep 3
|
||||
roll_keep_for 48h
|
||||
}
|
||||
}
|
||||
|
||||
reverse_proxy 127.0.0.1:HTTP_BIND
|
||||
}
|
||||
```
|
||||
|
||||
This allows Caddy to automatically create the certificates and accept traffic for these mentioned domains and forward them to mailcow.
|
||||
|
||||
**Important**: The ACME client of mailcow must be disabled, otherwise mailcow will fail.
|
||||
|
||||
Since Caddy takes care of the certificates itself, we can use the following script to include the Caddy generated certificates into mailcow:
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
MD5SUM_CURRENT_CERT=($(md5sum /opt/mailcow-dockerized/data/assets/ssl/cert.pem))
|
||||
MD5SUM_NEW_CERT=($(md5sum /var/lib/caddy/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory/develcow.derlinkman.de/develcow.derlinkman.de.crt))
|
||||
|
||||
if [ $MD5SUM_CURRENT_CERT != $MD5SUM_NEW_CERT ]; then
|
||||
cp /var/lib/caddy/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory/develcow.derlinkman.de/develcow.derlinkman.de.crt /opt/mailcow-dockerized/data/assets/ssl/cert.pem
|
||||
cp /var/lib/caddy/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory/develcow.derlinkman.de/develcow.derlinkman.de.key /opt/mailcow-dockerized/data/assets/ssl/key.pem
|
||||
postfix_c=$(docker ps -qaf name=postfix-mailcow)
|
||||
dovecot_c=$(docker ps -qaf name=dovecot-mailcow)
|
||||
nginx_c=$(docker ps -qaf name=nginx-mailcow)
|
||||
docker restart ${postfix_c} ${dovecot_c} ${nginx_c}
|
||||
|
||||
else
|
||||
echo "Certs not copied from Caddy (Not needed)"
|
||||
fi
|
||||
```
|
||||
|
||||
!!! warning "Attention"
|
||||
Caddy's certificate path varies depending on the installation type.<br>
|
||||
In this installation example, Caddy was installed using the Caddy repo ([more informations here](https://caddyserver.com/docs/install#debian-ubuntu-raspbian)).<br>
|
||||
<br>
|
||||
To find out the Caddy certificate path on your system, just run a `find / -name "certificates"`.
|
||||
|
||||
This script could be called as a cronjob every hour:
|
||||
|
||||
```bash
|
||||
0 * * * * /bin/bash /path/to/script/deploy-certs.sh >/dev/null 2>&1
|
||||
```
|
||||
|
||||
### Optional: Post-hook script for non-mailcow ACME clients
|
||||
|
||||
Using a local certbot (or any other ACME client) requires to restart some containers, you can do this with a post-hook script.
|
||||
|
|
Laden …
In neuem Issue referenzieren