ติดตั้ง Mailcow บน VPS ระบบอีเมลตัวเอง
Mailcow Dockerized คือ email server suite แบบครบวงจรที่รัน Docker container หลายตัวพร้อมกัน ครอบคลุมตั้งแต่ Postfix (SMTP), Dovecot (IMAP/POP3), Rspamd (anti-spam), ClamAV (anti-virus), ไปจนถึง webmail Roundcube และ SOGo ในชุดเดียว การติดตั้งบน VPS ช่วยให้คุณควบคุม email ของตัวเองได้ 100% โดยไม่ต้องพึ่งบริการภายนอก
ทำไมต้องใช้ Mailcow แทนการส่ง email ผ่านบริการอื่น
- ควบคุมข้อมูลเต็ม 100% — email ไม่ผ่านมือใคร
- ลดค่าใช้จ่าย — ไม่ต้องจ่ายค่า G Suite/Microsoft 365 รายเดือน
- Deliverability ดี — ตั้ง DKIM/SPF/DMARC ได้เอง
- Webmail พร้อมใช้ — Roundcube และ SOGo ในตัว
- Anti-spam ระดับ enterprise — Rspamd + ClamAV
ความต้องการระบบ (Minimum Requirements)
| ส่วนประกอบ | ขั้นต่ำ | แนะนำ |
|---|---|---|
| OS | Ubuntu 22.04 LTS | Ubuntu 22.04 / Debian 12 |
| RAM | 3 GB | 4–8 GB |
| CPU | 2 cores | 4 cores |
| Disk | 20 GB | 50+ GB SSD |
| Docker | 20.10+ | 24.x+ |
| Port ที่ต้องเปิด | 25, 80, 110, 143, 443, 465, 587, 993, 995, 4190 | |
mail.yourdomain.com1. เตรียม DNS Records
ก่อนติดตั้ง ต้องตั้ง DNS records ให้พร้อม (รอ propagate 30 นาที–24 ชั่วโมง):
# A Record — ชี้ mail subdomain ไปที่ IP ของ VPS
mail.yourdomain.com. A YOUR.VPS.IP
# MX Record — กำหนด mail server ของ domain
yourdomain.com. MX 10 mail.yourdomain.com.
# PTR Record (Reverse DNS) — ขอได้จาก hosting provider
YOUR.VPS.IP PTR mail.yourdomain.com.
# SPF Record
yourdomain.com. TXT "v=spf1 mx ~all"
# DMARC Record
_dmarc.yourdomain.com. TXT "v=DMARC1; p=quarantine; rua=mailto:[email protected]"
2. ติดตั้ง Docker และ Docker Compose
# อัปเดตระบบ
apt update && apt upgrade -y
# ติดตั้ง Docker
curl -fsSL https://get.docker.com | bash
# ตรวจสอบ
docker --version
docker compose version
3. ตั้งค่า Hostname ของระบบ
Mailcow ใช้ hostname ของระบบในการส่ง email ต้องตั้งให้ถูกต้อง:
# ตั้ง hostname (ต้องตรงกับ A record)
hostnamectl set-hostname mail.yourdomain.com
# ตรวจสอบ
hostname -f
# ต้องได้: mail.yourdomain.com
4. Clone Mailcow และตั้งค่าเบื้องต้น
# Clone จาก GitHub
cd /opt
git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized
# Generate config อัตโนมัติ
./generate_config.sh
# ระบบจะถามว่า hostname ของ mail server คืออะไร
# ตอบ: mail.yourdomain.com
# เลือก timezone: Asia/Bangkok
หลังจาก generate_config.sh รัน จะได้ไฟล์ mailcow.conf ปรับแต่งเพิ่มเติมได้:
nano mailcow.conf
# ค่าสำคัญที่ควรตรวจสอบ:
MAILCOW_HOSTNAME=mail.yourdomain.com
TZ=Asia/Bangkok
HTTP_PORT=80
HTTPS_PORT=443
SKIP_CLAMD=n # เปิด ClamAV (n = ไม่ข้าม)
SKIP_RSPAMD=n # เปิด Rspamd
SKIP_SOLR=y # ปิด Solr ถ้า RAM น้อย
SKIP_CLAMD=y และ SKIP_SOLR=y เพื่อประหยัด memory5. เริ่มต้น Mailcow
# Pull Docker images (อาจใช้เวลา 5–10 นาที)
docker compose pull
# เริ่มต้น services ทั้งหมด
docker compose up -d
# ตรวจสอบสถานะ
docker compose ps
รอสักครู่แล้วเข้า web admin ที่ https://mail.yourdomain.com
- Username:
admin - Password:
moohoo(เปลี่ยนทันที!)
6. ตั้งค่า Domain และ Mailbox แรก
- เข้า Web UI → Configuration → Mail Setup
- เพิ่ม Domain: กด Add Domain → ใส่
yourdomain.com - เพิ่ม Mailbox: กด Add Mailbox → กรอกชื่อ email ที่ต้องการ
- กด Generate DKIM Keys แล้วคัดลอก DNS TXT record ไปตั้งที่ DNS provider
7. เพิ่ม DKIM DNS Record
หลัง generate DKIM จาก UI จะได้ค่าประมาณนี้:
# ชื่อ record (selector ปกติคือ dkim._domainkey)
dkim._domainkey.yourdomain.com. TXT "v=DKIM1; k=rsa; t=s; s=email; p=MIIBIjAN..."
# ตรวจสอบว่า DKIM ถูกต้อง
dig +short TXT dkim._domainkey.yourdomain.com
8. ทดสอบส่ง Email และตรวจสอบคะแนน
# ส่งทดสอบผ่าน CLI
docker exec -it mailcowdockerized-postfix-mailcow-1 \
sendmail -f [email protected] [email protected] <<EOF
Subject: Test from Mailcow
Hello from my Mailcow server!
EOF
ทดสอบคะแนน email ผ่านเว็บ mail-tester.com — ควรได้คะแนน 9–10/10
9. อัปเดต Mailcow
# อัปเดตเป็น version ล่าสุด
cd /opt/mailcow-dockerized
./update.sh
# หรืออัปเดต manual
git pull origin master
docker compose pull
docker compose up -d --remove-orphans
ตรวจสอบว่า Mailcow ทำงานถูกต้อง
# ตรวจสอบ containers ทั้งหมด
docker compose ps
# ดู logs Postfix
docker compose logs postfix-mailcow --tail=50
# ตรวจสอบ Rspamd dashboard
# เข้า https://mail.yourdomain.com/rspamd (ใน admin UI)
# ทดสอบ SMTP connection
telnet mail.yourdomain.com 25
# ควรได้ response: 220 mail.yourdomain.com ESMTP Postfix
# ทดสอบ IMAP
openssl s_client -connect mail.yourdomain.com:993
# ควรได้ response: * OK Dovecot ready
# ตรวจ queue
docker exec -it mailcowdockerized-postfix-mailcow-1 postqueue -p
แก้ปัญหาที่พบบ่อย
Error: "Connection refused on port 25"
Port 25 อาจถูกบล็อกโดย ISP หรือ hosting provider โดยค่า default โดยเฉพาะ VPS ใหม่
# ตรวจสอบว่า port 25 เปิดอยู่หรือไม่
netstat -tlnp | grep :25
# ถ้า Postfix container รันแต่ port ไม่ตอบ — แจ้ง provider ยกเลิก block
# ทดสอบจากเครื่องภายนอก
telnet YOUR.VPS.IP 25
Error: "550 5.7.1 Message rejected as spam"
Email ถูก reject เพราะ DKIM/SPF/DMARC ยังไม่ถูกต้อง หรือ IP อยู่ใน blacklist
# ตรวจสอบ DKIM ผ่าน dig
dig +short TXT dkim._domainkey.yourdomain.com
# ตรวจสอบ SPF
dig +short TXT yourdomain.com | grep spf
# เช็ค blacklist ที่ mxtoolbox.com
# หรือใช้ dnsbl-check
docker exec -it mailcowdockerized-rspamd-mailcow-1 \
rspamadm dkim_check --domain yourdomain.com
Error: "certificate verify failed" ใน webmail
SSL certificate ยังไม่ได้ issue หรือหมดอายุ Mailcow ใช้ Let's Encrypt อัตโนมัติ
# Force renew certificate
docker exec -it mailcowdockerized-acme-mailcow-1 \
/root/acme.sh --renew --domain mail.yourdomain.com --force
# ตรวจสอบ certificate
echo | openssl s_client -connect mail.yourdomain.com:443 2>/dev/null | \
openssl x509 -noout -dates
Error: "ClamAV process died" — container restart loop
ClamAV ต้องการ RAM อย่างน้อย 1.5 GB เพิ่ม RAM หรือปิด ClamAV ชั่วคราว
# ปิด ClamAV (แก้ mailcow.conf)
nano mailcow.conf
# เปลี่ยน SKIP_CLAMD=n → SKIP_CLAMD=y
docker compose up -d --remove-orphans
Error: "docker: 'compose' is not a docker command"
Docker Compose Plugin ไม่ได้ติดตั้ง ต้องใช้ Docker 20.10+ พร้อม compose plugin
# ติดตั้ง docker compose plugin
apt install docker-compose-plugin -y
# ตรวจสอบ
docker compose version
คำถามที่พบบ่อย
Mailcow ต้องการ VPS spec ขนาดไหนถึงจะรันได้ดี?
สำหรับการใช้งานจริงที่มีผู้ใช้ 1–10 คน แนะนำ RAM 4 GB ขึ้นไป, CPU 2 cores, Disk 50 GB SSD ถ้าใช้งานหนักหรือมีผู้ใช้มากกว่า 50 คน ควรเพิ่มเป็น 8 GB RAM และ Disk 100 GB+
Mailcow รัน SSL อัตโนมัติหรือต้องตั้งเอง?
Mailcow มี acme-mailcow container จัดการ Let's Encrypt SSL อัตโนมัติ รวมถึง auto-renew ทุก 60 วัน ตราบที่ port 80 เปิดอยู่และ domain A record ชี้มาที่ VPS ถูกต้อง ระบบจะจัดการเองทั้งหมด
สามารถใช้ Mailcow ส่ง email transactional (เช่น OTP, password reset) ได้ไหม?
ได้ครับ Mailcow รองรับ SMTP relay สามารถตั้งค่าแอปพลิเคชันให้ส่ง email ผ่าน port 587 (STARTTLS) หรือ 465 (SSL) โดยใช้ credentials ของ mailbox ที่สร้างไว้ เหมาะสำหรับ transactional email ที่ปริมาณไม่สูงมาก