当前位置: 首页 > Linux运维 > Docker > 使用Docker部署mailcow,自建邮局服务(一)

使用Docker部署mailcow,自建邮局服务(一)

发布于:2022-8-14 最后更新:2022-8-16 Docker 16条评论 19,976 views
本站提供Linux服务器运维,自动化脚本编写等服务,如有需要请联系博主微信:xiaozme

在早期的文章中xiaoz分享过《使用Docker搭建poste,自建邮件服务器》,poste这个邮局比较轻量,部署相对简单,适合个人轻度使用。但是从客户的使用反馈来看(xiaoz之前有给客户部署过),大量发件的时候poste不太稳定,很容易出问题。且poste将所有相关依赖服务全部放到一个容器中,并没有使用docker-composer编排多个容器,从而导致稳定性大打折扣。

今天再分享另一个开源的自建邮局服务mailcow,mailcow功能上比poste更加丰富,官方提供docker-composer部署方式,下面和xiaoz一起来安装下mailcow邮件服务吧。

注意:此教程需要掌握一定Linux基础和Docker基础的人士阅读

先决条件

  • 一台VPS,有独立IP,最低配置1C2G,建议2C4G以上,支持发件服务(未屏蔽邮件端口, 请咨询你的服务商),支持PTR反向解析(咨询你的服务商)
  • 操作系统:CentOS、Debian、Ubuntu均可
  • 安装了Docker和docker-composer
  • 一个域名,注册时间越长越好,建议使用主流后缀,如:.com/.net/.org

注意:请务必和你的服务商确认是否支持PTR反向解析,如果不支持的话邮件是很容易进垃圾箱的,就目前xiaoz所了解UltraVPS(EU)是支持PTR解析的,并且自己在后台就可以操作。

如果您还没有安装Docker可以参考:Linux安装Docker与Docker常用命令

如果您还没有安装docker-composer,可以使用下面的命令安装:

#下载docker-composer
curl -L "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#添加执行权限
chmod +x /usr/local/bin/docker-compose
#建立软连接
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

部分CentOS 7系统可能内置了postfix服务,会和mailcow端口冲突,可以先尝试执行下面的命令卸载postfix

#CentOS卸载postfix
yum -y remove postfix
#Debian或者Ubuntu卸载postfix
apt-get remove postfix

设置Linux主机名

假设您的顶级域名为domain.com,那么您的主机名需要设置为mail.domain.commx.domain.com,前缀自己取,反正是需要二级域名。

设置主机名的命令为:

hostnamectl set-hostname mail.domain.com

然后修改/etc/hosts,添加一行hosts解析,就是将mail.domain.com指向到您当前服务器的公网IP,命令如下:

echo '173.0.xx.xxx    mail.domain.com' >> /etc/hosts

部署mailcow

先克隆mailcow代码和脚本:

#CentOS安装Git
yum -y install git
#Debian安装Git
apt-get install git

#克隆mailcow代码
git clone https://github.com/mailcow/mailcow-dockerized

进入代码目录cd mailcow-dockerized执行初始化脚本:./generate_config.sh根据提示设置域名和时区等信息。注意:

  1. 域名要和上面设置的主机名一致,比如mail.domain.com
  2. 如果后续需要修改,可以编辑mailcow.conf这个配置文件

mailcow默认使用了80/443作为WEB端口,如果您的服务器上已经存在WEB服务,可能会导致端口冲突,我们可以修改mailcow.conf这个配置文件,将

HTTP_PORT=80
HTTPS_PORT=443

修改为其它端口,比如修改为:

HTTP_PORT=880
HTTPS_PORT=8443

然后执行下面的命令拉取容器镜像和启动:

#拉取镜像
docker-compose pull
#启动容器
docker-compose up -d

初始化mailcow和添加域名

安装成功后,访问您的IP + 端口进入WEB管理界面,默认用户名:admin,密码为:moohoo

进入后台后点右上方“配置 - 邮箱设置 - 添加域名”

