CloudFlare Anwendungsfall
Diese Anweisungen gelten für selbst gehostete Discourse-Foren, die den Cloudflare Proxy verwenden.
Wenn Sie den Cloudflare Proxy verwenden, verhindert dies, dass jeglicher SMTP-Verkehr (Port 25) Ihren Server erreicht. Dies erfordert die Einrichtung eines anderen Subdomains, damit der Mail-Receiver funktioniert.
Wenn Ihre Domain beispielsweise forums.domain.tld lautet, müssen Sie eine neue Subdomain erstellen, z. B. mail.domain.tld.
Mit Cloudflare haben Sie die folgenden zusätzlichen Schritte.
- Erstellen Sie den A-Eintrag für die neue Subdomain. Er verwendet dieselbe IP-Adresse wie Ihre
forums.domain.tld. - Erstellen Sie den MX-Eintrag für die neue Subdomain, wie in den Hauptanweisungen angegeben.
Folgen Sie den Hauptanweisungen mit dieser geringfügigen Änderung. Es wird einwandfrei funktionieren, wenn die TLS-Sicherheit deaktiviert ist.
Wenn Sie die TLS-Sicherheit aktivieren möchten, sind zusätzliche Arbeiten erforderlich.
Überblick über die TLS-Einrichtung
Diese Anweisungen installieren Certbot und ein CloudFlare Certbot-Plugin. Die Befehle werden LetsEncrypt-Zertifikate im Standalone-Modus über den DNS-Zertifizierungsprozess abrufen. Sobald die Zertifikate verfügbar sind, werden sie in den gemeinsam genutzten Bereich des Mail-Receivers kopiert, damit der Container sie verwenden kann. Wir müssen das DNS-Modell verwenden, da Discourse bereits Port 80 verwendet.
DNS-Herausforderung
Anstatt den Besitz der Domain über HTTP nachzuweisen, beweist Certbot dies durch das Erstellen eines TXT-Eintrags in Ihrem DNS. Da Ihr DNS Cloudflare ist, kann dies mit einem Cloudflare API-Token vollständig automatisiert werden – kein Port 80, kein Herunterfahren des Webservers erforderlich.
Funktionsweise
Certbot → Erstellt den _acme-challenge.mail.lotuselan.net TXT-Eintrag in Cloudflare
Let's Encrypt → Ruft diesen TXT-Eintrag ab → Validiert → Stellt das Zertifikat aus
Certbot → Löscht den TXT-Eintrag
All dies geschieht auf Ihrem Basis-Server, nicht innerhalb des Discourse-Containers.
Einrichtung
1 — Installieren Sie Certbot und das Cloudflare Certbot-Plugin:
bash
apt install certbot python3-certbot-dns-cloudflare -y
2 — Erstellen Sie ein Cloudflare API-Token:
- Gehen Sie zu Cloudflare → Mein Profil → API-Tokens → Token erstellen
- Verwenden Sie die Vorlage „Zonen-DNS bearbeiten“
- Berechtigungen:
Zone → DNS → Bearbeiten - Zonenressourcen:
Einschließlich → Spezifische Zone → lotuselan.net - IP-Einschränkungen: Nur so einrichten, dass der Zugriff von der IP-Adresse Ihres Servers erlaubt wird
- Kopieren Sie das Token
3 — Speichern Sie das Token in einer Anmeldedatei:
bash
mkdir -p /etc/letsencrypt/cloudflare
nano /etc/letsencrypt/cloudflare/credentials.ini
Fügen Sie ein:
dns_cloudflare_api_token = IHR_CLOUDFLARE_API_TOKEN
Sichern Sie die Datei:
bash
chmod 600 /etc/letsencrypt/cloudflare/credentials.ini
4 — Fordern Sie das Zertifikat an:
Aktualisieren Sie den folgenden Befehl mit Ihrer Admin-E-Mail-Adresse und dem Domainnamen.
bash
certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials /etc/letsencrypt/cloudflare/credentials.ini \
--non-interactive \
--agree-tos \
--email Ihreemailadresse@domain.tld \
-d mail.domain.tld
In Ihren Ergebnissen sollte eine Meldung erscheinen, die besagt:
Certbot hat eine geplante Aufgabe eingerichtet, um dieses Zertifikat automatisch im Hintergrund zu erneuern.
Certbot richtet einen Cronjob ein, um die Ablaufdaten der Zertifikate zweimal täglich zu überprüfen. Es wird die Zertifikate erneuern, wenn sie weniger als 30 Tage vor dem Ablauf stehen. Sie können dies überprüfen durch:
# Prüfen, ob der systemd-Timer aktiv ist (die meisten modernen Ubuntu-Systeme)
systemctl status certbot.timer
# Oder prüfen, ob ein Cronjob hinzugefügt wurde
cat /etc/cron.d/certbot
Sie haben nun die TLS-Zertifikate auf Ihrem Server für den neuen Mail-Receiver-Domainnamen. Sie befinden sich nicht an einem Ort, an dem sie verwendet werden können.
5 — Richten Sie ein Bereitstellungsskript für das Verschieben von Dateien ein
Da Certbot automatisch erneuert, müssen Sie mit Ihrem Skript nur die Discourse-spezifischen Teile behandeln – das Kopieren der erneuerten Zertifikate und das Neuerstellen des Mail-Receivers. Sie können das Skript erheblich vereinfachen, indem Sie den integrierten Deploy Hook von Certbot verwenden, der nach einer erfolgreichen Erneuerung automatisch ausgeführt wird.
Erstellen Sie eine Deploy-Hook-Datei:
bash
nano /etc/letsencrypt/renewal-hooks/deploy/mail-receiver-deploy.sh
chmod +x /etc/letsencrypt/renewal-hooks/deploy/mail-receiver-deploy.sh
Fügen Sie dies ein:
bash
#!/bin/bash
DOMAIN="mail.domain.tld"
DISCOURSE_DIR="/var/discourse"
CERT_SRC="/etc/letsencrypt/live/${DOMAIN}"
CERT_DEST_1="${DISCOURSE_DIR}/shared/mail-receiver/letsencrypt/${DOMAIN}"
CERT_DEST_2="${DISCOURSE_DIR}/shared/mail-receiver/letsencrypt/${DOMAIN}_ecc"
ADMIN_EMAIL="admin email address"
LOG_FILE="/var/log/mail-cert-renewal.log"
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}
log "=== Certbot deploy hook für ${DOMAIN} ausgelöst ==="
# Zertifikate kopieren (verwenden Sie -L, um symbolische Links aufzulösen)
for DEST in "$CERT_DEST_1" "$CERT_DEST_2"; do
mkdir -p "$DEST"
cp -L "${CERT_SRC}/fullchain.pem" "${DEST}/fullchain.pem"
cp -L "${CERT_SRC}/privkey.pem" "${DEST}/privkey.pem"
cp -L "${CERT_SRC}/cert.pem" "${DEST}/cert.pem"
cp -L "${CERT_SRC}/chain.pem" "${DEST}/chain.pem"
chmod 644 "${DEST}/fullchain.pem" "${DEST}/cert.pem" "${DEST}/chain.pem"
chmod 600 "${DEST}/privkey.pem"
log "Zertifikate kopiert nach ${DEST}"
done
# Mail-Receiver neu erstellen
cd "$DISCOURSE_DIR" || { echo "Kann nicht nach ${DISCOURSE_DIR}" | mail -s "[FEHLER] Mail-Zertifikat-Deploy-Hook fehlgeschlagen" "$ADMIN_EMAIL"; exit 1; }
log "Erstelle mail-receiver neu..."
if ./launcher rebuild mail-receiver >> "$LOG_FILE" 2>&1; then
log "mail-receiver erfolgreich neu erstellt"
else
log "FEHLER: Neuerstellung fehlgeschlagen"
echo "mail-receiver-Neuerstellung nach Zertifikatserneuerung fehlgeschlagen. Prüfen Sie ${LOG_FILE}" | \
mail -s "[FEHLER] Mail-Zertifikat-Deploy-Hook fehlgeschlagen" "$ADMIN_EMAIL"
exit 1
fi
log "=== Deploy hook erfolgreich abgeschlossen ==="
Kein manueller Cronjob erforderlich – Certbot koordiniert den gesamten Prozess. Der Deploy Hook wird nur ausgelöst, wenn tatsächlich eine Erneuerung stattfindet, sodass Ihr Mail-Receiver an Tagen, an denen Certbot prüft, aber nicht erneuert, keine unnötigen Neuerstellungen durchläuft.
Um den Erneuerungs-Hook zu testen, führen Sie Folgendes aus:
bash
bash /etc/letsencrypt/renewal-hooks/deploy/mail-receiver-deploy.sh
Wenn alles korrekt eingerichtet wurde, wird dies
→ Zertifikate in Discourse-Verzeichnisse kopieren
→ mail-receiver neu erstellen
→ alles protokollieren
6 — TLS in mail-receiver.yml einrichten