Kalau kamu udah pernah nyoba install mail server sendiri, pasti tau rasanya. DNS record ribet, tiap protokol butuh service beda-beda. Belum lagi ngurusin DKIM sama SPF biar email gak nyangkut di folder spam. Di kerjaan saya sendiri pernah pegang urusan mail server perusahaan, dan pengalaman itu ngajarin satu hal: makin banyak komponen yang jalan terpisah, makin banyak juga titik yang bisa rusak. Nah, belakangan ini nama Stalwart Mail Server makin sering muncul di komunitas self-hosting. Tool ini digadang-gadang jadi jawaban buat masalah kompleksitas itu. Di artikel ini saya bakal bahas cara install Stalwart Mail Server di VPS pakai Docker Compose secara detail dari nol, cocok buat kamu yang baru pertama kali setup mail server sendiri.
Apa Itu Stalwart Mail Server Sebenarnya
Stalwart itu mail server open source yang ditulis pakai Rust, bahasa pemrograman yang terkenal cepet dan hemat resource. Buat yang belum familiar, mail server itu software yang tugasnya ngirim dan nerima email. Biasanya buat bikin mail server lengkap, kamu butuh beberapa software terpisah yang masing-masing punya tugas sendiri. Misalnya Postfix buat ngirim email (SMTP), Dovecot buat nerima dan nyimpen email (IMAP dan POP3), Rspamd atau SpamAssassin buat filter spam, dan OpenDKIM buat tanda tangan digital email. Semua itu harus diinstall satu-satu, dikonfigurasi biar bisa ngobrol satu sama lain, dan dirawat secara terpisah. Kalau satu aja bermasalah, bisa bikin seluruh sistem email kamu mati.
Stalwart beda banget pendekatannya. Semua fungsi itu, SMTP, IMAP4, POP3, JMAP (protokol email modern pengganti IMAP), sampai ManageSieve buat filter email, semuanya dijadiin satu binary aja. Artinya kamu cuma perlu jalanin satu program, dan semua protokol email udah langsung tersedia. Soalnya arsitekturnya modular, kamu juga bisa milih backend storage sendiri. Mau pakai RocksDB yang ringan dan cocok buat VPS kecil, atau PostgreSQL kalau butuh skala lebih gede dan udah familiar sama database relasional, tinggal pilih pas setup awal.
Yang bikin makin menarik, Stalwart otomatis bisa generate DNS record buat DKIM, SPF, DMARC, sama MTA-STS pas awal setup. Buat yang belum tau, ini semua adalah record DNS yang fungsinya buat membuktikan ke server email lain (kayak Gmail, Yahoo, Outlook) bahwa email yang kamu kirim itu beneran dari domain kamu dan bukan spam. Biasanya ngatur ini manual itu bagian paling bikin pusing, tapi Stalwart tinggal kasih hasilnya buat kamu copy-paste ke DNS manager.

