跳到主要内容

部署到生产:硬件配置与域名 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 或 ce1–22 GiB20 GB
小团队(≤ 50 邮箱)ce24 GiB100 GB
中型组织(≤ 500 邮箱)ce 或 ee 单机48–16 GiB按配额估算
规模化(ee + multi/ha)组件分节点部署每节点 4+每节点 8 GiB+按配额估算

磁盘容量估算:每个邮箱默认配额 1 GiB(可在管理台按用户或按域调整), 再叠加全文搜索索引、日志与附件中转的余量。正文大 Blob 与云盘建议企业版 落到 S3 兼容对象存储(默认 RustFS,亦支持 MinIO),本地盘只保留热数据。

网络与端口​

服务器需要一个公网 IP,并开放以下端口:

端口用途开放范围
25SMTP(服务器间收发信,见下方专节)对公网入站必须;出站需解封或走中继
465 / 587客户端发信(SMTPS / Submission)对公网(供邮件客户端)
110 / 995POP3 / POP3S对公网(如使用 POP3)
143 / 993IMAP / IMAPS对公网(供邮件客户端)
4190ManageSieve(过滤器同步)对公网(如客户端管理 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 被封,所有外发邮件发不出去,只能在出站队列里 积压重试。

两个最常见的坑:

  1. 云厂商默认封锁出站 25(防垃圾邮件)。要么向云厂商工单申请解封 (通常要求配置 PTR 反向解析、说明合规用途),要么在管理台配置 外部 SMTP 中继(smarthost,支持 SASL 认证),出站邮件经中继投递; 转发场景由引擎自动做 SRS 改写,回信不会退到你的域。购买国内云服务器 前建议先确认该厂商是否支持解封出站 25。
  2. 云服务器 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 / AAAAmail服务器公网 IP客户端接入与 MX 指向的主机名;ACME 证书签发也依赖它✅ 必需
MX@mail.example.com(优先级 10)他方服务器投递 *@example.com 的路由依据✅ 必需
TXT(SPF)@v=spf1 a mx -all声明"只有本主机有权替我发信",收件方据此防伪造✅ 强烈建议
TXT(DKIM)<选择器>._domainkeyv=DKIM1; k=rsa; p=<公钥>出站签名公钥;管理台一键生成后复制完整记录✅ 强烈建议
TXT(DMARC)_dmarcv=DMARC1; p=quarantine; rua=mailto:postmaster@example.com告知收件方 SPF/DKIM 失败时的处理策略与报告邮箱✅ 强烈建议
PTR(rDNS)服务器 IPmail.example.com反向解析;在云厂商/运营商处设置,不归 DNS 服务商管⭐ 强影响送达率
CNAME(可选)autodiscovermail.example.comOutlook 等 Microsoft 客户端自动发现可选
CNAME(可选)autoconfigmail.example.comThunderbird 等 Mozilla 系客户端自动配置可选
CNAME(可选)mta-stsmail.example.comMTA-STS 策略主机可选
TXT(可选)_mta-stsv=STSv1; id=20260101; max_age=86400MTA-STS 传输安全策略(系统默认 testing 档,仅报告)可选
TXT(可选)_smtp._tlsv=TLSRPT; rua=mailto:postmaster@example.comTLS 送达报告(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。