Cara install Docker Mailserver

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

HostnameRecordValue
mailAIP publik server
@MXmail.idnetter.com
_dmarcTXT“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”
Table DNS record mail server

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 :-).

Add a comment