Bedanya Sama Mailcow yang Udah Pernah Saya Bahas
Saya sendiri udah pernah nulis cara install Mailcow di sini. Sampai sekarang Mailcow tetep pilihan solid buat yang butuh ekosistem lengkap, dengan webmail bawaan (SOGo), antivirus (ClamAV), plus panel admin yang udah jadi dan tinggal pakai. Masalahnya, Mailcow itu tergolong berat. Soalnya dia jalanin belasan container sekaligus, mulai dari Postfix, Dovecot, Rspamd, ClamAV, SOGo, Redis, sampai Nginx. Di VPS dengan RAM 2GB, Mailcow udah kerasa berat dan sering bikin server lemot.
Stalwart di sisi lain cukup satu container doang buat handle semua protokol itu. Buat VPS kecil dengan RAM terbatas, bedanya ke pemakaian resource lumayan kerasa. Stalwart bisa jalan nyaman di VPS 1GB RAM buat volume email kecil sampai menengah, sementara Mailcow minimal butuh 2-4GB biar gak ngadat. Soal performa pun Stalwart diklaim lebih cepet, karena ditulis di Rust yang dicompile langsung ke machine code, bukan bahasa interpreted kayak beberapa komponen di stack lama.
Kapan Saya Tetep Pilih Mailcow Ketimbang Stalwart
Meskipun begitu, saya gak bakal bilang Stalwart otomatis lebih baik buat semua kasus. Kalau kamu butuh webmail yang langsung kepake tanpa install app tambahan di HP atau laptop, mending tetep di Mailcow aja. Mailcow udah include SOGo sebagai webmail client yang bisa diakses langsung dari browser, lengkap sama kalender dan kontak. Stalwart belum punya webmail bawaan, jadi kamu perlu setup sendiri kalau mau akses email lewat browser, misalnya pakai Roundcube atau Snappymail.
Sama juga kalau tim kamu udah kebiasa sama ekosistem Mailcow, migrasi cuma bikin ribet dan ada resiko downtime. Stalwart lebih cocok buat yang emang mau kontrol penuh, ngerti cara kerja SMTP sama IMAP secara langsung, atau yang VPS-nya terbatas resource dan butuh mail server yang ringan. Intinya ini murni soal trade-off antara kemudahan pakai dan efisiensi resource, bukan soal mana yang lebih bagus secara mutlak.
Prasyarat Sebelum Install Stalwart Mail Server di VPS
Sebelum masuk ke instalasi, ada beberapa hal yang wajib disiapin dulu. Jangan skip bagian ini, soalnya kalau ada yang kurang, nanti proses instalasi bakal mentok di tengah jalan dan kamu bingung sendiri nyari penyebabnya.
1. Domain dengan Akses DNS Penuh
Kamu butuh domain yang DNS-nya bisa diatur bebas. Misalnya kamu punya domain contoh.com, kamu harus bisa login ke DNS manager-nya (bisa di Cloudflare, Namecheap, atau provider domain lain) dan tambahin record sesuka hati. Nanti Stalwart perlu beberapa record penting: MX record buat ngarahin email ke server kamu, record DKIM buat tanda tangan digital, SPF buat verifikasi pengirim, dan DMARC buat kebijakan penanganan email yang gagal verifikasi. Tanpa akses DNS penuh, kamu gak bisa setup mail server sama sekali.
2. Reverse DNS (PTR Record)
Ini yang sering dilupain pemula. Reverse DNS itu kebalikan dari DNS biasa. Kalau DNS biasa ngubah nama domain jadi IP address, reverse DNS ngubah IP address jadi nama domain. Kenapa penting? Soalnya server email besar kayak Gmail, Yahoo, dan Outlook bakal ngecek apakah IP yang ngirim email punya PTR record yang valid. Kalau gak ada, email kamu kemungkinan besar langsung ditolak atau masuk spam. Cara setup PTR record biasanya lewat panel VPS provider kamu (Hetzner, DigitalOcean, Vultr, dll), bukan di DNS manager domain. Arahin PTR record ke hostname mail server kamu, misalnya mail.contoh.com.
3. Pastikan Port 25 Tidak Diblokir
Port 25 itu port standar yang dipakai server email buat komunikasi antar server (SMTP relay). Banyak provider VPS nge-block port ini secara default buat cegah spam dari server baru. Cara ngeceknya gampang, coba jalanin command ini di VPS kamu:
telnet smtp.gmail.com 25
Kalau muncul pesan Connected atau respons dari server Gmail, berarti port 25 kamu terbuka. Kalau timeout atau connection refused, hubungi support provider VPS kamu dan minta dibukain port 25.
4. Docker dan Docker Compose Sudah Terinstall
Stalwart bakal kita jalanin di dalam Docker container, jadi Docker wajib udah terinstall di VPS kamu. Kalau belum, baca dulu panduan Cara Install Docker di Ubuntu VPS yang udah saya tulis sebelumnya. Pastiin juga Docker Compose udah ikut terinstall, soalnya kita bakal pakai file docker-compose.yml buat konfigurasi container-nya.
5. Spesifikasi VPS Minimum
Stalwart tergolong ringan dibanding mail server lain, tapi tetep butuh resource yang cukup. Minimal siapin VPS dengan spek berikut:
- RAM: Minimal 1GB, rekomendasi 2GB kalau volume email lumayan ramai
- CPU: 1 vCPU udah cukup buat penggunaan personal atau bisnis kecil
- Storage: Minimal 20GB, tergantung seberapa banyak email yang bakal disimpen
- OS: Ubuntu 22.04 atau 24.04 LTS (yang paling gampang buat pemula)
Cara Install Stalwart Mail Server Pakai Docker Compose
Sekarang masuk ke bagian inti. Ikutin langkah-langkah di bawah ini satu per satu, jangan loncat-loncat biar gak ada yang kelewat.

Step 1 – Buat Folder untuk Data Stalwart
Pertama, login ke VPS kamu lewat SSH. Kalau belum tau caranya, tinggal buka terminal (di Mac/Linux) atau PuTTY (di Windows) dan ketik ssh user@ip-vps-kamu. Setelah masuk, bikin folder khusus buat nyimpen semua data Stalwart:
mkdir -p /opt/stalwart-mail
cd /opt/stalwart-mail
Folder /opt/stalwart-mail ini bakal jadi tempat semua konfigurasi dan data email disimpen. Dengan begitu, walau container Docker di-restart atau di-recreate, data email kamu tetep aman dan gak hilang.

