Docker-Mailserver 部署教程:VPS 自建企业邮箱的完整流程

Docker-Mailserver 部署教程封面

这篇教程教你如何用 Docker-Mailserver 在 VPS 上搭建一套完整的企业邮箱系统——从域名配置到客户端连接,每一步都附带可直接复制的命令,40 分钟内就能让第一封邮件收发成功。

很多中小企业在选邮箱方案时会遇到一个纠结:用第三方企业邮箱每年要付几千块,账号数一多成本直线上升;用免费邮箱又显得不专业。如果你手上有一台 VPS(虚拟专用服务器),其实完全可以自建一套企业邮箱——用 Docker-Mailserver 这个开源方案,半小时就能跑起来。

我们会覆盖域名 DNS 配置、Docker-Mailserver 安装、DKIM 签名、反垃圾策略、SSL(安全传输协议)证书,以及 Outlook / Thunderbird 客户端连接。不需要你提前有邮件服务器运维经验。

环境准备:你需要什么

  • 一台 VPS:建议至少 1 核 1GB 内存,推荐 Ubuntu 22.04 或 Debian 12。内存低于 512MB 的话 ClamAV 可能跑不起来,后面会讲怎么关掉它。
  • 一个域名:比如 yourcompany.com,你需要能修改它的 DNS 记录。
  • Docker 和 Docker Composeapt install docker.io docker-compose-plugin 即可安装。

如果你的 VPS 还没装 Docker,运行:

apt update && apt install -y docker.io docker-compose-plugin
systemctl enable --now docker
docker --version

DNS 记录配置:邮箱能不能收发的关键

很多人自建邮箱失败,不是 Docker 配置有问题,而是 DNS(域名系统,负责把域名翻译成 IP 地址)没配对。邮件服务器对 DNS 的依赖比 Web 服务器严格得多——MX 记录、SPF、DKIM、DMARC 四项缺一不可,少一个就可能被 Gmail、Outlook 直接拒收。

mail.yourcompany.com 作为邮件服务器主机名为例,你需要添加以下 DNS 记录:

记录类型 主机名 说明
A mail 你的 VPS IP 邮件服务器指向
MX @ mail.yourcompany.com 告诉其他服务器往哪里投递邮件
TXT @ v=spf1 mx ~all SPF 记录,声明哪些 IP 可以代表你发邮件
TXT _dmarc v=DMARC1; p=quarantine; rua=mailto:admin@yourcompany.com DMARC 策略

DKIM 记录需要等 Docker-Mailserver 生成密钥后再填,我们在后面会专门讲。

如果你的域名在 Cloudflare 管理,注意把邮件相关的 A 记录和 MX 记录的”代理状态”关掉,否则外部邮件服务器无法直接连接到你的 VPS。

安装 Docker-Mailserver

Docker-Mailserver 是目前 GitHub 上星标最多的开源邮件服务器项目之一,核心优势是”一个 docker-compose.yml 搞定所有”——Postfix、Dovecot、SpamAssassin、ClamAV 全部打包好。

先创建工作目录,然后下载配置文件:

mkdir -p /opt/docker-mailserver
cd /opt/docker-mailserver

curl -o docker-compose.yml https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/master/docker-compose.yml
curl -o mailserver.env https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/master/mailserver.env
curl -o setup.sh https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/master/setup.sh
chmod +x setup.sh

接下来编辑 docker-compose.yml,把关键参数改成你自己的环境:

services:
  mailserver:
    image: ghcr.io/docker-mailserver/docker-mailserver:latest
    container_name: mailserver
    hostname: mail.yourcompany.com
    ports:
      - "25:25"
      - "465:465"
      - "587:587"
      - "993:993"
    volumes:
      - ./mail-data:/var/mail
      - ./mail-state:/var/mail-state
      - ./config:/tmp/docker-mailserver/
      - /etc/letsencrypt:/etc/letsencrypt:ro
    env_file: mailserver.env
    restart: always
    stop_grace_period: 1m
    cap_add:
      - NET_ADMIN
      - SYS_PTRACE

几个要注意的地方:

  • hostname 必须填邮件服务器完整域名(FQDN),比如 mail.yourcompany.com,不能只填 yourcompany.com
  • 端口 25 是 SMTP 收件端口,465/587 是发件端口,993 是 IMAP(互联网消息访问协议)加密端口。有些云服务商会默认封掉 25 端口,需要提前在安全组里放行。
  • /etc/letsencrypt 挂载是为了复用 Let’s Encrypt 的 SSL 证书。

创建邮箱账号与启动服务

配置好 docker-compose.yml 后,启动容器并添加邮箱账号:

# 启动邮件服务器
docker compose up -d

# 添加邮箱账号
./setup.sh email add admin@yourcompany.com YourStrongPassword123

# 验证账号
./setup.sh email list

每个员工需要一个独立账号:

./setup.sh email add zhangsan@yourcompany.com AnotherStrongPassword

密码建议至少 12 位,包含大小写字母和数字。Docker-Mailserver 默认使用 bcrypt 加密存储密码。

邮箱账号创建流程

DKIM 签名:让你的邮件不被当成垃圾邮件

