Kenapa memilih Docker Mailserver? Karena lightweight, hanya membutuhkan sedikit resource CPU dan RAM, support relay SMTP, cocok untuk bulk mail misalnya web ecommerce, dan hemat biaya infrastruktur.
Berikut tutorial cara install dan set up Docker Mailserver dengan rekomendasi service apa saja yang tidak/perlu diinstall.
Pertama, pastikan install Docker di server. Di dokumentasi spesifikasi server minimal 512MB, tapi sebaiknya 1GB RAM, 1vCPU, 20GB disk agar proses instalasinya lebih cepat.
Sedangkan untuk production dari pengalaman saya, sebaiknya 2GB RAM 2 core VCPU, disknya tergantung banyaknya email, 50GB disk mungkin ideal jika tanpa file lampiran email.
Buat Swap file
Jalankan perintah ini per baris untuk mengaktifkan Swap 2GB
sudo dd if=/dev/zero of=/swapfile count=2048 bs=1M
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Timezone
Mengatur timezone server, alasanya untuk memudahkan monitoring logs (docker logs
), jadi kita tahu kapan terjadinya insiden email tidak terkirim atau masalah lainnya. Di bawah ini saya set WIB.
unlink /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Jakarta /etc/localtime
Mengatur DNS
Memetakan domain ke IP server. Saya contohkan server ini menggunakan domain utama idnetter.com
(MX) sedangkan hostnamenya mail.idnetter.com
(incoming/outgoing server email).
Tambahkan juga DMARC dan SPF
Hostname | Record | Value |
---|---|---|
A | IP publik server | |
@ | MX | mail.idnetter.com |
_dmarc | TXT | “v=DMARC1; p=none; sp=none; fo=0; adkim=r; aspf=r; pct=100; rf=afrf; ri=86400; rua=mailto:[email protected]; ruf=mailto:[email protected]” |
@ | TXT | “v=spf1 mx ~all” |
Membuat direktori mailserver
Direktori ini berfungsi sebagai volume yang akan menyimpan data dan konfigurasi di host (operasi sistem Linux)
mkdir /mailserver
Membuat file environtment
Masuk ke direktori kerja, yakni direktori yang kita buat sebelumnya mailserver
, kemudian download file mailserver.env
cd /mailserver
wget https://github.com/docker-mailserver/docker-mailserver/blob/master/mailserver.env
Daftar variable environment yang tersedia bisa dicek versi mutakhirnya di sini: pelajari dan modifikasi apa saja yang diperlukan seperti contoh berikut:
Catatan:
– Kalau barisnya tidak ada, tambahkan sendiri ya
ONE_DIR=1
ENABLE_RSPAMD=1
ENABLE_RSPAMD_REDIS=1
ENABLE_AMAVIS=1
ENABLE_FAIL2BAN=1
SSL_TYPE=letsencrypt
# Default =10mb
# Unlimited =0
# Jika kalian sync email dari server sebelumnya menggunakan imapsync sebaiknya set ke unlimited
POSTFIX_MESSAGE_SIZE_LIMIT=0
Relay host
Untuk integrasi relay SMTP, atur baris berikut, sebagai contoh Amazon SES formatnya seperti ini
DEFAULT_RELAY_HOST=[email-smtp.us-west-2.amazonaws.com]:587
RELAY_HOST=email-smtp.us-west-2.amazonaws.com
RELAY_PORT=587
RELAY_USER=usernya
RELAY_PASSWORD=passwordnya_relay_user
Catatan jika mengatur relay user dan password melalui ENV
Meskipun ENV lebih leluasa, risiko akan terekspose ke user lain yang login ke server atau hal lain. Rekomendasi via command setup relay add-auth
adalah alternatif yang lebih baik, yang akan mengelola kredensial melalui konfigurasi file, lebih tepatnya tersimpan di dalam file konfigurasi postfix postfix-sasl-password.cf
, baca lebih lanjut mengenai hal ini di sini.
Membuat docker-compose.yml
selanjutnya membuat file docker-compose.yml
dengan konten ini, silahkan ganti domainnya!
services:
mailserver:
image: docker.io/mailserver/docker-mailserver:latest
container_name: mailserver
hostname: mail
domainname: idnetter.com
env_file: mailserver.env
ports:
- "25:25"
- "143:143"
- "465:465"
- "587:587"
- "993:993"
volumes:
- ./data/dms/mail-data/:/var/mail/
- ./data/dms/mail-state/:/var/mail-state/
- ./data/dms/mail-logs/:/var/log/mail/
- ./data/dms/config/:/tmp/docker-mailserver/
- ./data/letsencrypt:/etc/letsencrypt
- /etc/localtime:/etc/localtime:ro
restart: always
stop_grace_period: 1m
cap_add:
- NET_ADMIN
healthcheck:
test: "ss --listening --tcp | grep -P 'LISTEN.+:smtp' || exit 1"
timeout: 3s
retries: 0
certbot:
image: certbot/certbot
container_name: certbot
ports:
- "80:80"
- "443:443"
volumes:
- ./data/letsencrypt:/etc/letsencrypt
- ./data/certbot/logs:/var/log/letsencrypt/
command: certonly --standalone --force-renewal --email [email protected] -d mail.idnetter.com --agree-tos
Menjalankan docker compose
Jalankan perintah berikut untuk memulai inisialisasi mail server.
docker compose up -d
Untuk renew sertifikat setiap bulan sekali, silahkan jalankan perintah berikut
cd /mailserver
docker compose up -d cerbot
Manajemen Mailserver dengan bash script
Untuk manajemen seperti menambahkan akun email, DKIM, Relay hosts, Docker Mailserver ada script bashnya. Script bash ini sebenarnya alias dari docker exec -ti <CONTAINER NAME>
.
cd /mailserver
wget https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/master/setup.sh
chmod a+x ./setup.sh
ln -s ./setup.sh /usr/local/bin/setup
setup.sh
sudah kita buat alias menjadi setup
di /usr/loca/bin/setup, jadi kita bisa eksekusi perintah setup
Nah, untuk eksplore lebih jauh fungsi-fungsi setup.sh ini silahkan pelajari dengan perintah:
setup --help
Membuat akun email
Perintah untuk membuat akun email, contoh
setup email add [email protected]
Generate DKIM
Generate DKIM
setup config dkim domain idnetter.com
Kemudian copy konten DKIM dan tambahkan di DNS record
cat /mailserver/data/dms/config/opendkim/keys/idnetter.com/mail.txt
Tambahkan record DKIM di DNS selector defaultnya mail_.domainkey
Sampai di sini proses install Docker Mailserver sudah rampung, bisa test dengan Pocketbase ataupun email client Thunderbird maupun aplikasi Gmail di smartphone.
Bonus migrasi email
Kalian bisa migrasi menggunakan tools imapsync, cukup run perintah ini
docker run --rm gilleslamiral/imapsync imapsync --addheader \
--host1 server_sumber --user1 email_sumber --password1 'password_sumber' \
--host2 server_tujuan --user2 email_tujuan --password2 'password_tujuan'
Contoh format migrasi dari server lama (host1) dan baru (host2)
--host1 smtp.idnetter.com --user1 [email protected] --password1 'katasandinya' \
--host2 mail.idnetter.com --user2 [email protected] --password2 'katasandinya'
Selesai, semoga bermanfaat.
Tentu teman-teman tidak perlu repot, saya menyediakan jasa managed mail server serta menerima konsultasi software stack yang cocok untuk kebutuhkan project/perusahaan, bisa menggunakan basis web hosting control panel maupun Docker container.
Hubungi jasa setup mail server profesional, telah berpengalaman untuk setup email server dengan banyak transaksi bisa integrasi dengan Amazon SES, Sendgrid dan SMTP relay berbayar lainnya. WhatsApp: +6281235008433. Dijamin harga lebih terjangkau dari layanan manapun dengan support ekstrem :-).