Step 2 – Buat File Docker Compose
Masih di folder /opt/stalwart-mail, bikin file docker-compose.yml pakai text editor nano:
nano docker-compose.yml
Terus paste isi berikut ini ke dalamnya:
version: "3"
services:
stalwart-mail:
image: stalwartlabs/mail-server:latest
container_name: stalwart-mail
ports:
- "25:25"
- "587:587"
- "465:465"
- "143:143"
- "993:993"
- "4190:4190"
- "8080:8080"
- "443:443"
volumes:
- ./stalwart-data:/opt/stalwart-mail
restart: unless-stopped
Penjelasan tiap bagian:
- image: stalwartlabs/mail-server:latest – nge-pull image Docker resmi Stalwart versi terbaru dari Docker Hub
- Port 25 – SMTP, buat nerima email dari server lain
- Port 587 – SMTP Submission, buat ngirim email dari email client
- Port 465 – SMTP over SSL, alternatif port 587 yang udah terenkripsi
- Port 143 – IMAP, buat baca email dari email client tanpa enkripsi
- Port 993 – IMAP over SSL, buat baca email dengan enkripsi (rekomendasi)
- Port 4190 – ManageSieve, buat atur filter email otomatis
- Port 8080 – Web admin panel Stalwart
- Port 443 – HTTPS, buat akses JMAP dan admin panel lewat SSL
- volumes – mount folder di VPS ke container biar data persisten
- restart: unless-stopped – container otomatis nyala lagi kalau VPS di-reboot
Simpan file dengan Ctrl+O lalu Enter, keluar dari nano dengan Ctrl+X.
Step 3 – Jalankan Container Stalwart
Sekarang jalanin container-nya dengan command berikut:
docker compose up -d
Flag -d artinya detached mode, jadi container jalan di background dan terminal kamu tetep bisa dipakai buat hal lain. Tunggu beberapa detik sampai Docker selesai download image dan nyalain container-nya. Kalau ini pertama kali, proses download image-nya bisa makan waktu beberapa menit tergantung kecepatan internet VPS kamu.

Step 4 – Cek Status Container dan Ambil Password Admin
Setelah container jalan, cek dulu statusnya buat mastiin gak ada error:
docker ps

Kalau container stalwart-mail muncul dengan status Up, berarti udah jalan dengan bener. Selanjutnya, ini bagian yang paling penting dan sering kelewat: ambil password admin dari log container. Stalwart otomatis generate username dan password admin pas pertama kali jalan, dan info ini cuma muncul sekali di log.
docker logs stalwart-mail
Cari baris yang isinya username dan password admin. Biasanya formatnya kayak gini:
Administrator account admin with password XXXXXXXX created.

Penting banget: Langsung copy dan simpen password ini di tempat yang aman (password manager, catatan terenkripsi, atau minimal file teks di laptop kamu). Kalau sampai hilang, kamu harus reset manual lewat command line dan prosesnya agak ribet.
Step 5 – Buka Port yang Dibutuhin di UFW
Kalau kamu pakai UFW buat firewall di VPS (dan seharusnya memang pakai), kamu perlu buka port-port yang dipakai Stalwart biar traffic email bisa masuk. Cara setup UFW firewall di Ubuntu VPS udah pernah saya bahas lengkap. Jalanin command berikut satu per satu:
sudo ufw allow 25/tcp
sudo ufw allow 587/tcp
sudo ufw allow 465/tcp
sudo ufw allow 143/tcp
sudo ufw allow 993/tcp
sudo ufw allow 443/tcp

Perhatiin bahwa saya sengaja gak buka port 8080 ke publik. Port ini buat admin panel, dan sebaiknya cuma diakses lewat jaringan internal atau VPN kayak Tailscale. Kalau kamu buka port admin ke publik, siapa aja bisa nyoba login ke panel admin kamu, dan itu resiko keamanan yang gak perlu.
Setelah semua rule ditambahin, cek statusnya:
sudo ufw status
Pastiin semua port yang tadi ditambahin udah muncul di daftar dengan status ALLOW.

