如何自建一套企业级邮件系统:mailcow Docker 部署完整教程
【免费下载链接】mailcow-dockerizedmailcow: dockerized - 🐮 + 🐋 = 💕项目地址: https://gitcode.com/GitHub_Trending/ma/mailcow-dockerized
mailcow(mailcow: dockerized)是一套基于 Docker 的企业级邮件服务器,把 Postfix、Dovecot、Rspamd、ClamAV、SOGo Webmail 等十余个组件打包成一组协调工作的容器。本文面向第一次自建邮件系统的读者:先看清部署完成后的系统形态,再倒推安装过程,最后覆盖反垃圾机制、备份恢复与日常排障,适合个人站长和中小团队参考。
部署完成后的 mailcow 邮件服务器是什么样子
跑完之后,你手里是这样一套东西:一个用域名访问的 HTTPS 管理后台、一组各自独立运行的容器,以及对外提供的标准邮件端口。
服务容器与职责
mailcow 的核心组件都以独立容器运行(服务名带-mailcow后缀),关键对外端口如下:
| 容器 | 职责 | 常用端口 |
|---|---|---|
| nginx | 反向代理,统一入口 | 80、443 |
| postfix | 邮件收发(SMTP) | 25、465、587 |
| dovecot | 邮件存储与 IMAP/POP3 | 993、995、143 |
| rspamd | 反垃圾邮件过滤 | 内部调用 |
| clamd | ClamAV 病毒扫描 | 内部调用 |
| sogo | Webmail / Exchange ActiveSync | 经 443 |
| mysql / redis | 账号数据存储 / 会话缓存 | 13306、7654 |
另有 unbound(内置 DNS 解析)、acme(证书签发)、watchdog(健康监控)、netfilter(防火墙规则下发)等辅助容器,在 docker-compose.yml 中可以逐一查看。
默认入口与初始账号
首次启动后,用https://你的域名打开管理后台,系统预置管理员账号admin,默认密码moohoo(该默认值直接写在 generate_config.sh 的配置模板里)。登录后第一件事就是改掉这个密码——它没有任何安全含义,只用于让你能进后台。
用 Docker 四步部署 mailcow 邮件服务器
前提条件
- Linux 服务器,Docker 与 Docker Compose 已安装
- 至少 2GB 内存、20GB 磁盘
- 一个已解析到本机的域名(如
mail.example.com),用于 MX 记录指向
内存小于 4GB 时,ClamAV 病毒扫描默认不会启用,可在配置时或之后通过mailcow.conf里的SKIP_CLAMD=n重新打开。
从拉取代码到启动
git clone https://gitcode.com/GitHub_Trending/ma/mailcow-dockerized cd mailcow-dockerized配置脚本是交互式的,会依次询问主机名(填 FQDN)、时区、是否启用 ClamAV 和 watchdog 监控,完成后生成mailcow.conf与.env:
./generate_config.sh docker compose up -d启动后容器会自行完成初始化:拉取镜像、初始化数据库、生成 DKIM 密钥、申请证书。首次启动耗时较长属正常现象,等到后台可以登录即代表部署成功。
一封邮件的流转路径与四层反垃圾防护
一封外来邮件的完整路径是:Postfix 接收 → Rspamd 做垃圾/病毒判定 → Dovecot 写入邮箱存储 → 客户端通过 IMAP 收取。发出方向则相反,由 Postfix 的 587 端口提交后向外投递。
Rspamd 的判定是多层叠加的:
- 基于 IP 信誉的实时黑名单(RBL)检查
- 贝叶斯学习,根据历史训练数据识别垃圾特征
- 机器学习模型,用于识别新型垃圾邮件变种
- 附件送 ClamAV 扫描,拦截带毒文件
所有反垃圾相关配置集中在data/conf/rspamd/目录,包括local.d/(本地策略)、plugins.d/(插件开关)等子目录;在管理后台也可以直接调整各过滤器权重。
客户端配置方面,mailcow 内置 autodiscover 与 autoconfig 接口(对应 data/web/ 下的 autodiscover.php 等文件),Outlook、Thunderbird 等客户端填写邮箱地址后大多能自动填充 IMAP:993 / SMTP:587 的服务器信息;SOGo 同时提供 Webmail 和 Exchange ActiveSync,手机邮件应用可直接添加。
备份与恢复:数据丢了怎么办
mailcow 自带备份脚本helper-scripts/backup_and_restore.sh,支持按组件或整体备份,备份产物可直接用于恢复。
./helper-scripts/backup_and_restore.sh backup all /backup/path第二个参数可选all、mysql、postfix、rspamd、redis、vmail(用户邮箱数据)、crypt(密钥)。恢复时把第一个参数换成restore即可,目录结构要求与备份时一致。
一个常见的 crontab 写法是每天凌晨 3 点做全量备份:
0 3 * * * /path/to/mailcow/helper-scripts/backup_and_restore.sh backup all /backup/path常见故障排查与日常维护
收不到外部邮件
绝大多数情况是 DNS 记录问题:MX 记录未指向服务器、SPF/DKIM/DMARC 记录缺失或填写错误。后台的 DNS 检查功能(对应 data/web/inc/ 中的 dns_diagnostics 模块)可以逐项核对,按提示补齐记录后再测试。
管理后台无法访问
按顺序检查容器状态与 Nginx 日志,端口是否被防火墙拦截:
docker compose ps docker compose logs --tail=50 nginx-mailcow忘记密码与系统更新
- 管理员密码重置:
./helper-scripts/mailcow-reset-admin.sh - 组件更新:先备份,再执行
./update.sh,脚本会拉取新版本镜像并按提示重启
关于更新节奏,项目采用 staging 与 master 两条主线的分支策略:社区 PR 先进入 staging 分支验证,稳定后再合入 master,这也是官方图所示的提交流程:
日常维护建议每周核对一次:docker compose ps确认容器全部在跑、df -h看磁盘水位、进后台查看邮件队列与系统日志。季度级别做一次备份恢复演练,才能真正保证那份备份可用。
延伸阅读
- 各服务原始配置文件:data/conf/
- 维护脚本(备份、重置、更新):helper-scripts/
- 各容器入口脚本与初始化逻辑:data/Dockerfiles/
【免费下载链接】mailcow-dockerizedmailcow: dockerized - 🐮 + 🐋 = 💕项目地址: https://gitcode.com/GitHub_Trending/ma/mailcow-dockerized
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考