Selbst gehostet
Erste Schritte
Unsere selbst gehostete E-Mail-Lösung ist wie alle unsere Produkte zu 100 % Open Source â sowohl Frontend als auch Backend. Das bedeutet:
- Volle Transparenz: Jede Codezeile, die Ihre E-Mails verarbeitet, ist öffentlich einsehbar
- Community-BeitrÀge: Jeder kann Verbesserungen beitragen oder Fehler beheben
- Sicherheit durch Offenheit: Schwachstellen können von einer globalen Gemeinschaft erkannt und behoben werden
- Keine Anbieterbindung: Sie sind nie von der Existenz unseres Unternehmens abhÀngig
Der gesamte Code ist auf GitHub unter https://github.com/forwardemail/forwardemail.net verfĂŒgbar und steht unter der MIT-Lizenz.
Die Architektur umfasst Container fĂŒr:
- SMTP-Server fĂŒr ausgehende E-Mails
- IMAP/POP3-Server fĂŒr den E-Mail-Abruf
- WeboberflÀche zur Verwaltung
- Datenbank zur Konfigurationsspeicherung
- Redis fĂŒr Caching und Performance
- SQLite fĂŒr sichere, verschlĂŒsselte Postfachspeicherung
Note
Schauen Sie sich unbedingt unseren self-hosted Blog an
Und fĂŒr diejenigen, die eine detailliertere Schritt-fĂŒr-Schritt-Anleitung wĂŒnschen, siehe unsere Ubuntu oder Debian basierten Anleitungen.
Anforderungen
Bevor Sie das Installationsskript ausfĂŒhren, stellen Sie sicher, dass Sie Folgendes haben:
- Betriebssystem: Ein Linux-basierter Server (derzeit unterstĂŒtzt Ubuntu 22.04+).
- Ressourcen: 1 vCPU und 2 GB RAM
- Root-Zugriff: Administratorrechte zur AusfĂŒhrung von Befehlen.
- Domainname: Eine eigene Domain, bereit fĂŒr die DNS-Konfiguration.
- Saubere IP: Stellen Sie sicher, dass Ihr Server eine saubere IP-Adresse ohne vorherige Spam-Reputation hat, indem Sie Blacklists prĂŒfen. Mehr Infos hier.
- Ăffentliche IP-Adresse mit Port-25-UnterstĂŒtzung
- Möglichkeit, einen Reverse PTR einzurichten
- IPv4- und IPv6-UnterstĂŒtzung
Tip
Siehe unsere Liste der awesome mail server providers
Cloud-init / User-data
Die meisten Cloud-Anbieter unterstĂŒtzen eine Cloud-init-Konfiguration, die beim Bereitstellen des virtuellen privaten Servers (VPS) verwendet wird. Dies ist eine groĂartige Möglichkeit, einige Dateien und Umgebungsvariablen im Voraus fĂŒr die Verwendung durch die initiale Setup-Logik des Skripts festzulegen, wodurch die Notwendigkeit entfĂ€llt, wĂ€hrend der SkriptausfĂŒhrung nach zusĂ€tzlichen Informationen gefragt zu werden.
Optionen
EMAIL- E-Mail-Adresse fĂŒr Certbot-Erinnerungen an AblaufdatenDOMAIN- eigene Domain (z. B.example.com) fĂŒr die Selbsthosting-EinrichtungAUTH_BASIC_USERNAME- Benutzername, der beim ersten Setup zum Schutz der Seite verwendet wirdAUTH_BASIC_PASSWORD- Passwort, das beim ersten Setup zum Schutz der Seite verwendet wird/root/.cloudflare.ini- (Nur Cloudflare-Nutzer) Cloudflare-Konfigurationsdatei, die von Certbot fĂŒr die DNS-Konfiguration verwendet wird. Erfordert, dass Sie Ihr API-Token ĂŒberdns_cloudflare_api_tokensetzen. Mehr dazu hier. Beispiel:
#cloud-config
write_files:
- path: /root/.cloudflare.ini
content: |
dns_cloudflare_api_token = "xxx"
owner: root:root
permissions: '0600'
- path: /etc/profile.d/env.sh
content: |
export EMAIL="test@myemail.com"
export DOMAIN="mydomain.com"
runcmd:
- chmod +x /etc/profile.d/env.sh
Installation
FĂŒhren Sie den folgenden Befehl auf Ihrem Server aus, um das Installationsskript herunterzuladen und auszufĂŒhren:
bash <(curl -fsSL https://raw.githubusercontent.com/forwardemail/forwardemail.net/master/self-hosting/setup.sh)
Installationsskript debuggen
FĂŒgen Sie DEBUG=true vor dem Installationsskript hinzu, um eine ausfĂŒhrliche Ausgabe zu erhalten:
DEBUG=true bash <(curl -fsSL https://raw.githubusercontent.com/forwardemail/forwardemail.net/master/self-hosting/setup.sh)
Eingabeaufforderungen
1. Initiale Einrichtung
2. Backups einrichten
3. Automatische Updates einrichten
4. Zertifikate erneuern
5. Aus Backup wiederherstellen
6. Hilfe
7. Beenden
- Initiale Einrichtung: LĂ€dt den neuesten Forward Email Code herunter, konfiguriert die Umgebung, fragt Ihre benutzerdefinierte Domain ab und richtet alle notwendigen Zertifikate, SchlĂŒssel und Geheimnisse ein.
- Backup einrichten: Richtet einen Cron-Job ein, um MongoDB und Redis mit einem S3-kompatiblen Speicher fĂŒr sichere, entfernte Sicherungen zu sichern. Separat wird SQLite beim Login gesichert, falls Ănderungen vorliegen, fĂŒr sichere, verschlĂŒsselte Backups.
- Update einrichten: Richtet einen Cron-Job ein, der nach nÀchtlichen Updates sucht, welche die Infrastrukturkomponenten sicher neu bauen und neu starten.
- Zertifikate erneuern: Certbot / lets encrypt wird fĂŒr SSL-Zertifikate verwendet, die alle 3 Monate ablaufen. Dies erneuert die Zertifikate fĂŒr Ihre Domain und legt sie im notwendigen Ordner ab, damit die zugehörigen Komponenten sie verwenden können. Siehe wichtige Dateipfade
- Aus Backup wiederherstellen: Löst die Wiederherstellung von MongoDB und Redis aus Backup-Daten aus.
Initiale Einrichtung (Option 1)
WĂ€hlen Sie Option 1. Initiale Einrichtung, um zu beginnen.
Nach Abschluss sollten Sie eine Erfolgsmeldung sehen. Sie können sogar docker ps ausfĂŒhren, um die gestarteten Komponenten zu sehen. Weitere Informationen zu den Komponenten unten.
Dienste
| Dienstname | Standardport | Beschreibung |
|---|---|---|
| Web | 443 |
WeboberflĂ€che fĂŒr alle Admin-Interaktionen |
| API | 4000 |
API-Schicht zur Abstraktion von Datenbanken |
| Bree | Keine | Hintergrundjob- und Task-Runner |
| SMTP | 465 (empfohlen) / 587 |
SMTP-Server fĂŒr ausgehende E-Mails |
| SMTP Bree | Keine | SMTP-Hintergrundjob |
| MX | 2525 |
Mail-Exchange fĂŒr eingehende E-Mails und Weiterleitung |
| IMAP | 993/2993 |
IMAP-Server fĂŒr eingehende E-Mails und Postfachverwaltung |
| POP3 | 995/2995 |
POP3-Server fĂŒr eingehende E-Mails und Postfachverwaltung |
| SQLite | 3456 |
SQLite-Server fĂŒr Interaktionen mit SQLite-Datenbanken |
| SQLite Bree | Keine | SQLite-Hintergrundjob |
| CalDAV | 5000 |
CalDAV-Server fĂŒr Kalenderverwaltung |
| CardDAV | 6000 |
CardDAV-Server fĂŒr Kalenderverwaltung |
| MongoDB | 27017 |
MongoDB-Datenbank fĂŒr die meisten Datenverwaltungen |
| Redis | 6379 |
Redis fĂŒr Caching und Zustandsverwaltung |
| SQLite | Keine | SQLite-Datenbank(en) fĂŒr verschlĂŒsselte PostfĂ€cher |
Wichtige Dateipfade
Hinweis: Host-Pfad unten ist relativ zu /root/forwardemail.net/self-hosting/.
| Komponente | Host-Pfad | Container-Pfad |
|---|---|---|
| MongoDB | ./mongo-backups |
/backups |
| Redis | ./redis-data |
/data |
| Sqlite | ./sqlite-data |
/mnt/{SQLITE_STORAGE_PATH} |
| Env-Datei | ./.env |
/app/.env |
| SSL-Zertifikate/SchlĂŒssel | ./ssl |
/app/ssl/ |
| Privater SchlĂŒssel | ./ssl/privkey.pem |
/app/ssl/privkey.pem |
| VollstÀndiges Zertifikat | ./ssl/fullchain.pem |
/app/ssl/fullchain.pem |
| CA-Zertifikat | ./ssl/cert.pem |
/app/ssl/cert.pem |
| DKIM privater SchlĂŒssel | ./ssl/dkim.key |
/app/ssl/dkim.key |
Important
Speichern Sie die .env-Datei sicher. Sie ist entscheidend fĂŒr die Wiederherstellung im Falle eines Ausfalls.
Sie finden diese unter /root/forwardemail.net/self-hosting/.env.
Konfiguration
Erste DNS-Einrichtung
Konfigurieren Sie bei Ihrem bevorzugten DNS-Anbieter die entsprechenden DNS-EintrÀge. Beachten Sie, dass alles in Klammern (<>) dynamisch ist und mit Ihrem Wert aktualisiert werden muss.
| Typ | Name | Inhalt | TTL |
|---|---|---|---|
| A | "@", ".", oder leer | <ip_address> | auto |
| CNAME | api | <domain_name> | auto |
| CNAME | caldav | <domain_name> | auto |
| CNAME | carddav | <domain_name> | auto |
| CNAME | fe-bounces | <domain_name> | auto |
| CNAME | imap | <domain_name> | auto |
| CNAME | mx | <domain_name> | auto |
| CNAME | pop3 | <domain_name> | auto |
| CNAME | smtp | <domain_name> | auto |
| MX | "@", ".", oder leer | mx.<domain_name> (PrioritÀt 0) | auto |
| TXT | "@", ".", oder leer | "v=spf1 a -all" | auto |
Reverse DNS / PTR-Eintrag
Reverse DNS (rDNS) oder Reverse-Pointer-EintrĂ€ge (PTR-EintrĂ€ge) sind fĂŒr E-Mail-Server essenziell, da sie helfen, die LegitimitĂ€t des Servers, der die E-Mail sendet, zu ĂŒberprĂŒfen. Jeder Cloud-Anbieter handhabt dies unterschiedlich, daher mĂŒssen Sie nachschauen, wie man "Reverse DNS" hinzufĂŒgt, um den Host und die IP auf den entsprechenden Hostnamen abzubilden. Wahrscheinlich im Netzwerkbereich des Anbieters.
Port 25 blockiert
Einige ISPs und Cloud-Anbieter blockieren Port 25, um Missbrauch zu verhindern. Möglicherweise mĂŒssen Sie ein Support-Ticket einreichen, um Port 25 fĂŒr SMTP / ausgehende E-Mails freizuschalten.
Onboarding
-
Ăffnen Sie die Landing Page
Navigieren Sie zu https://<domain_name>, wobei Sie <domain_name> durch die in Ihren DNS-Einstellungen konfigurierte Domain ersetzen. Sie sollten die Forward Email Landing Page sehen. -
Melden Sie sich an und richten Sie Ihre Domain ein
- Melden Sie sich mit einer gĂŒltigen E-Mail-Adresse und Passwort an.
- Geben Sie den Domainnamen ein, den Sie einrichten möchten (dies muss mit der DNS-Konfiguration ĂŒbereinstimmen).
- Folgen Sie den Anweisungen, um die erforderlichen MX- und TXT-EintrĂ€ge zur Verifizierung hinzuzufĂŒgen.
- Einrichtung abschlieĂen
- Nach der Verifizierung greifen Sie auf die Alias-Seite zu, um Ihren ersten Alias zu erstellen.
- Optional konfigurieren Sie SMTP fĂŒr ausgehende E-Mails in den Domain-Einstellungen. Dies erfordert zusĂ€tzliche DNS-EintrĂ€ge.
Note
Es werden keine Informationen auĂerhalb Ihres Servers gesendet. Die selbst gehostete Option und das initiale Konto dienen nur fĂŒr den Admin-Login und die Webansicht zur Verwaltung von Domains, Aliasen und zugehörigen E-Mail-Konfigurationen.
Testen
Erstellen Ihres ersten Alias
- Navigieren Sie zur Alias-Seite
Ăffnen Sie die Alias-Verwaltungsseite:
https://<domain_name>/en/my-account/domains/<domain_name>/aliases
- FĂŒgen Sie einen neuen Alias hinzu
- Klicken Sie auf Alias hinzufĂŒgen (oben rechts).
- Geben Sie den Alias-Namen ein und passen Sie die E-Mail-Einstellungen nach Bedarf an.
- (Optional) Aktivieren Sie die UnterstĂŒtzung fĂŒr IMAP/POP3/CalDAV/CardDAV durch Auswahl des KontrollkĂ€stchens.
- Klicken Sie auf Alias erstellen.
- Legen Sie ein Passwort fest
- Klicken Sie auf Passwort generieren, um ein sicheres Passwort zu erstellen.
- Dieses Passwort wird benötigt, um sich im E-Mail-Client anzumelden.
- Konfigurieren Sie Ihren E-Mail-Client
- Verwenden Sie einen E-Mail-Client wie Thunderbird.
- Geben Sie den Alias-Namen und das generierte Passwort ein.
- Konfigurieren Sie die IMAP- und SMTP-Einstellungen entsprechend.
E-Mail-Server-Einstellungen
Benutzername: <alias name>
| Typ | Hostname | Port | Verbindungssicherheit | Authentifizierung |
|---|---|---|---|---|
| SMTP | smtp.<domain_name> | 465 | SSL / TLS | Normales Passwort |
| IMAP | imap.<domain_name> | 993 | SSL / TLS | Normales Passwort |
Senden / Empfangen Ihrer ersten E-Mail
Nach der Konfiguration sollten Sie in der Lage sein, E-Mails an Ihre neu erstellte und selbst gehostete E-Mail-Adresse zu senden und zu empfangen!
Fehlerbehebung
Warum funktioniert das auĂerhalb von Ubuntu und Debian nicht
Wir arbeiten derzeit daran, MacOS zu unterstĂŒtzen und werden weitere Systeme in Betracht ziehen. Bitte eröffnen Sie eine Diskussion oder leisten Sie einen Beitrag, wenn Sie UnterstĂŒtzung fĂŒr andere Systeme wĂŒnschen.
Warum schlÀgt die certbot acme challenge fehl
Der hĂ€ufigste Fehler ist, dass certbot / letsencrypt manchmal 2 Challenges anfordert. Sie mĂŒssen sicherstellen, dass Sie BEIDE TXT-EintrĂ€ge hinzufĂŒgen.
Beispiel: Sie könnten zwei Challenges wie folgt sehen: _acme-challenge.example.com -> "randomstring1" _acme-challenge.example.com -> "randomstring2"
Es ist auch möglich, dass die DNS-Propagation noch nicht abgeschlossen ist. Sie können Tools wie https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.<your_domain> verwenden. Dies gibt Ihnen eine Vorstellung, ob Ihre TXT-Eintrag-Ănderungen bereits ĂŒbernommen wurden. Es ist auch möglich, dass der lokale DNS-Cache auf Ihrem Host noch einen alten, veralteten Wert verwendet oder die jĂŒngsten Ănderungen noch nicht ĂŒbernommen hat.
Eine weitere Möglichkeit ist die Verwendung der automatisierten certbot DNS-Ănderungen, indem Sie die Datei /root/.cloudflare.ini mit dem API-Token in Ihrem cloud-init / user-data bei der ersten VPS-Einrichtung setzen oder diese Datei erstellen und das Skript erneut ausfĂŒhren. Dies verwaltet die DNS-Ănderungen und Challenge-Updates automatisch.
Wie lauten der Basic-Auth-Benutzername und das Passwort
FĂŒr das Self-Hosting fĂŒgen wir beim ersten Zugriff einen nativen Browser-Authentifizierungs-Popup mit einem einfachen Benutzernamen (admin) und einem Passwort (zufĂ€llig bei der Erstinstallation generiert) hinzu. Dies dient als Schutz, falls Automatisierungen / Scraper Ihnen zuvorkommen und sich zuerst ĂŒber die WeboberflĂ€che anmelden. Sie finden dieses Passwort nach der Erstinstallation in Ihrer .env-Datei unter AUTH_BASIC_USERNAME und AUTH_BASIC_PASSWORD.
Wie erkenne ich, was lÀuft
Sie können docker ps ausfĂŒhren, um alle laufenden Container zu sehen, die aus der Datei docker-compose-self-hosting.yml gestartet wurden. Mit docker ps -a sehen Sie auch alle Container (einschlieĂlich der nicht laufenden).
Wie erkenne ich, ob etwas nicht lÀuft, das laufen sollte
Sie können docker ps -a ausfĂŒhren, um alles zu sehen (einschlieĂlich der nicht laufenden Container). Möglicherweise sehen Sie ein Exit-Log oder eine Notiz.
Wie finde ich Logs
Sie können weitere Logs mit docker logs -f <container_name> abrufen. Wenn etwas beendet wurde, hÀngt das wahrscheinlich mit einer falsch konfigurierten .env-Datei zusammen.
Innerhalb der Web-UI können Sie /admin/emails und /admin/logs fĂŒr ausgehende E-Mail-Logs bzw. Fehlerlogs einsehen.
Warum laufen meine ausgehenden E-Mails in ein Timeout
Wenn Sie eine Meldung wie Connection timed out when connecting to MX server... sehen, mĂŒssen Sie möglicherweise prĂŒfen, ob Port 25 blockiert ist. Es ist ĂŒblich, dass ISPs oder Cloud-Anbieter diesen Port standardmĂ€Ăig blockieren, sodass Sie den Support kontaktieren oder ein Ticket eröffnen mĂŒssen, um ihn freizuschalten.
Welche Tools sollte ich verwenden, um E-Mail-Konfiguration, Best Practices und IP-Reputation zu testen
Schauen Sie sich unsere FAQ hier an.