Setup Awal Lewat Web Admin Panel
Setelah container jalan dan port udah dibuka, sekarang waktunya konfigurasi Stalwart lewat web admin panel. Ikutin langkah-langkah berikut:
Step 6 – Login ke Admin Panel
Buka browser dan akses alamat berikut:
https://ip-vps-kamu:443
Ganti ip-vps-kamu dengan IP address VPS kamu yang sebenarnya. Browser mungkin bakal kasih warning soal sertifikat SSL yang belum valid, ini normal buat tahap awal. Tinggal klik “Advanced” terus “Proceed” atau “Accept Risk” buat lanjut. Login pakai username admin dan password yang udah kamu simpen dari Step 4 tadi.
Step 7 – Konfigurasi Domain dan Hostname
Di wizard awal atau menu settings, kamu bakal diminta masukin beberapa informasi penting:
- Domain: Masukin domain utama kamu, misalnya
contoh.com. Ini domain yang bakal dipakai buat alamat email (misalnyanama@contoh.com) - Hostname: Masukin hostname mail server kamu, misalnya
mail.contoh.com. Ini harus sama dengan yang kamu set di PTR record tadi - Storage backend: Pilih RocksDB kalau VPS kamu kecil dan kamu gak mau ribet setup database tambahan. Pilih PostgreSQL kalau kamu udah familiar dan butuh skala lebih besar
Step 8 – Copy DNS Record yang Digenerate Stalwart
Setelah konfigurasi domain, Stalwart bakal otomatis generate semua DNS record yang kamu butuhin. Biasanya ada beberapa record yang perlu ditambahin:
- MX Record: Ngarahin email yang ditujuin ke domain kamu ke mail server kamu. Contoh:
contoh.com MX 10 mail.contoh.com - A Record: Ngarahin
mail.contoh.comke IP address VPS kamu - SPF Record: Record TXT yang ngasih tau server lain bahwa IP VPS kamu emang boleh ngirim email atas nama domain kamu. Contoh:
v=spf1 a mx ip4:IP-VPS-KAMU ~all - DKIM Record: Record TXT yang berisi public key buat verifikasi tanda tangan digital email kamu. Ini yang paling panjang dan harus di-copy persis tanpa ada karakter yang kelewat
- DMARC Record: Record TXT yang ngatur kebijakan apa yang harus dilakuin server penerima kalau email gagal verifikasi SPF atau DKIM. Contoh:
v=DMARC1; p=quarantine; rua=mailto:postmaster@contoh.com
Copy semua record ini satu per satu, lalu tambahin di DNS manager domain kamu (Cloudflare, Namecheap, atau provider lain). Pastiin gak ada typo atau spasi yang ketambah, soalnya satu karakter salah aja bisa bikin verifikasi gagal.
Step 9 – Restart Container Setelah Konfigurasi
Setelah semua DNS record ditambahin dan konfigurasi di admin panel selesai, restart container biar semua perubahan ke-apply dengan bener:
cd /opt/stalwart-mail
docker compose restart
Tunggu beberapa detik, lalu cek lagi statusnya pakai docker ps buat mastiin container balik ke status Up.
Step 10 – Bikin Akun Email Pertama
Sebelum bisa testing kirim dan terima email, kamu perlu bikin akun email dulu lewat admin panel. Masuk ke menu Accounts atau Users di admin panel, terus bikin akun baru dengan mengisi:
- Username: Nama yang bakal jadi alamat email, misalnya
jundi(nanti jadijundi@contoh.com) - Password: Bikin password yang kuat, minimal 12 karakter campuran huruf besar, kecil, angka, dan simbol
- Display Name: Nama yang muncul di email yang kamu kirim, misalnya “Jundi”
Setelah akun dibuat, kamu bisa langsung pakai akun ini buat testing di step selanjutnya.
Testing Kirim dan Terima Email
Jangan langsung anggap beres cuma karena container-nya jalan. Testing ini wajib dilakuin buat mastiin semua komponen berfungsi dengan bener.
Step 11 – Setup Email Client
Buka email client favorit kamu (Thunderbird di desktop, atau app Mail bawaan di HP). Tambahin akun baru dengan setting berikut:
- Incoming Server (IMAP):
mail.contoh.com, Port993, SSL/TLS - Outgoing Server (SMTP):
mail.contoh.com, Port587, STARTTLS - Username: Alamat email lengkap, misalnya
jundi@contoh.com - Password: Password yang kamu bikin di Step 10
Step 12 – Test Kirim Email ke Gmail
Coba kirim email test dari akun Stalwart kamu ke alamat Gmail atau provider lain. Setelah email sampai, buka email tersebut di Gmail dan cek header-nya buat mastiin DKIM dan SPF-nya pass. Di Gmail, klik titik tiga di pojok kanan email, pilih “Show original”. Cari bagian yang tulisannya:
SPF: PASS
DKIM: PASS
DMARC: PASS
Kalau ketiga-tiganya PASS, selamat, mail server kamu udah berfungsi dengan bener dan email yang kamu kirim punya reputasi yang baik.
Step 13 – Cek Skor Deliverability
Buat testing yang lebih menyeluruh, pakai tool online gratis kayak Mail Tester. Caranya gampang: buka website-nya, mereka bakal kasih alamat email random. Kirim email dari akun Stalwart kamu ke alamat itu, terus klik “Then check your score”. Tool ini bakal kasih skor dari 1-10 dan nunjukin detail apa aja yang udah bener dan apa yang perlu diperbaiki. Target skor minimal 8/10 biar email kamu gak gampang masuk spam.
Catatan penting: proses propagasi DNS makan waktu beberapa menit sampai beberapa jam, tergantung provider DNS kamu. Jadi kalau hasil testing masih gagal di awal, terutama buat DKIM dan SPF, tunggu dulu 1-2 jam sebelum buru-buru anggap ada yang salah. Cek ulang setelah itu.
Yang Perlu Diperhatiin Setelah Install Stalwart Mail Server
Ada beberapa hal yang sering ketauan bikin masalah setelah install. Baca bagian ini biar kamu gak perlu debugging berjam-jam buat masalah yang sebenernya umum.
Email Masuk Spam Padahal DKIM dan SPF Udah Pass
Ini masalah paling umum buat mail server baru. Penyebabnya biasanya soal reputasi IP. IP VPS kamu itu baru, belum punya track record ngirim email yang bener. Atau lebih parah, IP itu pernah dipake orang lain buat spam sebelumnya. Solusinya: cek dulu IP kamu di MXToolbox Blacklist Check. Kalau ternyata masuk blacklist, kamu bisa request delisting ke masing-masing blacklist provider. Selain itu, mulai kirim email secara bertahap, jangan langsung blast ratusan email di hari pertama. Biarkan reputasi IP kamu naik pelan-pelan.
Port 25 Gak Bisa Dipakai Kirim Keluar
Kalau email bisa diterima tapi gak bisa dikirim keluar, kemungkinan besar provider VPS kamu masih nge-block outbound port 25. Ini beda sama inbound port 25 yang mungkin udah dibuka. Langsung hubungi support provider VPS kamu dan minta dibukain outbound port 25. Beberapa provider kayak Oracle Cloud dan beberapa plan di AWS nge-block port ini secara permanen dan gak bisa dibuka, jadi pastiin kamu pilih provider yang mendukung mail server sebelum mulai setup.
SSL Certificate Belum Valid
Stalwart mendukung auto-provisioning SSL certificate lewat ACME (Let’s Encrypt). Tapi biar ini bisa jalan, domain mail.contoh.com harus udah ngarah ke IP VPS kamu dan port 443 harus terbuka. Kalau SSL belum ke-provision otomatis, cek di admin panel bagian TLS/SSL settings dan pastiin ACME udah di-enable. Alternatifnya, kamu bisa generate certificate manual pakai Certbot dan mount ke container.
Stalwart Masih Relatif Baru
Satu hal lagi yang jarang disadarin banyak orang: Stalwart masih relatif baru dibanding Postfix yang udah puluhan tahun umurnya. Akibatnya, komunitas dan dokumentasi troubleshooting-nya belum sebanyak stack lama. Jadi siap-siap lebih sering ngecek dokumentasi resmi Stalwart atau GitHub issue kalau nemu bug yang agak nyeleneh. Sisi positifnya, development Stalwart cukup aktif dan maintainer-nya responsif di GitHub, jadi bug biasanya cepet di-fix.
Kesimpulan
Buat yang emang pengen ngurangin kompleksitas infrastruktur mail server tanpa ngorbanin fitur penting, Stalwart layak banget buat dicoba. Apalagi kalau resource VPS kamu pas-pasan. Dengan satu container doang, kamu udah dapet SMTP, IMAP, POP3, JMAP, spam filter, dan auto-generate DNS record. Gak perlu lagi ngejuggle belasan service yang masing-masing punya konfigurasi sendiri. Tapi inget, jalanin mail server sendiri itu commitment jangka panjang. Kamu harus siap monitoring, update, dan troubleshoot kalau ada masalah. Kalau cuma butuh email buat sehari-hari tanpa mau repot, layanan email berbayar tetep pilihan yang lebih praktis.


























