跳到主要内容

部署到生产:硬件配置与域名 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、MinIO)。下表为建议起步值,按邮箱规模选档:

场景档位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 与云盘建议企业版 落到 MinIO/S3 对象存储,本地盘只保留热数据。

网络与端口

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

端口用途开放范围
25SMTP(服务器间收信)对公网入站;出站见下文说明
465 / 587客户端发信(SMTPS / Submission)对公网(供邮件客户端)
110 / 995POP3 / POP3S对公网(如使用 POP3)
143 / 993IMAP / IMAPS对公网(供邮件客户端)
4190ManageSieve(过滤器同步)对公网(如客户端管理 Sieve)
80 / 443网关:Web 入口 + ACME 自动证书对公网
8081 / 8082 / 8083后端 API / 管理台 / Webmail仅内网或经网关反代,不建议对公网裸露

云厂商出站 25 端口通常默认封锁(防垃圾邮件):要么向云厂商申请解封, 要么在管理台配置外部 SMTP 中继(smarthost,支持 SASL 认证),出站邮件 经中继投递;转发场景由引擎自动做 SRS 改写,回信不会退到你的域。

域名 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.com企业版 Outlook / Exchange ActiveSync 自动发现可选

几点说明:

  • DKIM:在管理控制台「域名 → DKIM」一键生成密钥,页面直接给出 完整记录名与记录值,复制到 DNS 即可。选择器默认 dkimMAILEZ_DKIM_SELECTOR 可改),记录名形如 dkim._domainkey.example.com。 重新生成即轮换密钥(切换窗口期间在途邮件可能 DKIM 失败,属预期)。
  • SPFa 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.comdig TXT dkim._domainkey.example.com), 管理台 DKIM 状态会随 DNS 生效变为已验证;再从外部邮箱(Gmail、 QQ 邮箱等)互通一封测试信,查看对方显示的 Authentication-Results 是否 spf=pass dkim=pass dmarc=pass。也可用在线邮件健康检测服务 做一次综合体检。

上线检查清单

  • 服务器满足配置建议,NTP 已启用,Docker + Compose v2 就绪
  • 公网 IP 就绪,出站 25 已解封或已配置中继
  • mailez.env 已设置 MAILEZ_SECRET_KEY / MAILEZ_STACK_SECRET / MAILEZ_DOMAIN / MAILEZ_HOSTNAMES(生产拒绝占位密钥启动)
  • DNS:A / MX / SPF / DKIM / DMARC 已生效,PTR 已在云厂商配置
  • 端口:邮件端口对公网开放,管理端口不对公网裸露
  • TLS:MAILEZ_TLS=letsencrypt(或自备证书),465/993/995 隐式 TLS 可握手
  • 管理员账号已创建(mailez-seed),默认口令已修改
  • 备份:配置导出 + 引擎 backup(KV+blob 全量导出)纳入例行运维
  • 企业版:MAILEZ_LICENSE_FILE 授权文件已挂载,概览页显示授权正常

规模选型与横向扩容的运维细节见仓库 docs/scaling.md;升级流程见 docs/upgrades.mddocs/rollout-runbook.md