部署到生产:硬件配置与域名 DNS
快速开始带你把系统跑起来;本文补充两件上生产前必须做的事: 准备什么样的服务器,以及给邮件域名配哪些 DNS 记录。
硬件与系统要求
操作系统与软件
- 生产部署:Linux 服务器(x86_64 / aarch64 均可)+ Docker(Compose v2)。
四个生产档位(ce / ee / multi / ha)均为全容器化交付,
由
mailezctl统一管理,也可以用发行包的install.sh交互式安装 (预检 Docker、Compose v2、openssl、curl)。 - 开发体验:引擎与控制面在 Linux / macOS / Windows 三平台原生运行, 开发机不受限;Go 工具链(1.22+)只在从源码构建镜像时需要。
- 时间同步:启用 NTP。多实例 HA / 多活集群的租约机制对时钟偏差敏感, 单机部署也建议保持时间同步(定时发送、日志排障都依赖准确时钟)。
配置建议
邮件栈本身很轻:Mailezine 引擎单实例空闲内存约 24 MiB、万人负载模型下 峰值约 34 MiB(内部基准)。整套系统的资源大头在控制面与基础组件 (MySQL、TiDB、Rspamd、RustFS)。下表为建议起步值,按邮箱规模选档:
| 场景 | 档位 | vCPU | 内存 | 磁盘(SSD) |
|---|---|---|---|---|
| 个人 / 试用 / 演示 | dev 或 ce | 1–2 | 2 GiB | 20 GB |
| 小团队(≤ 50 邮箱) | ce | 2 | 4 GiB | 100 GB |
| 中型组织(≤ 500 邮箱) | ce 或 ee 单机 | 4 | 8–16 GiB | 按配额估算 |
| 规模化(ee + multi/ha) | 组件分节点部署 | 每节点 4+ | 每节点 8 GiB+ | 按配额估算 |
磁盘容量估算:每个邮箱默认配额 1 GiB(可在管理台按用户或按域调整), 再叠加全文搜索索引、日志与附件中转的余量。正文大 Blob 与云盘建议企业版 落到 S3 兼容对象存储(默认 RustFS,亦支持 MinIO),本地盘只保留热数据。
网络与端口
服务器需要一个公网 IP,并开放以下端口:
| 端口 | 用途 | 开放范围 |
|---|---|---|
| 25 | SMTP(服务器间收发信,见下方专节) | 对公网入站必须;出站需解封或走中继 |
| 465 / 587 | 客户端发信(SMTPS / Submission) | 对公网(供邮件客户端) |
| 110 / 995 | POP3 / POP3S | 对公网(如使用 POP3) |
| 143 / 993 | IMAP / IMAPS | 对公网(供邮件客户端) |
| 4190 | ManageSieve(过滤器同步) | 对公网(如客户端管理 Sieve) |
| 80 / 443 | 网关:Webmail、/admin 管理台、/dav 同步 + ACME 自动证书 | 对公网 |
| 8081 / 8082 / 8083 | 后端 API / 管理台 / Webmail(调试端口) | 默认仅绑定 127.0.0.1,不对公网开放;正式访问一律走网关 80/443 |
端口 25:对内与对外都不可替代
25 端口是邮件服务器的生命线,收信和发信都绕不开它。 客户端可以用 465/587 发信、993 收信,但服务器之间投递邮件只走 25——没有替代端口, 也没有"改个端口绕过去"的选项。
对内(入站):全世界给你投信的邮件服务器都按 DNS 的 MX 记录找到
mail.example.com,然后连接它的 25 端口。入站 25 不通,你的域名就
收不到任何外部来信——对方服务器会重试几小时后投递失败退信,而你这边
没有任何报错,问题极难察觉。
对外(出站):你的服务器把邮件投给对方,同样是直连对方 MX 的 25 端口。出站 25 被封,所有外发邮件发不出去,只能在出站队列里 积压重试。
两个最常见的坑:
- 云厂商默认封锁出站 25(防垃圾邮件)。要么向云厂商工单申请解封 (通常要求配置 PTR 反向解析、说明合规用途),要么在管理台配置 外部 SMTP 中继(smarthost,支持 SASL 认证),出站邮件经中继投递; 转发场景由引擎自动做 SRS 改写,回信不会退到你的域。购买国内云服务器 前建议先确认该厂商是否支持解封出站 25。
- 云服务器 IP 常被 Spamhaus PBL 收录。PBL 是"此类 IP 段不应直发邮件" 的策略性收录,不是垃圾邮件证据——不影响收信,但直连出站可能被 对方服务器拒收。处理方式:申请移除,或同样走外部中继。管理台 「健康」页会自动查询 ZEN 黑名单,把 PBL 单列为提醒项并给出指引。
上线前自检端口 25:
# 在服务器之外的网络(如本地电脑)验证入站 25 可达
telnet mail.example.com 25
# 或
nc -vz mail.example.com 25
# 在服务器上验证出站 25 未被封(直连任意公网邮件主机的 25)
nc -vz gmail-smtp-in.l.google.com 25
再跑一遍管理台「健康」页:MX 指向、黑名单状态、引擎/数据库/证书探测 一屏全绿,端口与 DNS 就绪才算到位。
域名 DNS 配置
以邮件域 example.com、邮件主机 mail.example.com(即
MAILEZ_HOSTNAMES)为例。DNS 记录全部在你的域名服务商处添加:
| 类型 | 主机记录 | 记录值 | 作用 | 必需性 |
|---|---|---|---|---|
| A / AAAA | mail | 服务器公网 IP | 客户端接入与 MX 指向的主机名;ACME 证书签发也依赖它 | ✅ 必需 |
| MX | @ | mail.example.com(优先级 10) | 他方服务器投递 *@example.com 的路由依据 | ✅ 必需 |
| TXT(SPF) | @ | v=spf1 a mx -all | 声明"只有本主机有权替我发信",收件方据此防伪造 | ✅ 强烈建议 |
| TXT(DKIM) | <选择器>._domainkey | v=DKIM1; k=rsa; p=<公钥> | 出站签名公钥;管理台一键生成后复制完整记录 | ✅ 强烈建议 |
| TXT(DMARC) | _dmarc | v=DMARC1; p=quarantine; rua=mailto:postmaster@example.com | 告知收件方 SPF/DKIM 失败时的处理策略与报告邮箱 | ✅ 强烈建议 |
| PTR(rDNS) | 服务器 IP | mail.example.com | 反向解析;在云厂商/运营商处设置,不归 DNS 服务商管 | ⭐ 强影响送达率 |
| CNAME(可选) | autodiscover | mail.example.com | Outlook 等 Microsoft 客户端自动发现 | 可选 |
| CNAME(可选) | autoconfig | mail.example.com | Thunderbird 等 Mozilla 系客户端自动配置 | 可选 |
| CNAME(可选) | mta-sts | mail.example.com | MTA-STS 策略主机 | 可选 |
| TXT(可选) | _mta-sts | v=STSv1; id=20260101; max_age=86400 | MTA-STS 传输安全策略(系统默认 testing 档,仅报告) | 可选 |
| TXT(可选) | _smtp._tls | v=TLSRPT; rua=mailto:postmaster@example.com | TLS 送达报告(TLSRPT),收件方按此回报 TLS 失败 | 可选 |
几点说明:
-
DNS 向导:管理台「域名」页为每个域名内置 DNS 向导,自动列出全部 9 条记录的主机名与记录值(DKIM 直接取当前公钥),并逐条实时核验 「已配置 / 缺失 / 不一致」——照抄即可,无需翻文档。
-
DKIM:在管理控制台「域名 → DKIM」一键生成密钥,页面直接给出 完整记录名与记录值,复制到 DNS 即可。选择器默认
dkim(MAILEZ_DKIM_SELECTOR可改),记录名形如dkim._domainkey.example.com。 重新生成即轮换密钥(切换窗口期间在途邮件可能 DKIM 失败,属预期)。 -
SPF:
a mx覆盖"邮件主机 A 记录 + MX 指向"两种发信路径;若还经 中继商发信,按中继商文档追加include:。收信方向上,引擎对每一封 入站邮件做 SPF / DKIM / DMARC 全量验证并输出 Authentication-Results, 与你是否发布这些记录无关——发布它们保护的是你发出去的邮件。 -
PTR 反向解析:多数收件方的反垃圾体系(含 mailezine 内置信誉评分) 会核对发信 IP 的 PTR 与 EHLO 主机名一致性。没有 PTR 的公网 IP 发信 很容易进垃圾箱,上生产前务必在云厂商控制台把它配上。
-
TLS 证书:
MAILEZ_TLS=letsencrypt时网关自动申请续期(要求 80/443 可达且mail.example.com的 A 记录已生效);也可以自行放置cert.pem/key.pem(见仓库deploy/certs/README.md)。465/993/995 隐式 TLS 复用同一套证书。 -
生效验证:记录保存后用
dig/nslookup确认已全球生效 (dig MX example.com、dig TXT dkim._domainkey.example.com), 管理台 DKIM 状态会随 DNS 生效变为已验证;再从外部邮箱(任意主流邮箱)互通一封测试信,查看对方显示的 Authentication-Results 是否spf=pass dkim=pass dmarc=pass。也可用在线邮件健康检测服务 做一次综合体检。
上线检查清单
- 服务器满足配置建议,NTP 已启用,Docker + Compose v2 就绪
- 公网 IP 就绪,入站 25 对公网开放、出站 25 已解封或已配置中继 (见端口 25 专节)
-
mailez.env已设置MAILEZ_SECRET_KEY/MAILEZ_STACK_SECRET/MAILEZ_DOMAIN/MAILEZ_HOSTNAMES(生产拒绝占位密钥启动) - DNS:A / MX / SPF / DKIM / DMARC 已生效,PTR 已在云厂商配置; autoconfig / autodiscover / MTA-STS 记录按需发布
- 端口:邮件端口对公网开放,管理端口(8081–8083)保持仅本机回环,
正式访问走网关 80/443(
/admin、/dav) - TLS:
MAILEZ_TLS=letsencrypt(或自备证书),465/993/995 隐式 TLS 可握手 - 管理台「健康」页全绿:MX / SPF / DMARC / DKIM 逐项通过,黑名单无 SBL/XBL 命中(PBL 提醒按指引处理),证书与系统探测正常
- 管理员账号已创建(
mailez-seed),默认口令已修改,两步验证已开启 - 备份:配置导出 + 引擎
backup(KV+blob 全量导出)纳入例行运维 - 企业版:
MAILEZ_LICENSE_FILE授权文件已挂载,概览页显示授权正常
规模选型与横向扩容的运维细节见仓库 docs/scaling.md;升级流程见
docs/upgrades.md 与 docs/rollout-runbook.md。