Dihosting Sendiri
Memulai
Solusi email yang kami hosting sendiri, seperti semua produk kami, 100% open-source—baik frontend maupun backend. Ini berarti:
- Transparansi Lengkap:Setiap baris kode yang memproses email Anda tersedia untuk pengawasan publik
- Kontribusi Komunitas:Siapa pun dapat memberikan kontribusi untuk perbaikan atau memperbaiki masalah
- Keamanan Melalui Keterbukaan:Kerentanan dapat diidentifikasi dan diperbaiki oleh komunitas global
- Tidak Ada Vendor Lock-in:Anda tidak pernah bergantung pada keberadaan perusahaan kami
Seluruh basis kode tersedia di GitHub di https://github.com/forwardemail/forwardemail.net, dilisensikan di bawah Lisensi MIT.
Arsitekturnya mencakup kontainer untuk:
- Server SMTP untuk email keluar
- Server IMAP/POP3 untuk pengambilan email
- Antarmuka web untuk administrasi
- Basis data untuk penyimpanan konfigurasi
- Redis untuk caching dan kinerja
- SQLite untuk penyimpanan kotak surat yang aman dan terenkripsi
Persyaratan
Sebelum menjalankan skrip instalasi, pastikan Anda memiliki yang berikut ini:
- Sistem Operasi: Server berbasis Linux (saat ini mendukung Ubuntu 22.04+).
- Sumber daya: 1 vCPU dan RAM 2GB
- Akses Root: Hak istimewa administratif untuk menjalankan perintah.
- Nama domain: Domain kustom yang siap untuk konfigurasi DNS.
- IP bersih: Pastikan server Anda memiliki alamat IP yang bersih tanpa reputasi spam sebelumnya dengan memeriksa daftar hitam. Info selengkapnya Di Sini.
- Alamat IP publik dengan dukungan port 25
- Kemampuan untuk mengatur PTR terbalik
- Dukungan IPv4 dan IPv6
[!TIP] Lihat daftar kami penyedia server email yang mengagumkan
Cloud-init / Data pengguna
Sebagian besar vendor cloud mendukung konfigurasi cloud-init saat server privat virtual (VPS) diprovisi. Ini adalah cara yang bagus untuk mengatur beberapa file dan variabel lingkungan terlebih dahulu untuk digunakan oleh logika pengaturan awal skrip yang akan mengabaikan kebutuhan untuk meminta informasi tambahan saat skrip sedang berjalan.
Pilihan
EMAIL
- email yang digunakan untuk pengingat kedaluwarsa certbotDOMAIN
- domain khusus (misalnyaexample.com
) digunakan untuk pengaturan hosting mandiriAUTH_BASIC_USERNAME
- nama pengguna digunakan pada pengaturan pertama kali untuk melindungi situsAUTH_BASIC_PASSWORD
- kata sandi digunakan pada pengaturan pertama kali untuk melindungi situs/root/.cloudflare.ini
- (Hanya untuk pengguna Cloudflare) file konfigurasi cloudflare yang digunakan oleh certbot untuk konfigurasi DNS. Anda perlu menyetel token API melaluidns_cloudflare_api_token
. Baca selengkapnya Di Sini.
Contoh:
#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
Memasang
Jalankan perintah berikut di server Anda untuk mengunduh dan menjalankan skrip instalasi:
bash <(curl -fsSL https://raw.githubusercontent.com/forwardemail/forwardemail.net/master/self-hosting/setup.sh)
Skrip instalasi debug
Menambahkan DEBUG=true
di depan skrip instalasi untuk keluaran verbose:
DEBUG=true bash <(curl -fsSL https://raw.githubusercontent.com/forwardemail/forwardemail.net/master/self-hosting/setup.sh)
Petunjuk
1. Initial setup
2. Setup Backups
3. Setup Auto Upgrades
4. Renew certificates
5. Restore from Backup
6. Help
7. Exit
- Pengaturan awal: Unduh kode email penerusan terbaru, konfigurasikan lingkungan, minta domain kustom Anda, dan siapkan semua sertifikat, kunci, dan rahasia yang diperlukan.
- Pengaturan Cadangan: Akan menyiapkan cron untuk mencadangkan mongoDB dan redis menggunakan penyimpanan yang kompatibel dengan S3 untuk penyimpanan jarak jauh yang aman. Secara terpisah, sqlite akan dicadangkan saat login jika ada perubahan untuk pencadangan yang aman dan terenkripsi.
- Peningkatan Pengaturan: Siapkan cron untuk mencari pembaruan malam hari yang akan membangun kembali dan memulai ulang komponen infrastruktur dengan aman.
- Perbarui sertifikat: Certbot / lets encrypt digunakan untuk sertifikat SSL dan kunci akan kedaluwarsa setiap 3 bulan. Ini akan memperbarui sertifikat untuk domain Anda dan menempatkannya di folder yang diperlukan agar komponen terkait dapat digunakan. Lihat jalur file penting
- Pulihkan dari cadangan: Akan memicu mongodb dan redis untuk memulihkan dari data cadangan.
Pengaturan Awal (Opsi 1)
Pilih opsi 1. Initial setup
untuk memulai.
Setelah selesai, Anda akan melihat pesan sukses. Anda bahkan dapat menjalankan docker ps
untuk melihat itu komponen telah dipintal. Informasi selengkapnya tentang komponen ada di bawah.
Layanan
Nama Layanan | Pelabuhan Default | Deskripsi |
---|---|---|
Jaringan | 443 | Antarmuka web untuk semua interaksi admin |
API | 4000 | Lapisan API ke database abstrak |
Bree | Tidak ada | Pekerjaan latar belakang dan pelari tugas |
SMTP | 465/587 | Server SMTP untuk email keluar |
SMTP Bree | Tidak ada | Pekerjaan latar belakang SMTP |
MX | 2525 | Pertukaran email untuk email masuk dan penerusan email |
IMAP | 993/2993 | Server IMAP untuk manajemen email masuk dan kotak surat |
POP3 | 995/2995 | Server POP3 untuk manajemen email masuk dan kotak surat |
Bahasa SQLite | 3456 | Server SQLite untuk interaksi dengan database SQLite |
SQLite Bree | Tidak ada | Pekerjaan latar belakang SQLite |
CalDAV | 5000 | Server CalDAV untuk manajemen kalender |
Bahasa pemrograman MongoDB | 27017 | Database MongoDB untuk sebagian besar manajemen data |
ulang | 6379 | Redis untuk caching dan manajemen status |
Bahasa SQLite | Tidak ada | Basis data SQLite untuk kotak surat terenkripsi |
Jalur file penting
Catatan: Jalur host di bawah ini relatif terhadap /root/forwardemail.net/self-hosting/
.
Komponen | Jalur host | Jalur kontainer |
---|---|---|
Bahasa pemrograman MongoDB | ./mongo-backups | /backups |
ulang | ./redis-data | /data |
Bahasa Inggris SQLite | ./sqlite-data | /mnt/{SQLITE_STORAGE_PATH} |
berkas env | ./.env | /app/.env |
Sertifikat/kunci SSL | ./ssl | /app/ssl/ |
Kunci pribadi | ./ssl/privkey.pem | /app/ssl/privkey.pem |
Sertifikat rantai penuh | ./ssl/fullchain.pem | /app/ssl/fullchain.pem |
CA Bersertifikat | ./ssl/cert.pem | /app/ssl/cert.pem |
Kunci pribadi DKIM | ./ssl/dkim.key | /app/ssl/dkim.key |
[!PENTING] Simpan
.env
file dengan aman. Ini penting untuk pemulihan jika terjadi kegagalan. Anda dapat menemukan ini di/root/forwardemail.net/self-hosting/.env
.
Konfigurasi
Pengaturan DNS awal
Pada penyedia DNS pilihan Anda, konfigurasikan rekaman DNS yang sesuai. Jangan catat apa pun dalam tanda kurung (<>
) bersifat dinamis dan perlu diperbarui dengan nilai Anda.
Tipe | Nama | Isi | TTL |
---|---|---|---|
A | "@", ".", atau kosong | <alamat_ip> | mobil |
CNAME | api | <nama_domain> | mobil |
CNAME | caldav | <nama_domain> | mobil |
CNAME | fe-memantul | <nama_domain> | mobil |
CNAME | peta imap | <nama_domain> | mobil |
CNAME | bahasa inggris | <nama_domain> | mobil |
CNAME | lagu pop3 | <nama_domain> | mobil |
CNAME | smtp | <nama_domain> | mobil |
MX | "@", ".", atau kosong | mx.<nama_domain> (prioritas 0) | mobil |
TXT | "@", ".", atau kosong | "v=spf1 a -semua" | mobil |
Rekaman DNS / PTR terbalik
DNS Terbalik (rDNS) atau catatan penunjuk terbalik (catatan PTR) sangat penting bagi server email karena membantu memverifikasi keabsahan server yang mengirim email. Setiap penyedia cloud melakukan hal ini secara berbeda, jadi Anda perlu mencari cara menambahkan "DNS Terbalik" untuk memetakan host dan IP ke nama host yang sesuai. Kemungkinan besar di bagian jaringan penyedia.
Port 25 Diblokir
Beberapa ISP dan penyedia cloud memblokir 25 untuk menghindari pelaku kejahatan. Anda mungkin perlu mengajukan tiket dukungan untuk membuka port 25 untuk SMTP/email keluar.
Orientasi
-
Buka Halaman Arahan Buka https://<nama_domain>, ganti <nama_domain> dengan domain yang dikonfigurasikan dalam pengaturan DNS Anda. Anda akan melihat halaman arahan Teruskan Email.
-
Masuk dan Daftarkan Domain Anda
- Masuk dengan email dan kata sandi yang valid.
- Masukkan nama domain yang ingin Anda atur (ini harus sesuai dengan konfigurasi DNS).
- Ikuti petunjuk untuk menambahkan yang diperlukan MX dan TXT catatan untuk verifikasi.
- Pengaturan Lengkap
- Setelah diverifikasi, akses halaman Alias untuk membuat alias pertama Anda.
- Secara opsional, konfigurasikan SMTP untuk email keluar dalam Pengaturan DomainIni memerlukan rekaman DNS tambahan.
[!CATATAN] Tidak ada informasi yang dikirim ke luar server Anda. Opsi yang dihosting sendiri dan akun awal hanya untuk login admin dan tampilan web guna mengelola domain, alias, dan konfigurasi email terkait.
Pengujian
Membuat alias pertama Anda
- Navigasi ke Halaman Alias Buka halaman manajemen alias:
https://<domain_name>/en/my-account/domains/<domain_name>/aliases
- Tambahkan Alias Baru
- Klik Tambahkan Alias (kanan atas).
- Masukkan nama alias dan sesuaikan pengaturan email seperlunya.
- (Opsional) Aktifkan IMAP/POP3/CalDAV dukungan dengan memilih kotak centang.
- Klik Buat Alias.
- Tetapkan Kata Sandi
- Klik Hasilkan Kata Sandi untuk membuat kata sandi yang aman.
- Kata sandi ini akan diperlukan untuk masuk ke klien email Anda.
- Konfigurasikan Klien Email Anda
- Gunakan klien email seperti Thunderbird.
- Masukkan nama alias dan kata sandi yang dibuat.
- Konfigurasikan IMAP dan SMTP pengaturan yang sesuai.
Pengaturan server email
Nama belakang: <alias name>
Tipe | Nama host | Pelabuhan | Keamanan Koneksi | Autentikasi |
---|---|---|---|---|
SMTP | smtp.<nama_domain> | 465 | SSL / TLS | Kata Sandi Normal |
IMAP | imap.<nama_domain> | 993 | SSL / TLS | Kata Sandi Normal |
Mengirim / Menerima email pertama Anda
Setelah dikonfigurasi, Anda seharusnya dapat mengirim dan menerima email ke alamat email yang baru Anda buat dan hosting sendiri!
Penyelesaian Masalah
Mengapa ini tidak berfungsi di luar Ubuntu
Saat ini kami sedang mencari dukungan untuk Debian, MacOS dan akan mencari yang lain. Silakan buka diskusi atau berkontribusi jika Anda ingin melihat orang lain didukung.
Mengapa tantangan certbot acme gagal?
Perangkap yang paling umum adalah certbot / letsencrypt terkadang meminta 2 tantangan. Anda perlu memastikan untuk menambahkan BOTH catatan txt.
Contoh: Anda mungkin melihat dua tantangan seperti ini: _acme-challenge.example.com -> "randomstring1" _acme-challenge.example.com -> "randomstring2"
Ada kemungkinan juga propagasi DNS belum selesai. Anda dapat menggunakan alat seperti: https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.<your_domain>
. Ini akan memberi Anda gambaran apakah perubahan rekaman TXT Anda harus tercermin. Ada kemungkinan juga bahwa cache DNS lokal di host Anda masih menggunakan nilai lama yang basi atau belum mengambil perubahan terkini.
Pilihan lain adalah menggunakan perubahan DNS cerbot otomatis dengan mengatur /root/.cloudflare.ini
file dengan token api di cloud-init / user-data Anda pada pengaturan VPS awal atau buat file ini dan jalankan skrip lagi. Ini akan mengelola perubahan DNS dan pembaruan tantangan secara otomatis.
Apa nama pengguna dan kata sandi autentikasi dasar?
Untuk hosting sendiri, kami menambahkan pop up otentikasi asli browser pertama kali dengan nama pengguna sederhana (admin
) dan kata sandi (dibuat secara acak pada pengaturan awal). Kami hanya menambahkan ini sebagai perlindungan jika otomatisasi/pengikis entah bagaimana mengalahkan Anda untuk mendaftar pertama kali di pengalaman web. Anda dapat menemukan kata sandi ini setelah pengaturan awal di .env
arsip di bawah AUTH_BASIC_USERNAME
dan AUTH_BASIC_PASSWORD
.
Bagaimana saya tahu apa yang sedang berjalan?
Anda bisa lari docker ps
untuk melihat semua kontainer yang sedang berjalan yang sedang diputar dari docker-compose-self-hosting.yml
file. Anda juga dapat menjalankan docker ps -a
untuk melihat semuanya (termasuk kontainer yang tidak berjalan).
Bagaimana saya tahu jika sesuatu tidak berjalan sebagaimana mestinya?
Anda bisa lari docker ps -a
untuk melihat semuanya (termasuk kontainer yang tidak berjalan). Anda mungkin melihat log keluar atau catatan.
Bagaimana cara menemukan log?
Anda bisa mendapatkan lebih banyak log melalui docker logs -f <container_name>
Jika ada yang keluar, kemungkinan besar itu terkait dengan .env
berkas dikonfigurasikan secara salah.
Di dalam UI web, Anda dapat melihat /admin/emails
dan /admin/logs
untuk log email keluar dan log kesalahan.
Mengapa email keluar saya selalu habis waktunya?
Jika Anda melihat pesan seperti Connection timed out saat menghubungkan ke server MX... maka Anda mungkin perlu memeriksa apakah port 25 diblokir. Umumnya ISP atau penyedia cloud memblokir ini secara default, sehingga Anda mungkin perlu menghubungi dukungan/mengajukan tiket untuk membukanya.
Alat apa yang harus saya gunakan untuk menguji praktik terbaik konfigurasi email dan reputasi IP?
Mari kita lihat FAQ di sini.