注意:添加域名的时候这里需要填写您的顶级域名domian.com,比如您主机名设置的是mail.domain.com,那么这里添加域名的时候填写domain.com

添加邮箱解析

域名添加完毕后,右侧有个DNS按钮,点击这个按钮会对您的域名DNS进行检测和指引。

不过那个检测有点不准,而且并非所有记录都要添加,下面是必须添加的记录。

主机名记录类型记录值备注
mail.domain.comA您的IP填写你VPS的公网IP
您的IPPTRmail.domain.com可能需要联系服务商添加
domain.comMXmail.domain.com
autodiscover.domain.comCNAMEmail.domain.com
autoconfig.domain.comCNAMEmail.domain.com
domain.comTXTv=spf1 a mx ip4:173.0.xx.xxx ~allIP改成你自己的
dkim._domainkey.domain.comTXT从mailcow后台获取DKIM记录从mailcow后台获取

邮件测试

DNS解析添加完毕后,等待几分钟生效,然后在mailcow后台添加邮箱账号,并登录webmail进行发件测试。

打开https://www.mail-tester.com/这个网站,然后用你的mailcow邮箱发送邮件,发送完毕后查看得分。

满分为10分,如果评分很差,mail-tester会给出提示,建议根据提示进行修正即可。

总结

上述步骤我们仅仅是完成了安装和初始化,其实后续还有很多配置和维护工作要做。比如禁用IPV6、反向代理、配置SSL证书、数据备份与恢复等,有兴趣的可以参考mailcow官方文档完成,后续xiaoz再分享mailcow配置方面的内容。

自建邮局比较复杂且步骤繁多,很多细节问题若处理不好很容易进垃圾箱。非必要情况建议使用第三方企业邮箱即可,除非有特殊需求。自建邮局虽然不受发件量限制,但不建议短时间内发送大量垃圾邮件,否则你的IP或域名很容易被拉黑,最后得不偿失。

如果您也需要自建邮局服务器,可联系我的QQ:446199062或者微信:xiaozme


回复 教书先生 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注


已有16条评论


  1. 报错:
    ERROR: The Compose file ‘./docker-compose.yml’ is invalid because:
    services.nginx-mailcow.ports is invalid: Invalid port “:443:443”, should be [[remote_ip:]remote_port[-remote_port]:]port[/protocol]
    services.nginx-mailcow.ports is invalid: Invalid port “:80:80”, should be [[remote_ip:]remote_port[-remote_port]:]port[/protocol]
    何解?

    1. 看起来是你自己去修改了docker-compose.yml文件,但是格式没对,提示比较明显了,应该是”443:443″而不是”:443:443″(你前面多了一个冒号),建议根据报错提示再检查检查。

      1. 这个可没有,我是按照步骤一步一步来的,然后没排查出来,又按照mailcow的文档装了一次,没有出现这个错误了,结果docker-compose up -d后,网页打不开,用IP或域名访问都打不开,防火墙也关了,整了一下午,真郁闷……

    1. 如果你是在sogo里面遇到这个情况,是因为默认关闭了修改密码功能,需要去开启

      Enable password changing¶
      The password change option in SOGo is disabled by default because it:

      doesn’t take into account the password policy set in the mailcow UI
      doesn’t work when the user is logged in into SOGo using the Login to Webmail function in the mailcow UI (Auth Proxy)
      If you still want enable this option edit data/conf/sogo/sogo.conf and change SOGoPasswordChangeEnabled to YES. Please do not add a new parameter.

      Run this command to activate the changes:

      docker compose (Plugin)
      docker-compose (Standalone)
      docker compose restart memcached-mailcow sogo-mailcow

      你可以查看一下这段文档解释。
      具体操作是这样的:
      cd /opt/mailcow-dockerized/data/conf/sogo
      vi sogo.conf
      修改里面的SOGoPasswordChangeEnabled 为YES后保存退出
      然后运行下面这段代码让他生效
      docker compose restart memcached-mailcow sogo-mailcow