Docker 部署 Poste.io 邮件服务器

部署 Poste.io 邮件容器,配置数据目录、邮件端口与 HTTPS 管理入口。

前言

自建邮件服务可以不受发件量限制,批量发件成本更低,但部署相对复杂,而且容易进垃圾箱。不过现在越来越多的服务商已经开发好了产品,支持一键部署等方式,极大降低了部署和使用难度。

关于Poste

Poste.io 是一款提供免费与付费版本的邮件服务软件,可以很方便的搭建:SMTP + IMAP + POP3 + 反垃圾邮件 + 防病毒 + Web 管理 + Web 电子邮件,支持以下特性。 SPF、DKIM、DMARC、SRS 的原生实现,带有简单的向导 用于检测木马、病毒、恶意软件的防病毒引擎 ( ClamAV ) 内置垃圾邮件过滤器( RSPAMD ) HTTPS 上的Webmail 客户端(Roundcube) 通过Sieve 脚本进行电子邮件重定向、自动回复和其他过滤(电子邮件所有者管理,每个操作都可以编写脚本) 用于限制邮箱空间或电子邮件数量的配额 系统管理员、域管理员、电子邮件所有者具有不同权限的Web 管理。 内置Microsoft 产品的自动发现功能,Thunderbird… 帮助正确设置域和邮件服务器的诊断 SMTP - 端口 25、465 (TLS)、587 POP3 - 端口 110、995 (TLS) IMAP - 端口 143、993 (TLS) SSL TLS无处不在!没有个人数据、电子邮件、登录信息通过互联网未加密。 默认情况下,所有密码都存储为加盐SHA512哈希(5000 轮)。攻击者将很难破解您的密码。 整个邮件服务器容器由 Docker 与其他应用程序隔离。

准备工作

一台VPS,有独立IP 支持25端口及邮件发送 建议内存1Gb以上 干净的IP,没有被墙,没有被标记为垃圾IP 提前安装好Docker Docker 安装步骤见 Linux 安装 Docker Engine 与 Docker Compose。

已有 Postfix 时处理端口占用(CentOS / YUM 示例)

已有 Postfix 占用邮件端口、且准备由 Poste.io 接管邮件服务时,可以卸载 Postfix。未安装 Postfix 的环境跳过此步:

1
yum -y autoremove postfix

一键快速部署命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
docker run -d \
    -p 8888:8888 -p 25:25 -p 110:110 -p 143:143 -p 465:465 -p 587:587 -p 993:993 -p 995:995 -p 4190:4190 \
    -e "HTTPS_PORT=8888" \
    -e TZ=Asia/Shanghai \
    -e "DISABLE_CLAMAV=TRUE" \
    -e "DISABLE_RSPAMD=TRUE" \
    -v ~/mail-data:/data \
    --name "mailserver" \
    -h "mail.yourdomain.com" \
    --restart unless-stopped \
    -t analogic/poste.io

部署后访问 https://IP:8888/,根据提示完成初始化设置。本例通过 DISABLE_CLAMAV 和 DISABLE_RSPAMD 关闭病毒扫描与垃圾邮件过滤,以减少资源占用。

参数对应上面的部署命令:

参数作用
-p 8888:8888、HTTPS_PORT=8888将 HTTPS 管理页面设为 8888 端口并映射到宿主机
DISABLE_CLAMAV=TRUE禁用 ClamAV 病毒扫描
DISABLE_RSPAMD=TRUE禁用 Rspamd 垃圾邮件过滤
TZ=Asia/Shanghai使用上海时区
-v ~/mail-data:/data将邮件数据持久化到宿主机 ~/mail-data
-h mail.yourdomain.com邮件服务器域名,替换为自己的域名
--restart unless-stopped容器退出时自动重启,手动停止后保持停止状态

修复某些页面HTTPS端口变443问题

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
docker exec mailserver sh -lc '
cp -n /etc/nginx/fastcgi_params /etc/nginx/fastcgi_params.bak

sed -i "s|HTTP_HOST        \\\$host;|HTTP_HOST        \\\$host:\\\$server_port;|" \
    /etc/nginx/fastcgi_params

grep -n "HTTP_HOST" /etc/nginx/fastcgi_params

nginx -t && nginx -s reload
'

参考:Poste.io 部署参数。

使用 Hugo 构建
主题 Stack 由 Jimmy 设计