mailcow: dockerized 部署指南:4 条命令跑通完整邮件服务
2026/9/12 6:34:44 网站建设 项目流程

mailcow: dockerized 部署指南:4 条命令跑通完整邮件服务

【免费下载链接】mailcow-dockerizedmailcow: dockerized - 🐮 + 🐋 = 💕项目地址: https://gitcode.com/GitHub_Trending/ma/mailcow-dockerized

在一台干净的 Linux 服务器上进行克隆、生成配置、拉起容器,mailcow: dockerized 就能以一组 Docker 容器的形态提供完整邮件收发能力:Postfix 负责投递,Dovecot 负责 IMAP 存储,Rspamd 负责垃圾与病毒过滤,全部由一个 Web 界面统一配置。它适合想自建邮件服务、又不想逐个手工编译安装组件的个人站长和中小团队。

它解决什么问题,适合谁

mailcow 把一套邮件系统需要的十几个组件打包进 docker-compose.yml,每个组件独立成容器,版本组合由上游统一维护。对你来说,它解决的是三件麻烦事:

  • 组件依赖与版本兼容:不用自己处理 Postfix、Dovecot、Rspamd 之间的升级顺序,容器镜像版本由 compose 文件锁定。
  • 配置分发:所有服务的配置文件集中在data/conf/目录,改动后重启对应容器即可生效。
  • 运维入口统一:域名、邮箱、配额、垃圾过滤规则都在同一个 Web 界面操作,不需要记住每个组件的命令行。

如果服务器内存低于 2.5 GiB,注意脚本会主动建议关闭 ClamAV 病毒扫描,避免内存耗尽,这一点在 generate_config.sh 里有明确判断。

部署前需要确认什么

部署卡住大多源于环境不达标,先花两分钟对照下面清单:

  • 操作系统为 Linux,已安装 Docker 且版本不低于 24(generate_config.sh会硬性检查,低于 24 直接退出)。
  • 已安装 Docker Compose 插件或独立版docker-compose,脚本会自动探测并使用其中一种。
  • 内存至少 4 GiB 比较稳妥;低于 2.5 GiB 时 ClamAV 会被建议禁用。
  • 你有一个能解析的域名,并计划给 mailcow 分配一个完整限定主机名(FQDN,形如 mail.example.com),脚本要求必须带子域,裸域只有警告提示。
  • 服务器可访问公网,容器镜像需要在线拉取。

验证环境就绪只需一条命令:运行docker version,确认 Client 与 Server 版本均大于等于 24,且 Compose 插件存在。

上手部署:拉代码、生成配置、拉起容器

拉取代码

把仓库克隆到服务器,进入目录。这是后文所有脚本的执行位置。

git clone https://gitcode.com/GitHub_Trending/ma/mailcow-dockerized cd mailcow-dockerized

预期结果:目录下出现generate_config.shdocker-compose.ymlupdate.sh等文件。脚本还会让你选择使用哪个分支:master 是稳定版,nightly 是测试版,生产环境选 master 即可。

生成配置

generate_config.sh依赖一个.env符号链接指向mailcow.conf,先建链接再运行脚本:

ln -s mailcow.conf .env ./generate_config.sh

预期结果:脚本依次询问主机名(FQDN)、时区、是否禁用 ClamAV、使用哪个分支,最后生成权限为 600 的mailcow.conf文件。数据库密码、Redis 密码都会随机生成并写入其中,无需手动编辑。若看到 "is not a FQDN" 报错,说明主机名填成了裸域,重新运行脚本修正即可。

启动整组容器

docker compose up -d

预期结果:首次运行会拉取全部镜像,耗时取决于带宽;随后postfix-mailcowdovecot-mailcownginx-mailcowmysql-mailcowrspamd-mailcowwatchdog-mailcow等一批容器逐个进入 running 状态。

启动后如何验证部署成功

三个可检查的信号,全部满足才算部署完成:

  • docker compose ps输出中没有 exited 或 restarting 状态的容器,核心服务都在 running。
  • 浏览器访问https://你的主机名,出现登录页。此时用默认管理员账号admin、密码moohoo可以登录(该默认值写在 generate_config.sh 的配置模板注释里),登录后立即改掉它。
  • 等待几分钟后再看一次容器状态仍全部 running,说明 watchdog 没有反复拉起崩溃的服务。

另外可以在管理界面的"系统"页查看各组件版本,确认与 docker-compose.yml 中锁定的镜像版本一致。

三个最值得先用起来的功能

Web 管理界面。场景:给新同事开邮箱、加新域名。入口:登录后左侧的域名与邮箱管理(界面代码位于 data/web/admin/)。效果:建域名时系统会列出需要配置的 DNS 记录,建邮箱时直接设置配额,全程无命令行。

Rspamd 垃圾过滤与隔离区。场景:确认某封被拦邮件是不是误杀。入口:管理界面的隔离区页面,规则配置存放在 data/conf/rspamd/。效果:进入隔离区的邮件可在界面查看完整头信息,一键标记放行或拉黑,调整后的规则立即作用于新邮件。

内置备份恢复脚本。场景:升级前或迁移前留后路。入口:helper-scripts/backup_and_restore.sh。效果:运行./helper-scripts/backup_and_restore.sh backup all /backup/path后,vmail 邮件数据、数据库、Redis、Rspamd、Postfix 会被打包成带时间戳的 zstd 归档,恢复时按数据集选择,支持只恢复邮件目录而不停库。

卡住了怎么办:按症状排查

症状一:generate_config.sh 提示.env符号链接不指向 mailcow.conf。运行ls -l .env mailcow.conf检查链接是否存在;修复方向:必须在 mailcow 安装目录内先执行ln -s mailcow.conf .env,且确认没有把.env当成普通文本文件编辑过。

症状二:个别容器反复重启,watchdog 不断报警。先运行docker compose ps锁定问题容器,再用docker compose logs --tail=50加容器名查看日志;修复方向:常见原因是内存不足导致 ClamAV 进程被 OOM 杀掉,把mailcow.confSKIP_CLAMD改为y后运行docker compose up -d重建;IPv6 配置错误也会引发类似问题,可在 compose 文件里关闭 IPv6。

症状三:update.sh 更新停在合并代码或报错退出。运行git status查看本地改动;修复方向:更新前务必备份,脚本本身会在合并前保存 diff;如果只想清理过期镜像,单独运行./update.sh --gc;报错后按脚本提示先docker compose up -d恢复原状态再排查。

跑起来之后:按频率做最小维护

首次(上线当天):改掉默认管理员密码;执行一次./helper-scripts/backup_and_restore.sh backup all建立首个恢复点;在mailcow.conf里给 watchdog 配置通知邮箱,让容器异常时能收到邮件。

每周:定时备份一次(把备份命令加入 crontab);运行docker compose ps扫一遍容器状态;用df -h确认邮件数据所在分区未接近写满。

每月:先备份,再运行./update.sh拉取稳定版更新,脚本会合并代码、拉取新镜像并自动重启;同时确认 ACME 容器已为新域名自动签发证书,管理界面里查看证书到期时间即可。

mailcow 的设计把"装得起来"这件事压到了最小成本,剩下的精力可以放在域名、DNS 与日常备份上。想继续深入,可以从 generate_config.sh 读懂全部配置项,或从 helper-scripts/mailcow-reset-admin.sh 这类运维脚本入手,它们都是可直接运行的实现。

【免费下载链接】mailcow-dockerizedmailcow: dockerized - 🐮 + 🐋 = 💕项目地址: https://gitcode.com/GitHub_Trending/ma/mailcow-dockerized

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询