DKIM(DomainKeys Identified Mail)是自建邮箱能不能成功送达的最关键一步。你的邮件服务器用私钥对每封邮件签名,收件方服务器通过 DNS 里的公钥来验证签名。没有 DKIM 签名的邮件,Gmail 和 Outlook 基本都会丢进垃圾箱甚至直接拒收。

生成 DKIM 密钥:

# 生成 DKIM 密钥(2048 位)
./setup.sh config dkim keysize 2048

执行完后,DKIM 公钥会保存在 config/opendkim/keys/yourcompany.com/mail.txt 文件里,内容类似:

mail._domainkey IN TXT (
  "v=DKIM1; h=sha256; k=rsa; "
  "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..."
)

把这段内容整理成一行,添加到 DNS 记录中:

记录类型 主机名
TXT mail._domainkey v=DKIM1; h=sha256; k=rsa; p=MIIBIjAN…

DNS 记录传播通常需要几分钟到几小时。验证 DKIM 是否生效:

dig TXT mail._domainkey.yourcompany.com +short

如果返回了你刚才添加的 DKIM 公钥内容,说明配置成功。

SSL 证书:加密邮件传输

邮件传输如果不加密就是明文传输,任何中间节点都能读到邮件内容。用 Let’s Encrypt 免费证书配合 Certbot 自动申请和续期:

# 安装 certbot
apt install -y certbot

# 申请证书(确保 80 端口可用)
certbot certonly --standalone -d mail.yourcompany.com

# 设置自动续期(证书 90 天过期)
echo "0 3 * * * certbot renew --quiet && docker compose restart mailserver" | crontab -

证书申请成功后存放在 /etc/letsencrypt/live/mail.yourcompany.com/,Docker-Mailserver 会自动识别。重启容器让证书生效:

docker compose restart mailserver

DKIM 与 SSL 配置流程

反垃圾邮件与低内存优化

Docker-Mailserver 默认启用 SpamAssassin(垃圾邮件过滤)和 ClamAV(病毒扫描)。ClamAV 内存占用约 800MB,1GB 内存的 VPS 很可能跑崩。解决方法是在 mailserver.env 中关掉 ClamAV,改用 Rspamd:

ENABLE_CLAMAV=0
ENABLE_RSPAMD=1
ENABLE_SPAMASSASSIN=0

Rspamd 是 SpamAssassin 的替代方案,内存占用约 50MB,过滤效果不差。Docker-Mailserver 从 v12 开始默认推荐 Rspamd。

另外,如果你想启用 Fail2ban 来防止暴力破解,在 mailserver.env 里加上:

ENABLE_FAIL2BAN=1

Fail2ban 会监控认证日志,同一 IP 失败 5 次就封禁 30 分钟,是公网邮件服务器的必备安全措施。

客户端连接:Outlook 和 Thunderbird 设置

邮箱跑起来之后,员工需要在电脑或手机上配置邮件客户端。Docker-Mailserver 支持标准 IMAP/SMTP 协议,几乎所有主流客户端都能直接连接。

邮件客户端配置示意图

Outlook 配置参数:

设置项
收件服务器(IMAP) mail.yourcompany.com
IMAP 端口 993
发件服务器(SMTP) mail.yourcompany.com
SMTP 端口 465 或 587
用户名 完整邮箱地址
密码 创建账号时设置的密码

Thunderbird 配置参数与 Outlook 基本一致,支持”自动配置”——输入邮箱地址和密码即可。

连不上的话,按这个顺序排查:VPS 防火墙是否放行了 993 和 465 端口 → 云服务商安全组是否也放行 → docker compose logs mailserver 看 TLS 握手报错。

日常维护与监控

自建邮箱不是”装完就不管”的事。你需要定期检查三件事:

邮件队列——如果队列积压,说明有邮件发不出去。用 ./setup.sh queue 查看状态。

IP 信誉——用 MXToolbox 检查你的 IP 是否在主流黑名单上。在 独立服务器 上做自建邮箱会更灵活,磁盘空间通常比 VPS 大得多。

备份——邮件数据存放在 ./mail-data 目录下,定期打包:

tar czf /backup/mail-$(date +%Y%m%d).tar.gz /opt/docker-mailserver/mail-data

常见问题排查

发出去的邮件被退信(550 5.7.1)——检查 SPF、DKIM、DMARC 记录是否正确。如果记录都对,可能是 IP 段信誉问题,考虑换一个 IP 段的 VPS。

能收邮件但发不出去——大概率是 25 端口被云服务商封了,提交工单申请解封或改用 587 端口。

ClamAV 启动失败——内存不足,关掉 ClamAV 改用 Rspamd。

总结与下一步

自建企业邮箱五步:准备 VPS 和域名 → 配置 DNS → 安装 Docker-Mailserver → 生成 DKIM 并配置 SSL → 客户端连接。顺利的话 40 分钟就能让第一封邮件收发成功。

自建邮箱虽然省钱(一台 Hostease VPS 主机 每月几十块),但维护成本不可忽视——你需要关注 IP 信誉、处理退信、定期备份。团队超过 50 人或对送达率有严格要求的话,建议搭配商业邮件网关服务。

更多 VPS 运维和 Docker 部署教程,请访问 服务器相关博客

发表评论