Selvvert
Komme i gang
Vår selvhostede e-postløsning, som alle produktene våre, er 100 % åpen kildekode – både frontend og backend. Dette betyr:
- Fullstendig åpenhet: Hver linje med kode som behandler e-postene dine er tilgjengelig for offentlig gransking
- Fellesskapsbidrag: Alle kan bidra med forbedringer eller fikse problemer
- Trygghet gjennom åpenhet: Sårbarheter kan identifiseres og fikses av et globalt fellesskap
- Ingen leverandørlåsing: Du er aldri avhengig av selskapets eksistens
Hele kodebasen er tilgjengelig på GitHub på https://github.com/forwardemail/forwardemail.net, lisensiert under MIT-lisensen.
Arkitekturen inkluderer containere for:
- SMTP-server for utgående e-post
- IMAP/POP3-servere for henting av e-post
- Webgrensesnitt for administrasjon
- Database for konfigurasjonslagring
- Redis for caching og ytelse
- SQLite for sikker, kryptert postbokslagring
[!MERK] Sørg for å sjekke ut våre selvhostet blogg
Og for de som er interessert i en mer detaljert trinnvis versjon, se vår Ubuntu eller Debian baserte guider.
Krav
Før du kjører installasjonsskriptet, sørg for at du har følgende:
- Operativsystem: En Linux-basert server (støtter for tiden Ubuntu 22.04+).
- ressurser: 1 vCPUer og 2 GB RAM
- Rottilgang: Administrative rettigheter for å utføre kommandoer.
- Domenenavn: Et tilpasset domene klart for DNS-konfigurasjon.
- Ren IP: Sørg for at serveren din har en ren IP-adresse uten tidligere spam-rykte ved å sjekke svartelister. Mer info her.
- Offentlig IP-adresse med port 25-støtte
- Evne til å stille omvendt PTR
- IPv4- og IPv6-støtte
[!TUPP] Se vår liste over fantastiske e-postserverleverandører
Cloud-init / Bruker-data
De fleste skyleverandører støtter en sky-init-konfigurasjon for når den virtuelle private serveren (VPS) er klargjort. Dette er en fin måte å sette noen filer og miljøvariabler på på forhånd for bruk av skriptets innledende oppsettlogikk som vil omgå behovet for å spørre mens skriptet kjører for ytterligere informasjon.
Alternativer
EMAIL
- e-post brukt for påminnelser om utløp av certbotDOMAIN
- tilpasset domene (f.eks.example.com
) brukes til oppsett for selv hostingAUTH_BASIC_USERNAME
- brukernavn brukt i førstegangsoppsett for å beskytte nettstedetAUTH_BASIC_PASSWORD
- Passward brukt i førstegangsoppsett for å beskytte nettstedet/root/.cloudflare.ini
- (Bare Cloudflare-brukere) cloudflare-konfigurasjonsfil brukt av certbot for DNS-konfigurasjon. Det krever at du angir API-tokenet ditt viadns_cloudflare_api_token
. Les mer 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
Installer
Kjør følgende kommando på serveren din for å laste ned og kjøre installasjonsskriptet:
bash <(curl -fsSL https://raw.githubusercontent.com/forwardemail/forwardemail.net/master/self-hosting/setup.sh)
Feilsøke installasjonsskript
Legge til DEBUG=true
foran installasjonsskriptet for detaljert utdata:
DEBUG=true bash <(curl -fsSL https://raw.githubusercontent.com/forwardemail/forwardemail.net/master/self-hosting/setup.sh)
Forespørsler
1. Initial setup
2. Setup Backups
3. Setup Auto Upgrades
4. Renew certificates
5. Restore from Backup
6. Help
7. Exit
- Innledende oppsett: Last ned den siste videresendingskoden, konfigurer miljøet, be om ditt tilpassede domene og konfigurer alle nødvendige sertifikater, nøkler og hemmeligheter.
- Setup Backup: Vil sette opp en cron for å sikkerhetskopiere mongoDB og redis ved hjelp av en S3-kompatibel butikk for sikker, ekstern lagring. Separat vil sqlite sikkerhetskopieres ved pålogging hvis det er endringer for sikre, krypterte sikkerhetskopier.
- Oppgradering av oppsett: Sett opp en cron for å se etter nattlige oppdateringer som trygt vil gjenoppbygge og starte infrastrukturkomponenter på nytt.
- Forny sertifikater: Certbot / lets encrypt brukes for SSL-sertifikater og nøkler vil utløpe hver 3. måned. Dette vil fornye sertifikatene for domenet ditt og plassere dem i den nødvendige mappen for at relaterte komponenter kan konsumeres. Se viktige filstier
- Gjenopprett fra sikkerhetskopi: Vil utløse mongodb og redis for å gjenopprette fra sikkerhetskopidata.
Første oppsett (alternativ 1)
Velg alternativ 1. Initial setup
å begynne.
Når du er ferdig, bør du se en suksessmelding. Du kan til og med løpe docker ps
å se de komponenter spunnet opp. Mer informasjon om komponentene nedenfor.
Tjenester
Tjenestenavn | Standard port | Beskrivelse |
---|---|---|
Web | 443 | Webgrensesnitt for alle admin-interaksjoner |
API | 4000 | Api-lag til abstrakte databaser |
Bree | Ingen | Bakgrunnsjobb og oppgaveløper |
SMTP | 465/587 | SMTP-server for utgående e-post |
SMTP Bree | Ingen | SMTP bakgrunnsjobb |
MX | 2525 | E-postutveksling for innkommende e-post og videresending av e-post |
IMAP | 993/2993 | IMAP-server for innkommende e-post og postboksadministrasjon |
POP3 | 995/2995 | POP3-server for innkommende e-post og postboksadministrasjon |
SQLite | 3456 | SQLite-server for interaksjoner med sqlite-database(r) |
SQLite Bree | Ingen | SQLite bakgrunnsjobb |
CalDAV | 5000 | CalDAV-server for kalenderadministrasjon |
CardDAV | 6000 | CardDAV-server for kalenderadministrasjon |
MongoDB | 27017 | MongoDB-database for det meste av databehandling |
Redis | 6379 | Redis for caching og tilstandsstyring |
SQLite | Ingen | SQLite-database(r) for krypterte postbokser |
Viktige filstier
Merk: Vertsbane nedenfor er i forhold til /root/forwardemail.net/self-hosting/
.
Komponent | Vertsbane | Containerbane |
---|---|---|
MongoDB | ./mongo-backups | /backups |
Redis | ./redis-data | /data |
Sqlite | ./sqlite-data | /mnt/{SQLITE_STORAGE_PATH} |
Env-fil | ./.env | /app/.env |
SSL-sertifikater/nøkler | ./ssl | /app/ssl/ |
Privat nøkkel | ./ssl/privkey.pem | /app/ssl/privkey.pem |
Full kjedesertifikat | ./ssl/fullchain.pem | /app/ssl/fullchain.pem |
CA-sertifikater | ./ssl/cert.pem | /app/ssl/cert.pem |
DKIM privat nøkkel | ./ssl/dkim.key | /app/ssl/dkim.key |
[!VIKTIG] Lagre
.env
fil sikkert. Det er kritisk for gjenoppretting i tilfelle feil. Du finner dette i/root/forwardemail.net/self-hosting/.env
.
Konfigurasjon
Innledende DNS-oppsett
Konfigurer de riktige DNS-postene i din valgte DNS-leverandør. Noter noe i parentes (<>
) er dynamisk og må oppdateres med verdien din.
Type | Navn | Innhold | TTL |
---|---|---|---|
A | "@", ".", eller blank | <ip_adresse> | auto |
CNAME | api | <domenenavn> | auto |
CNAME | caldav | <domenenavn> | auto |
CNAME | carddav | <domenenavn> | auto |
CNAME | fe-spretter | <domenenavn> | auto |
CNAME | imap | <domenenavn> | auto |
CNAME | mx | <domenenavn> | auto |
CNAME | pop3 | <domenenavn> | auto |
CNAME | smtp | <domenenavn> | auto |
MX | "@", ".", eller blank | mx.<domenenavn> (prioritet 0) | auto |
TXT | "@", ".", eller blank | "v=spf1 a -all" | auto |
Omvendt DNS / PTR-post
Reverse DNS (rDNS) eller reverse pointer records (PTR-poster) er avgjørende for e-postservere fordi de hjelper til med å bekrefte legitimiteten til serveren som sender e-posten. Hver skyleverandør gjør dette forskjellig, så du må slå opp hvordan du legger til "Reverse DNS" for å kartlegge verten og IP-en til dets tilsvarende vertsnavn. Mest sannsynlig i nettverksdelen til leverandøren.
Port 25 blokkert
Noen Internett-leverandører og skyleverandører blokkerer 25 for å unngå dårlige aktører. Det kan hende du må sende inn en støttebillett for å åpne port 25 for SMTP / utgående e-post.
Onboarding
-
Åpne landingssiden Naviger til https://<domenenavn>, og bytt ut <domenenavn> med domenet som er konfigurert i DNS-innstillingene. Du bør se landingssiden for videresend e-post.
-
Logg inn og ta med domenet ditt
- Logg på med gyldig e-post og passord.
- Skriv inn domenenavnet du ønsker å sette opp (dette må samsvare med DNS-konfigurasjonen).
- Følg instruksjonene for å legge til det nødvendige MX og TXT poster for verifisering.
- Fullstendig oppsett
- Når du er verifisert, gå til Alias-siden for å opprette ditt første alias.
- Konfigurer eventuelt SMTP for utgående e-post i Domeneinnstillinger. Dette krever ytterligere DNS-poster.
[!NOTE] Ingen informasjon sendes utenfor serveren din. Alternativet selvvert og den første kontoen er kun for administratorinnlogging og webvisning for å administrere domener, aliaser og relaterte e-postkonfigurasjoner.
Testing
Oppretter ditt første alias
- Naviger til siden for aliaser Åpne aliasadministrasjonssiden:
https://<domain_name>/en/my-account/domains/<domain_name>/aliases
- Legg til et nytt alias
- Klikk Legg til Alias (øverst til høyre).
- Skriv inn aliasnavnet og juster e-postinnstillingene etter behov.
- (Valgfritt) Aktiver IMAP/POP3/CalDAV/CardDAV støtte ved å merke av i avmerkingsboksen.
- Klikk Opprett alias.
- Angi et passord
- Klikk Generer passord for å lage et sikkert passord.
- Dette passordet kreves for å logge på e-postklienten din.
- Konfigurer e-postklienten din
- Bruk en e-postklient som Thunderbird.
- Skriv inn aliasnavnet og det genererte passordet.
- Konfigurer IMAP og SMTP innstillinger tilsvarende.
Innstillinger for e-postserver
Brukernavn: <alias name>
Type | Vertsnavn | Havn | Tilkoblingssikkerhet | Godkjenning |
---|---|---|---|---|
SMTP | smtp.<domenenavn> | 465 | SSL / TLS | Normalt passord |
IMAP | imap.<domenenavn> | 993 | SSL / TLS | Normalt passord |
Sender/mottar din første e-post
Når du er konfigurert, bør du kunne sende og motta e-post til din nyopprettede og selvverterte e-postadresse!
Feilsøking
Hvorfor fungerer ikke dette utenfor Ubuntu og Debian?
Vi ser for tiden etter støtte for MacOS, og vil se etter andre. Vennligst åpne en diskusjon eller bidra hvis du ønsker å se andre støttet.
Hvorfor mislykkes certbot acme-utfordringen
Den vanligste fallgruven er at certbot / letsencrypt noen ganger vil be om 2 utfordringer. Du må være sikker på å legge til BOTH txt-poster.
Eksempel: Du kan se to utfordringer som dette: _acme-challenge.example.com -> "randomstring1" _acme-challenge.example.com -> "randomstring2"
Det er også mulig at DNS-utbredelsen ikke er fullført. Du kan bruke verktøy som: https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.<your_domain>
. Dette vil gi deg en idé om endringene i TXT-posten bør gjenspeiles. Det er også mulig at lokal DNS-cache på verten din fortsatt bruker en gammel, gammel verdi eller ikke har fanget opp de siste endringene.
Et annet alternativ er å bruke de automatiserte cerbot DNS-endringene ved å angi /root/.cloudflare.ini
fil med api-tokenet i cloud-init/brukerdataene dine ved første VPS-oppsett eller opprett denne filen og kjør skriptet på nytt. Dette vil administrere DNS-endringene og utfordringsoppdateringene automatisk.
Hva er det grunnleggende autentiske brukernavnet og passordet
For selvhosting legger vi til en førstegangs-nettlesernative autentiseringspoppopp med et enkelt brukernavn (admin
) og passord (generert tilfeldig ved første oppsett). Vi legger bare til dette som en beskyttelse i tilfelle automatisering/skrapere på en eller annen måte slår deg for å først registrere deg på nettopplevelsen. Du kan finne dette passordet etter første oppsett i din .env
fil under AUTH_BASIC_USERNAME
og AUTH_BASIC_PASSWORD
.
Hvordan vet jeg hva som kjører
Du kan løpe docker ps
for å se alle løpende containere som blir snurret opp fra docker-compose-self-hosting.yml
fil. Du kan også løpe docker ps -a
for å se alt (inkludert beholdere som ikke kjører).
Hvordan vet jeg at det er noe som ikke kjører
Du kan løpe docker ps -a
for å se alt (inkludert beholdere som ikke kjører). Du kan se en utgangslogg eller notat.
Hvordan finner jeg logger
Du kan få flere logger via docker logs -f <container_name>
. Hvis noe forlot, er det sannsynligvis relatert til .env
filen er konfigurert feil.
Innenfor nettgrensesnittet kan du se /admin/emails
og /admin/logs
for henholdsvis utgående e-postlogger og feillogger.
Hvorfor tar de utgående e-postene mine timeout
Hvis du ser en melding som Tidsavbrudd for tilkobling når du kobler til MX-serveren... så må du kanskje sjekke om port 25 er blokkert. Det er vanlig at Internett-leverandører eller skyleverandører blokkerer dette som standard, der du kanskje må kontakte support/file en billett for å få dette åpnet.
Hvilke verktøy bør jeg bruke for å teste beste praksis for e-postkonfigurasjon og IP-omdømme
Ta en titt på vår FAQ her.