本指南针对在运行 Nginx Proxy Manager (NPM) 和 Portainer 的 VPS 上安装 Mailcow: Dockerized 进行了优化。它包含了针对重定向循环 (Redirect Loops) 和 504 Gateway Timeout 错误等常见问题的修复。.

mailcow-architecture
Mailcow 安装指南(最终版本)

1. 前提条件

  • 预装了 Docker 和 Docker Compose 的 VPS。.
  • 域名: mail.khaisanfood.vn (指向 VPS IP)。.
  • Nginx Proxy Manager 正在 Docker 容器中运行。.

DNS记录

类型姓名ValueProxy Status
Amail您的 VPS IPDNS Only
CNAMEautodiscovermail.khaisanfood.vnDNS Only
CNAMEautoconfigmail.khaisanfood.vnDNS Only
MX@mail.khaisanfood.vnPriority 10
TXT@v=spf1 mx ~all

2. 安装步骤

第 1 步:克隆 Mailcow

cd /opt
git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized

第 2 步:生成配置

./generate_config.sh
Hostname: mail.khaisanfood.vn
Timezone: Asia/HoChiMinh
ClamAV: Y (如果 RAM > 4GB) 或 N。.

第 3 步:配置 mailcow.conf (重要)

编辑配置以避免冲突和循环。.

nano mailcow.conf

修改以下变量:

  • 防止重定向循环:
    HTTP_REDIRECT=n
    (我们让 Nginx Proxy Manager 处理 HTTPS,因此请关闭 Mailcow 的内部重定向)。.
  • 绑定到所有接口(以便 NPM 可以访问):

    HTTP_BIND=0.0.0.0

    HTTPS_BIND=0.0.0.0

  • 更改端口(以避免 80/443 冲突):

    HTTP_PORT=8080

    HTTPS_PORT=8443

  • 避免 IP 冲突(修复 “Pool overlaps” 错误):

    IPV4_NETWORK=192.168.201

mailcow-installation-terminal
Mailcow 安装指南(最终版本)

第 4 步:设置防火墙(修复 504 错误)

确保 Docker 容器可以相互通信。.

ufw allow from 172.16.0.0/12 to any

第 5 步:启动 Mailcow

docker compose pull
docker compose up -d

3. 配置 Nginx Proxy Manager

访问 Nginx Proxy Manager 并添加新的 Proxy Host。.

Details 选项卡

  • Domain Names: mail.khaisanfood.vn
  • Scheme: http (重要!通过 HTTP 连接)
  • Forward Hostname / IP: 172.17.0.1
    (这是标准的 Docker Gateway IP。检查 ip addr show docker0 以确认)。.
  • Forward Port: 8080
  • Cache Assets: Disabled
  • Block Common Exploits: Enabled

SSL 选项卡

  • SSL Certificate: 请求新的 Let's Encrypt 证书。.
  • Force SSL: Enabled.
  • HTTP/2 Support: Enabled.

点击 Save。现在您可以访问 https://mail.khaisanfood.vn.

ssl-security
Mailcow 安装指南(最终版本)

4. 安装后操作

同步 SSL 证书(用于邮件客户端)

NPM 处理 Web SSL,但 Mailcow 需要 SMTP/IMAP 证书。您需要从宿主机上的 NPM Docker 卷中复制它们。.

查找您的 NPM 证书 ID:检查 NPM 仪表盘或在目录中查找。例如主机路径: /var/lib/docker/volumes/nginx-proxy-managernpmletsencrypt/_data/live/npm-21 (id 21 因域名而异)。.

同步命令:

# 更新此路径以匹配您在上方找到的主机路径
NPMCERTPATH="/var/lib/docker/volumes/nginx-proxy-managernpmletsencrypt/_data/live/npm-21"
cp "$NPMCERTPATH/fullchain.pem" /opt/mailcow-dockerized/data/assets/ssl/cert.pem
cp "$NPMCERTPATH/privkey.pem" /opt/mailcow-dockerized/data/assets/ssl/key.pem
cd /opt/mailcow-dockerized
docker compose restart postfix-mailcow dovecot-mailcow nginx-mailcow

重置 Admin 密码

如果 admin / moohoo 不起作用:

cd /opt/mailcow-dockerized/helper-scripts
bash mailcow-reset-admin.sh

DNS / DKIM

登录 Mailcow UI -> Configuration -> Mail Setup -> DNS 以获取 DKIM 记录并将其添加到您的 DNS 提供商。.

5. 添加额外域名 (多域名设置)

您可以在同一台服务器上托管多个电子邮件域名(例如: @dpsmedia.vn)。.

A. 在 Mailcow 中添加域名

  • 以管理员权限登录 Mailcow UI。.
  • 进入 Configuration -> Mail Setup -> Domains。.
  • 点击 Add Domain。.
  • 域名: dpsmedia.vn (或您的新域名)。.
  • 点击 Add Domain 并重启 SOGo。.

B. 新域名的 DNS (dpsmedia.vn)

进入 dpsmedia.vn 的 DNS 提供商并添加这些记录。重要:将它们指向您当前的邮件服务器 URL (mail.khaisanfood.vn).

类型姓名Value状态
MX@mail.khaisanfood.vnPriority 10
TXT@v=spf1 mx include:mail.khaisanfood.vn ~all
CNAMEautodiscovermail.khaisanfood.vnDNS Only
CNAMEautoconfigmail.khaisanfood.vnDNS Only
TXTdkim._domainkey(从 Mailcow UI -> DNS 复制值)
TXT_dmarcv=DMARC1; p=none;

(您不需要新的 IP 地址。所有内容都通过主 IP)。.

C. (可选) 通过 mail.dpsmedia.vn 访问 Mailcow UI

如果您想通过 https://mail.dpsmedia.vn:

访问管理界面,请编辑配置:

nano mailcow.conf
ADDITIONALSERVERNAMES=mail.dpsmedia.vn
docker compose up -d

Nginx Proxy Manager: 复制与 mail.khaisanfood.vn.

相同的设置。D. 额外域名的 SSL 证书

选项 1: (推荐) 使用 mail.khaisanfood.vn 作为收发服务器。.

选项 2: (高级) 在配置中启用 ENABLESSLSNI=y ,创建单独的 SSL 目录并将新证书同步到其中。.

6. 修复邮件发送问题 (Gmail 屏蔽)

如果遇到错误 550-5.7.1, ,意味着您的 IP 信誉较低。.

A. 设置反向 DNS (PTR) – 强制性

进入 VPS 提供商的仪表板,将您的 IP 的 PTR 记录设置为 mail.khaisanfood.vn.

B. 使用 SMTP 中继

如果 IP 被列入黑名单,请使用 Amazon SES、SendGrid 或 Mailgun 作为中继。.

7. 卸载指南

警告:此操作将删除所有电子邮件数据。.

cd /opt/mailcow-dockerized
docker compose down -v
cd /opt
rm -rf mailcow-dockerized

在 NPM 中删除 Proxy Host。.

DPS.MEDIA