Selvhostet
Kom godt i gang
Vores selvhostede e-mailløsning, ligesom alle vores produkter, er 100% open-source—både frontend og backend. Det betyder:
- Fuld gennemsigtighed: Hver eneste linje kode, der behandler dine e-mails, er tilgængelig for offentlig inspektion
- Fællesskabsbidrag: Alle kan bidrage med forbedringer eller rette fejl
- Sikkerhed gennem åbenhed: Sårbarheder kan identificeres og rettes af et globalt fællesskab
- Ingen leverandørlåsning: Du er aldrig afhængig af vores virksomheds eksistens
Hele kodebasen er tilgængelig på GitHub på https://github.com/forwardemail/forwardemail.net, licenseret under MIT-licensen.
Arkitekturen inkluderer containere til:
- SMTP-server til udgående e-mail
- IMAP/POP3-servere til e-mail hentning
- Webinterface til administration
- Database til konfigurationslagring
- Redis til caching og ydeevne
- SQLite til sikker, krypteret postkasselagring
Note
Sørg for at tjekke vores selvhostede blog
Og for dem, der er interesserede i en mere opdelt trin-for-trin version, se vores Ubuntu eller Debian baserede guides.
Krav
Før du kører installationsscriptet, skal du sikre dig, at du har følgende:
- Operativsystem: En Linux-baseret server (understøtter i øjeblikket Ubuntu 22.04+).
- Ressourcer: 1 vCPU og 2GB RAM
- Root-adgang: Administrative rettigheder til at udføre kommandoer.
- Domænenavn: Et brugerdefineret domæne klar til DNS-konfiguration.
- Ren IP: Sørg for, at din server har en ren IP-adresse uden tidligere spam-rygte ved at tjekke blacklister. Mere info her.
- Offentlig IP-adresse med port 25 support
- Mulighed for at sætte reverse PTR
- IPv4 og IPv6 support
Tip
Se vores liste over fantastiske mailserverudbydere
Cloud-init / User-data
De fleste cloud-udbydere understøtter en cloud-init konfiguration til, når den virtuelle private server (VPS) provisioneres. Dette er en god måde at sætte nogle filer og miljøvariabler på forhånd til brug af scriptets initiale opsætningslogik, som vil omgå behovet for at spørge om yderligere information, mens scriptet kører.
Muligheder
EMAIL- e-mail brugt til certbot udløbs-påmindelserDOMAIN- brugerdefineret domæne (f.eks.example.com) brugt til selvhostet opsætningAUTH_BASIC_USERNAME- brugernavn brugt ved første opsætning til at beskytte sidenAUTH_BASIC_PASSWORD- adgangskode brugt ved første opsætning til at beskytte siden/root/.cloudflare.ini- (Kun Cloudflare-brugere) cloudflare konfigurationsfil brugt af certbot til DNS-konfiguration. Den kræver, at du sætter dit API-token viadns_cloudflare_api_token. Læs mere her. Eksempel:
#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
Kør følgende kommando på din server for at downloade og køre installationsscriptet:
bash <(curl -fsSL https://raw.githubusercontent.com/forwardemail/forwardemail.net/master/self-hosting/setup.sh)
Debug installationsscript
Tilføj DEBUG=true foran installationsscriptet for detaljeret output:
DEBUG=true bash <(curl -fsSL https://raw.githubusercontent.com/forwardemail/forwardemail.net/master/self-hosting/setup.sh)
Prompter
1. Initial opsætning
2. Opsæt backup
3. Opsæt automatiske opgraderinger
4. Forny certifikater
5. Gendan fra backup
6. Hjælp
7. Afslut
- Initial opsætning: Download den nyeste forward email kode, konfigurer miljøet, spørg efter dit brugerdefinerede domæne og opsæt alle nødvendige certifikater, nøgler og hemmeligheder.
- Opsæt backup: Opsætter en cron til at tage backup af mongoDB og redis ved hjælp af en S3-kompatibel lagerplads til sikker, fjernlagring. Separat vil sqlite blive backup'et ved login, hvis der er ændringer, for sikre, krypterede backups.
- Opsæt opgradering: Opsætter en cron til at søge efter natlige opdateringer, som sikkert genopbygger og genstarter infrastrukturkomponenter.
- Forny certifikater: Certbot / lets encrypt bruges til SSL-certifikater, og nøgler udløber hver 3. måned. Dette vil forny certifikaterne for dit domæne og placere dem i den nødvendige mappe, så relaterede komponenter kan bruge dem. Se vigtige filstier
- Gendan fra backup: Vil aktivere mongodb og redis til at gendanne fra backupdata.
Initial opsætning (Valgmulighed 1)
Vælg valgmulighed 1. Initial opsætning for at starte.
Når det er færdigt, bør du se en succesbesked. Du kan endda køre docker ps for at se de komponenter, der er startet. Mere information om komponenter nedenfor.
Services
| Service Navn | Standard Port | Beskrivelse |
|---|---|---|
| Web | 443 |
Webinterface til alle admin-interaktioner |
| API | 4000 |
API-lag til at abstrahere databaser |
| Bree | Ingen | Baggrundsjob og task runner |
| SMTP | 465 (anbefalet) / 587 |
SMTP-server til udgående email |
| SMTP Bree | Ingen | SMTP baggrundsjob |
| MX | 2525 |
Mail exchange til indgående email og email videresendelse |
| IMAP | 993/2993 |
IMAP-server til indgående email og postkassehåndtering |
| POP3 | 995/2995 |
POP3-server til indgående email og postkassehåndtering |
| SQLite | 3456 |
SQLite-server til interaktioner med sqlite-database(r) |
| SQLite Bree | Ingen | SQLite baggrundsjob |
| CalDAV | 5000 |
CalDAV-server til kalenderhåndtering |
| CardDAV | 6000 |
CardDAV-server til kalenderhåndtering |
| MongoDB | 27017 |
MongoDB database til det meste datastyring |
| Redis | 6379 |
Redis til caching og tilstandsstyring |
| SQLite | Ingen | SQLite database(r) til krypterede postkasser |
Vigtige filstier
Bemærk: Host path nedenfor er relativ til /root/forwardemail.net/self-hosting/.
| Komponent | Host sti | Container sti |
|---|---|---|
| MongoDB | ./mongo-backups |
/backups |
| Redis | ./redis-data |
/data |
| Sqlite | ./sqlite-data |
/mnt/{SQLITE_STORAGE_PATH} |
| Env fil | ./.env |
/app/.env |
| SSL certifikater/nøgler | ./ssl |
/app/ssl/ |
| Privat nøgle | ./ssl/privkey.pem |
/app/ssl/privkey.pem |
| Full chain certifikat | ./ssl/fullchain.pem |
/app/ssl/fullchain.pem |
| CA certifikat | ./ssl/cert.pem |
/app/ssl/cert.pem |
| DKIM privat nøgle | ./ssl/dkim.key |
/app/ssl/dkim.key |
Important
Gem .env-filen sikkert. Den er afgørende for genopretning i tilfælde af fejl.
Du kan finde den i /root/forwardemail.net/self-hosting/.env.
Konfiguration
Initial DNS-opsætning
Hos din valgte DNS-udbyder skal du konfigurere de relevante DNS-poster. Bemærk, at alt i parenteser (<>) er dynamisk og skal opdateres med din værdi.
| Type | Navn | Indhold | TTL |
|---|---|---|---|
| A | "@", ".", eller tom | <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 | "@", ".", eller tom | mx.<domain_name> (prioritet 0) | auto |
| TXT | "@", ".", eller tom | "v=spf1 a -all" | auto |
Reverse DNS / PTR-post
Reverse DNS (rDNS) eller reverse pointer-poster (PTR-poster) er essentielle for mailservere, fordi de hjælper med at verificere legitimiteten af den server, der sender e-mailen. Hver cloud-udbyder gør dette forskelligt, så du skal undersøge, hvordan du tilføjer "Reverse DNS" for at kortlægge værten og IP'en til det tilsvarende værtsnavn. Mest sandsynligt i netværkssektionen hos udbyderen.
Port 25 blokeret
Nogle internetudbydere og cloud-udbydere blokerer port 25 for at undgå misbrug. Du kan blive nødt til at indsende en supportsag for at åbne port 25 til SMTP / udgående e-mail.
Onboarding
-
Åbn landingssiden Naviger til https://<domain_name>, hvor du erstatter <domain_name> med det domæne, der er konfigureret i dine DNS-indstillinger. Du bør se Forward Email landingssiden.
-
Log ind og onboard dit domæne
- Log ind med en gyldig e-mail og adgangskode.
- Indtast det domænenavn, du ønsker at opsætte (det skal matche DNS-konfigurationen).
- Følg vejledningen for at tilføje de nødvendige MX- og TXT-poster til verifikation.
- Fuldfør opsætningen
- Når det er verificeret, får du adgang til Alias-siden for at oprette dit første alias.
- Valgfrit kan du konfigurere SMTP til udgående e-mail under Domæneindstillinger. Dette kræver yderligere DNS-poster.
Note
Ingen information sendes uden for din server. Den selvhostede mulighed og den første konto er kun til admin-login og webvisning for at administrere domæner, aliaser og relaterede e-mail-konfigurationer.
Testning
Oprettelse af dit første alias
- Gå til Alias-siden Åbn siden til alias-administration:
https://<domain_name>/en/my-account/domains/<domain_name>/aliases
- Tilføj et nyt alias
- Klik på Tilføj alias (øverst til højre).
- Indtast alias-navnet og juster e-mail-indstillinger efter behov.
- (Valgfrit) Aktiver IMAP/POP3/CalDAV/CardDAV support ved at markere afkrydsningsfeltet.
- Klik på Opret alias.
- Sæt en adgangskode
- Klik på Generer adgangskode for at oprette en sikker adgangskode.
- Denne adgangskode vil være nødvendig for at logge ind i din e-mail-klient.
- Konfigurer din e-mail-klient
- Brug en e-mail-klient som Thunderbird.
- Indtast alias-navnet og den genererede adgangskode.
- Konfigurer IMAP og SMTP indstillingerne tilsvarende.
E-mail-serverindstillinger
Brugernavn: <alias name>
| Type | Værtsnavn | Port | Forbindelsessikkerhed | Autentifikation |
|---|---|---|---|---|
| SMTP | smtp.<domain_name> | 465 | SSL / TLS | Normal adgangskode |
| IMAP | imap.<domain_name> | 993 | SSL / TLS | Normal adgangskode |
Afsendelse / modtagelse af din første e-mail
Når det er konfigureret, bør du kunne sende og modtage e-mail til din nyoprettede og selvhostede e-mailadresse!
Fejlfinding
Hvorfor virker dette ikke uden for Ubuntu og Debian
Vi arbejder i øjeblikket på at understøtte MacOS og vil se på andre. Venligst åbn en diskussion eller bidrag, hvis du gerne vil se andre understøttet.
Hvorfor fejler certbot acme-udfordringen
Den mest almindelige faldgrube er, at certbot / letsencrypt nogle gange vil anmode om 2 udfordringer. Du skal være sikker på at tilføje BEGGE txt-poster.
Eksempel: Du kan se to udfordringer som disse: _acme-challenge.example.com -> "randomstring1" _acme-challenge.example.com -> "randomstring2"
Det er også muligt, at DNS-propagation ikke er fuldført. Du kan bruge værktøjer som: https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.<your_domain>. Dette vil give dig en idé om, hvorvidt dine TXT-postændringer er blevet reflekteret. Det er også muligt, at lokal DNS-cache på din vært stadig bruger en gammel, forældet værdi eller ikke har opfanget de seneste ændringer.
En anden mulighed er at bruge de automatiserede certbot DNS-ændringer ved at sætte /root/.cloudflare.ini filen med API-tokenet i din cloud-init / user-data ved den indledende VPS-opsætning eller oprette denne fil og køre scriptet igen. Dette vil automatisk håndtere DNS-ændringer og udfordringsopdateringer.
Hvad er brugernavnet og adgangskoden til basic auth
For selvhosting tilføjer vi en første gang browser-native autentificerings-popup med et simpelt brugernavn (admin) og adgangskode (tilfældigt genereret ved den indledende opsætning). Vi tilføjer dette som en beskyttelse i tilfælde af, at automatisering / scrapers på en eller anden måde slår dig til først at tilmelde dig via weboplevelsen. Du kan finde denne adgangskode efter den indledende opsætning i din .env fil under AUTH_BASIC_USERNAME og AUTH_BASIC_PASSWORD.
Hvordan ved jeg, hvad der kører
Du kan køre docker ps for at se alle kørende containere, som bliver startet fra docker-compose-self-hosting.yml filen. Du kan også køre docker ps -a for at se alt (inklusive containere, der ikke kører).
Hvordan ved jeg, om noget ikke kører, som burde
Du kan køre docker ps -a for at se alt (inklusive containere, der ikke kører). Du kan se en exit-log eller note.
Hvordan finder jeg logs
Du kan få flere logs via docker logs -f <container_name>. Hvis noget er afsluttet, er det sandsynligvis relateret til, at .env filen er konfigureret forkert.
Inden for web-UI’en kan du se /admin/emails og /admin/logs for henholdsvis udgående emaillogs og fejl-logs.
Hvorfor timeout’er mine udgående emails
Hvis du ser en besked som Connection timed out when connecting to MX server... så skal du muligvis tjekke, om port 25 er blokeret. Det er almindeligt, at internetudbydere eller cloud-udbydere blokerer denne som standard, hvor du muligvis skal kontakte support / oprette en sag for at få den åbnet.
Hvilke værktøjer skal jeg bruge til at teste email-konfigurations bedste praksis og IP-ry
Tag et kig på vores FAQ her.