Samodzielnie hostowany
Rozpoczęcie pracy
Nasze samodzielnie hostowane rozwiązanie poczty e-mail, podobnie jak wszystkie nasze produkty, jest w 100% open source – zarówno front-end, jak i back-end. Oznacza to:
- Pełna przejrzystość: Każda linijka kodu przetwarzająca Twoje wiadomości e-mail jest dostępna do publicznej kontroli.
- Wkład społeczności: Każdy może wprowadzać ulepszenia lub naprawiać problemy.
- Bezpieczeństwo dzięki otwartości: Luki w zabezpieczeniach mogą zostać zidentyfikowane i naprawione przez globalną społeczność.
- Brak uzależnienia od jednego dostawcy: Nigdy nie jesteś zależny od istnienia naszej firmy.
Cały kod źródłowy jest dostępny na platformie GitHub pod adresem https://github.com/forwardemail/forwardemail.net, i podlega licencji MIT.
Architektura obejmuje kontenery dla:
- Serwer SMTP do poczty wychodzącej
- Serwery IMAP/POP3 do pobierania poczty
- Interfejs webowy do administracji
- Baza danych do przechowywania konfiguracji
- Redis do buforowania i poprawy wydajności
- SQLite do bezpiecznego, szyfrowanego przechowywania skrzynek pocztowych
Note
Koniecznie sprawdź nasz blog z własnym hostingiem
A osoby zainteresowane bardziej szczegółową wersją krok po kroku zapoznaj się z naszymi przewodnikami opartymi na Ubuntu lub Debian.
Wymagania
Przed uruchomieniem skryptu instalacyjnego upewnij się, że masz następujące elementy:
- System operacyjny: Serwer oparty na systemie Linux (obecnie obsługuje Ubuntu 22.04+).
- Zasoby: 1 procesor wirtualny i 2 GB pamięci RAM
- Dostęp root: Uprawnienia administracyjne do wykonywania poleceń.
- Nazwa domeny: Niestandardowa domena gotowa do konfiguracji DNS.
- Czysty adres IP: Upewnij się, że Twój serwer ma czysty adres IP bez wcześniejszej reputacji spamu, sprawdzając czarne listy. Więcej informacji: Tutaj.
- Publiczny adres IP z obsługą portu 25
- Możliwość ustawienia odwrotny PTR
- Obsługa IPv4 i IPv6
Tip
Zobacz naszą listę niesamowici dostawcy serwerów pocztowych
Inicjalizacja chmury / dane użytkownika
Większość dostawców usług w chmurze obsługuje konfigurację cloud-init podczas konfiguracji wirtualnego serwera prywatnego (VPS). To doskonały sposób na wcześniejsze skonfigurowanie niektórych plików i zmiennych środowiskowych do użycia przez logikę konfiguracji początkowej skryptów, co pozwala uniknąć konieczności wyświetlania monitu o dodatkowe informacje podczas działania skryptu.
Opcje
EMAIL
— adres e-mail używany do przypomnień o wygaśnięciu certyfikatu CertbotDOMAIN
— domena niestandardowa (np.example.com
) używana do konfiguracji hostingu własnegoAUTH_BASIC_USERNAME
— nazwa użytkownika używana podczas pierwszej konfiguracji w celu ochrony witrynyAUTH_BASIC_PASSWORD
— hasło używane podczas pierwszej konfiguracji w celu ochrony witryny/root/.cloudflare.ini
— (Tylko dla użytkowników Cloudflare) plik konfiguracyjny Cloudflare używany przez Certbot do konfiguracji DNS. Wymaga ustawienia tokenu API za pomocądns_cloudflare_api_token
. Dowiedz się więcej o Tutaj.
Przykład:
#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
Zainstaluj
Uruchom następujące polecenie na swoim serwerze, aby pobrać i uruchomić skrypt instalacyjny:
bash <(curl -fsSL https://raw.githubusercontent.com/forwardemail/forwardemail.net/master/self-hosting/setup.sh)
Skrypt instalacji debugowania
Aby uzyskać szczegółowe dane wyjściowe, dodaj DEBUG=true
przed skryptem instalacyjnym:
DEBUG=true bash <(curl -fsSL https://raw.githubusercontent.com/forwardemail/forwardemail.net/master/self-hosting/setup.sh)
Monity
1. Initial setup
2. Setup Backups
3. Setup Auto Upgrades
4. Renew certificates
5. Restore from Backup
6. Help
7. Exit
- Konfiguracja początkowa: Pobierz najnowszy kod do przekazywania wiadomości e-mail, skonfiguruj środowisko, wyświetl monit o podanie domeny niestandardowej i skonfiguruj wszystkie niezbędne certyfikaty, klucze i sekrety.
- Konfiguracja kopii zapasowej: Skonfiguruje cron do tworzenia kopii zapasowych mongoDB i Redis przy użyciu magazynu zgodnego z S3, zapewniającego bezpieczne, zdalne przechowywanie danych. Osobno, po zalogowaniu, zostanie utworzona kopia zapasowa SQLite, jeśli zostaną wprowadzone zmiany, aby zapewnić bezpieczne, szyfrowane kopie zapasowe.
- Konfiguracja aktualizacji: Skonfiguruje cron do wyszukiwania nocnych aktualizacji, które bezpiecznie odbudują i ponownie uruchomią komponenty infrastruktury.
- Odnawianie certyfikatów: Certbot / lets encrypt jest używany do certyfikatów SSL, a klucze wygasają co 3 miesiące. Spowoduje to odnowienie certyfikatów dla Twojej domeny i umieszczenie ich w odpowiednim folderze, aby mogły być wykorzystane przez powiązane komponenty. Zobacz ważne ścieżki plików
- Przywracanie z kopii zapasowej: Uruchomi mongoDB i Redis w celu przywrócenia danych z kopii zapasowej.
Konfiguracja początkowa (opcja 1)
Aby rozpocząć, wybierz opcję 1. Initial setup
.
Po zakończeniu powinien pojawić się komunikat o powodzeniu. Możesz nawet uruchomić docker ps
, aby zobaczyć uruchomione komponenty. Więcej informacji o komponentach poniżej.
Usługi
Nazwa usługi | Domyślny port | Opis |
---|---|---|
Sieć | 443 |
Interfejs internetowy do wszystkich interakcji administracyjnych |
API | 4000 |
Warstwa API do abstrakcyjnych baz danych |
Bree | Nic | Praca w tle i wykonawca zadań |
SMTP | 465/587 |
Serwer SMTP dla poczty wychodzącej |
SMTP Bree | Nic | Zadanie SMTP w tle |
MX | 2525 |
Wymiana poczty dla poczty przychodzącej i przekazywanie poczty e-mail |
IMAP | 993/2993 |
Serwer IMAP do zarządzania pocztą przychodzącą i skrzynkami pocztowymi |
POP3 | 995/2995 |
Serwer POP3 do zarządzania pocztą przychodzącą i skrzynką pocztową |
SQLite | 3456 |
Serwer SQLite do interakcji z bazami danych SQLite |
SQLite Bree | Nic | Praca w tle SQLite |
CalDAV | 5000 |
Serwer CalDAV do zarządzania kalendarzem |
CardDAV | 6000 |
Serwer CardDAV do zarządzania kalendarzem |
MongoDB | 27017 |
Baza danych MongoDB do większości zastosowań w zarządzaniu danymi |
Redis | 6379 |
Redis do buforowania i zarządzania stanem |
SQLite | Nic | Bazy danych SQLite dla szyfrowanych skrzynek pocztowych |
Ważne ścieżki plików
Uwaga: Ścieżka hosta poniżej jest względna w stosunku do /root/forwardemail.net/self-hosting/
.
Część | Ścieżka hosta | Ścieżka kontenera |
---|---|---|
MongoDB | ./mongo-backups |
/backups |
Redis | ./redis-data |
/data |
SQLite | ./sqlite-data |
/mnt/{SQLITE_STORAGE_PATH} |
Plik Env | ./.env |
/app/.env |
Certyfikaty/klucze SSL | ./ssl |
/app/ssl/ |
Klucz prywatny | ./ssl/privkey.pem |
/app/ssl/privkey.pem |
Pełny certyfikat łańcucha | ./ssl/fullchain.pem |
/app/ssl/fullchain.pem |
Certyfikowani CA | ./ssl/cert.pem |
/app/ssl/cert.pem |
Klucz prywatny DKIM | ./ssl/dkim.key |
/app/ssl/dkim.key |
Important
Zapisz bezpiecznie plik .env
. Jest on niezbędny do odzyskania danych w przypadku awarii.
Znajdziesz go w pliku /root/forwardemail.net/self-hosting/.env
.
Konfiguracja
Początkowa konfiguracja DNS
Skonfiguruj odpowiednie rekordy DNS u wybranego dostawcy DNS. Pamiętaj, że wszystkie wartości w nawiasach (<>
) są dynamiczne i należy je zaktualizować o Twoją wartość.
Typ | Nazwa | Treść | TTL |
---|---|---|---|
A | „@”, „.” lub puste miejsce | <adres_ip> | automatyczny |
CNAME | API | <nazwa_domeny> | automatyczny |
CNAME | Caldav | <nazwa_domeny> | automatyczny |
CNAME | carddav | <nazwa_domeny> | automatyczny |
CNAME | fe-odbicia | <nazwa_domeny> | automatyczny |
CNAME | imap | <nazwa_domeny> | automatyczny |
CNAME | mx | <nazwa_domeny> | automatyczny |
CNAME | pop3 | <nazwa_domeny> | automatyczny |
CNAME | SMTP | <nazwa_domeny> | automatyczny |
MX | „@”, „.” lub puste miejsce | mx.<nazwa_domeny> (priorytet 0) | automatyczny |
TXT | „@”, „.” lub puste miejsce | "v=spf1 a -all" | automatyczny |
Odwrotny rekord DNS/PTR
Odwrotny DNS (rDNS) lub rekordy wskaźników odwrotnych (PTR) są niezbędne dla serwerów poczty e-mail, ponieważ pomagają zweryfikować wiarygodność serwera wysyłającego wiadomość e-mail. Każdy dostawca usług w chmurze robi to inaczej, dlatego należy sprawdzić, jak dodać „Odwrotny DNS”, aby zmapować hosta i adres IP na odpowiadającą mu nazwę hosta. Najprawdopodobniej w sekcji sieciowej dostawcy.
Port 25 zablokowany
Niektórzy dostawcy usług internetowych i chmury blokują port 25, aby uniknąć oszustów. Może być konieczne zgłoszenie do pomocy technicznej w celu otwarcia portu 25 dla SMTP / poczty wychodzącej.
Wdrażanie
-
Otwórz stronę docelową Przejdź do https://<nazwa_domeny>, zastępując <nazwa_domeny> domeną skonfigurowaną w ustawieniach DNS. Powinna wyświetlić się strona docelowa „Przekieruj e-mail”.
-
Zaloguj się i zarejestruj swoją domenę
- Zaloguj się, używając prawidłowego adresu e-mail i hasła.
- Wprowadź nazwę domeny, którą chcesz skonfigurować (musi być zgodna z konfiguracją DNS).
- Postępuj zgodnie z instrukcjami, aby dodać wymagane rekordy MX i TXT w celu weryfikacji.
- Zakończ konfigurację
- Po weryfikacji przejdź do strony Aliasy, aby utworzyć swój pierwszy alias.
- Opcjonalnie skonfiguruj SMTP dla poczty wychodzącej w Ustawieniach domeny. Wymaga to dodatkowych rekordów DNS.
Note
Żadne informacje nie są wysyłane poza Twój serwer. Opcja samodzielnego hostingu i konto początkowe służą jedynie do logowania administratora i widoku internetowego do zarządzania domenami, aliasami i powiązanymi konfiguracjami poczty e-mail.
Testowanie
Tworzenie pierwszego aliasu
- Przejdź do strony Aliasy Otwórz stronę zarządzania aliasami:
https://<domain_name>/en/my-account/domains/<domain_name>/aliases
- Dodaj nowy alias
- Kliknij Dodaj alias (w prawym górnym rogu).
- Wprowadź nazwę aliasu i dostosuj ustawienia poczty e-mail w razie potrzeby.
- (Opcjonalnie) Włącz obsługę IMAP/POP3/CalDAV/CardDAV, zaznaczając pole wyboru.
- Kliknij Utwórz alias.
- Ustaw hasło
- Kliknij Wygeneruj hasło, aby utworzyć bezpieczne hasło.
- To hasło będzie wymagane do zalogowania się do klienta poczty e-mail.
- Skonfiguruj swojego klienta poczty e-mail
- Użyj klienta poczty e-mail, takiego jak Thunderbird.
- Wprowadź nazwę aliasu i wygenerowane hasło.
- Skonfiguruj odpowiednio ustawienia IMAP i SMTP.
Ustawienia serwera e-mail
Nazwa użytkownika: <alias name>
Typ | Nazwa hosta | Port | Bezpieczeństwo połączenia | Uwierzytelnianie |
---|---|---|---|---|
SMTP | smtp.<nazwa_domeny> | 465 | SSL / TLS | Normalne hasło |
IMAP | imap.<nazwa_domeny> | 993 | SSL / TLS | Normalne hasło |
Wysyłanie/odbieranie pierwszej wiadomości e-mail
Po skonfigurowaniu będziesz mieć możliwość wysyłania i odbierania wiadomości e-mail na nowo utworzony i samodzielnie hostowany adres e-mail!
Rozwiązywanie problemów
Dlaczego to nie działa poza Ubuntu i Debianem
Aktualnie szukamy wsparcia dla systemu macOS i będziemy szukać innych. Otwórz dyskusja lub przekaż nam swój wkład, jeśli chcesz, aby inni również byli obsługiwani.
Dlaczego wyzwanie certbot acme kończy się niepowodzeniem
Najczęstszą pułapką jest to, że certbot/letsencrypt czasami żąda 2 wyzwań. Należy upewnić się, że dodano OBA rekordy txt.
Przykład: Możesz zobaczyć dwa takie wyzwania: _acme-challenge.example.com -> "losowy ciąg1" _acme-challenge.example.com -> "losowy ciąg2"
Możliwe jest również, że propagacja DNS nie została ukończona. Możesz użyć narzędzi takich jak: https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.<your_domain>
. To pozwoli Ci zorientować się, czy zmiany w rekordzie TXT powinny zostać uwzględnione. Możliwe jest również, że lokalna pamięć podręczna DNS na Twoim hoście nadal używa starej, nieaktualnej wartości lub nie wykryła ostatnich zmian.
Inną opcją jest użycie zautomatyzowanych zmian DNS w Cerbocie poprzez ustawienie pliku /root/.cloudflare.ini
z tokenem API w pliku cloud-init/user-data podczas początkowej konfiguracji VPS lub utworzenie tego pliku i ponowne uruchomienie skryptu. Spowoduje to automatyczne zarządzanie zmianami DNS i aktualizacjami wyzwań.
Jaka jest podstawowa nazwa użytkownika i hasło autoryzacji
W przypadku hostingu własnego dodajemy wyskakujące okienko uwierzytelniania w przeglądarce, zawierające prostą nazwę użytkownika (admin
) i hasło (generowane losowo podczas początkowej konfiguracji). Dodajemy je tylko jako zabezpieczenie na wypadek, gdyby automatyzacja/scrapery w jakiś sposób wyprzedziły Cię w rejestracji w środowisku internetowym. Hasło to znajdziesz po początkowej konfiguracji w pliku .env
w AUTH_BASIC_USERNAME
i AUTH_BASIC_PASSWORD
.
Skąd mam wiedzieć, co jest uruchomione w
Możesz uruchomić docker ps
, aby zobaczyć wszystkie uruchomione kontenery, które są uruchamiane z pliku docker-compose-self-hosting.yml
. Możesz również uruchomić docker ps -a
, aby zobaczyć wszystko (w tym kontenery, które nie są uruchomione).
Skąd mam wiedzieć, czy coś nie działa, mimo że powinno być
Możesz uruchomić docker ps -a
, aby zobaczyć wszystko (w tym kontenery, które nie są uruchomione). Możesz zobaczyć dziennik wyjścia lub notatkę.
Jak znaleźć dzienniki
Więcej logów można uzyskać za pomocą docker logs -f <container_name>
. Jeśli coś się wydarzyło, prawdopodobnie jest to związane z nieprawidłową konfiguracją pliku .env
.
W interfejsie internetowym można przeglądać dzienniki wiadomości e-mail wychodzących i dzienniki błędów /admin/emails
i /admin/logs
.
Dlaczego moje wiadomości e-mail wychodzące przekraczają limit czasu
Jeśli podczas łączenia się z serwerem MX pojawi się komunikat „Przekroczono limit czasu połączenia”, może być konieczne sprawdzenie, czy port 25 nie jest zablokowany. Dostawcy usług internetowych i usług chmurowych często blokują tę opcję domyślnie, dlatego może być konieczne skontaktowanie się z pomocą techniczną lub zgłoszenie problemu.
Jakich narzędzi powinienem używać do testowania najlepszych praktyk konfiguracji poczty e-mail i reputacji adresów IP
Przyjrzyj się naszemu FAQ tutaj.