关于 Mailcowdockerized - 🐮 + 🐋 = 💕Mailcow是使用Docker部署的邮件服务应用
Github上提供了完整的 Demo, 自行部署前体验一下也是没问题的Demo Administrator: admin / moohoo
部署步骤可以参考 Github 上的 Documentation, 由于基于docker, 部署起来也并不复杂
mailcow/mailcow-dockerized
mailcow: dockerized - 🐮 + 🐋 = 💕
Github Link
See Demo
事前准备Mailcow还是很吃配置的, 在部署之前, 我们先确认服务器是否符合要求参考文档:https://docs.mailcow.email/getstarted/prerequisite-system/
Minimum System Resources首先是服务器硬件,文档给出的推荐内存是6GB, 所以推荐在 4G RAM 以上部署RAM 不够的话只能禁用些组件了,禁用ClamAV and Solr可以节约使用内存
Resource
mailcow: dockerized
CPU
1 GHz
RAM
Minimum 6 GiB + 1 GiB swap (default config)
Disk
20 GiB (without emails)
System Type
x86_64
OpenVZ, Virtuozzo and LXC 虚拟化的VPS是无法部署的
Supported OS在主流服务器操作系统上都没问题
✅ Centos 7 ✅ Debian 10, 11 ✅ Ubuntu 18.04, 20.04, 22.04 ⚠️ Alpine 可能有些功能会不兼容
Firewall & Ports需要使用的端口有:25|80|110|143|443|465|587|993|995|4190
可以使用下面命令检查, 如果没有输出就是端口处于空闲状态被占用的话,可以之后改配置文件, 如果已经装了web服务器, 例如Nginx, 之后可以反向代理
123ss -tlpn | grep -E -w '25|80|110|143|443|465|587|993|995|4190'# or:netstat -tulpn | grep -E -w '25|80|110|143|443|465|587|993|995|4190'
另外有些服务商会封锁 Outbound SMTP (出方向为25端口)的流量比如AWS,Oracle,Azure,GCP,Vultr等, 你需要先和服务器运营商联系, 解除限制
检查 Outbound SMTP 是否畅通可以使用telnet, 看到Connected没问题需要退出telnet请按CTRL+]然后输入quit
123456$ telnet mx1.qq.com 25Trying 162.62.116.184...Connected to mx1.qq.com.Escape character is '^]'.220 newxmmxszc3-2.qq.com MX QQ Mail Server.
配置DNS 信息在安装前我们先配置DNS, 因为这可能要过一会生效官网文档也给出了参考配置
${MAILCOW_HOSTNAME}是你的邮件服务器域名, 例如mail.psray.net, 最少需要配置4个DNS记录
12345# Name Type Valuemail IN A 1.2.3.4autodiscover IN CNAME mail.example.org. (your ${MAILCOW_HOSTNAME})autoconfig IN CNAME mail.example.org. (your ${MAILCOW_HOSTNAME})@ IN MX 10 mail.example.org. (your ${MAILCOW_HOSTNAME})
还有域名的SPF记录, 注意新增时候请不要选SPF类型
12# Name Type Value@ IN TXT v=spf1 mx a -all
另外还可以添DKIM,DMARC,rDNS记录, 这里就不配置了
安装Docker & Docker Compose首先安装Docker和Docker Compose, 如果已经安装了可以跳过
12curl -sSL https://get.docker.com/ | CHANNEL=stable shsystemctl enable --now docker
接着安装Docker Compose
1234567## On Debian/Ubuntu systems:apt updateapt install docker-compose-plugin## On Centos 7 systems:yum updateyum install docker-compose-plugin
从Github上clone代码, 安装mailcow时, 请确认你使用的用户umask是022
123$ su# umask0022 # <- Verify it is 0022
123cd /optgit clone https://github.com/mailcow/mailcow-dockerizedcd mailcow-dockerized
初始化 mailcow输入 mail servers hostname (FQDN), 例如mail.psray.net设置 Timezone (时区), 例如Asia/Tokyo最后的 Available Branches, 选1就行, nightly branch是开发版本
1./generate_config.sh
配置 mailcow, 编辑文件mailcow.conf, 根据自己的实际情况修改即可由于我的机器上已经有Web服务器Nginx了,所以我把HTTP_PORT和HTTPS_PORT改了下
1nano mailcow.conf
启动 mailcow如果最后一步报错请根据错误信息排查
12docker compose pulldocker compose up -d
比如我机器上的exim4占用了25端口,可以使用systemctl禁用它
用浏览器打开 https://MAILCOW_HOSTNAME:HTTPS_PORT (如果你没改配置文件的话, 不用指定额外端口)你应该能正常看到Web UI才对, 默认的用户名和密码是admin,moohoo
默认生成的证书文件在安装目录下的 data/assets/ssl/用已有的替换它或者用acme生成新的证书后, 再重新执行docker compose up -d即可像我打算用Nginx反向代理, 上面证书可以不用管了。这边贴出Nginx配置文件中比较重要部分
server_name记得加上autoconfig,autodiscover, MAILCOW_HOSTNAME替换成你的邮件服务器域名记得把proxy_pass的端口改成的mailcow的http端口官方文档内还有更多示例和说明, 比如Apache,HAProxy,Traefik ,Caddy的配置
1server_name MAILCOW_HOSTNAME autodiscover.* autoconfig.*;
12345678910111213location / { proxy_pass http://127.0.0.1:8080/; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; client_max_body_size 0; # The following Proxy Buffers has to be set if you want to use SOGo after the 2022-04 (April 2022) Update # Otherwise a Login will fail like this: https://github.com/mailcow/mailcow-dockerized/issues/4537 proxy_buffer_size 128k; proxy_buffers 64 512k; proxy_busy_buffers_size 512k;}
接着回到Web UI, 配置域名, 在Configuration->Mail Setup->Domains, 添加域名并重启
切换到邮箱选项卡, 添加一个新的邮箱, 比如admin@psray.netmailcow使用SOGo作为Webmail UI, 在右上方菜单, Apps->Webmail,即可进入SOGo
默认端口mailcow使用的默认端口如下, 如果需要使用第三方邮件客户端时, SMTP和IMAP服务器地址都填写MAILCOW_HOSTNAME即可SMTP: STARTTLS->587, SSL/TLS->465IMAP: STARTTLS->143, SSL/TLS->993 (比起POP3, 推荐使用IMAP)
Service
Protocol
Port
Container
Variable
Postfix SMTP
TCP
25
postfix-mailcow
${SMTP_PORT}
Postfix SMTPS
TCP
465
postfix-mailcow
${SMTPS_PORT}
Postfix Submission
TCP
587
postfix-mailcow
${SUBMISSION_PORT}
Dovecot IMAP
TCP
143
dovecot-mailcow
${IMAP_PORT}
Dovecot IMAPS
TCP
993
dovecot-mailcow
${IMAPS_PORT}
Dovecot POP3
TCP
110
dovecot-mailcow
${POP_PORT}
Dovecot POP3S
TCP
995
dovecot-mailcow
${POPS_PORT}
Dovecot ManageSieve
TCP
4190
dovecot-mailcow
${SIEVE_PORT}
HTTP(S)
TCP
80/443
nginx-mailcow
${HTTP_PORT} / ${HTTPS_PORT}
其他需要更新 Mailcow 时,运行目录下的更新脚本即可
1./update.sh
卸载
1docker compose down -v --rmi all --remove-orphans
备份或还原数据库, 使用目录下的helper-scripts脚本即可
1helper-scripts/backup_and_restore.sh
另外除了SPF记录, 还可以创建DKIM,DMARC的DNS记录, 增加你的邮件友好度
12345# Name Type Valuedkim._domainkey IN TXT "v=DKIM1; k=rsa; t=s; s=email; p=..."# Name Type Value_dmarc IN TXT "v=DMARC1; p=reject; rua=mailto:mailauth-reports@example.org"
SRV记录(非必须)
12345678910111213# Name Type Priority Weight Port Value_autodiscover._tcp IN SRV 0 1 443 mail.example.org. (your ${MAILCOW_HOSTNAME})_caldavs._tcp IN SRV 0 1 443 mail.example.org. (your ${MAILCOW_HOSTNAME})_caldavs._tcp IN TXT "path=/SOGo/dav/"_carddavs._tcp IN SRV 0 1 443 mail.example.org. (your ${MAILCOW_HOSTNAME})_carddavs._tcp IN TXT "path=/SOGo/dav/"_imap._tcp IN SRV 0 1 143 mail.example.org. (your ${MAILCOW_HOSTNAME})_imaps._tcp IN SRV 0 1 993 mail.example.org. (your ${MAILCOW_HOSTNAME})_pop3._tcp IN SRV 0 1 110 mail.example.org. (your ${MAILCOW_HOSTNAME})_pop3s._tcp IN SRV 0 1 995 mail.example.org. (your ${MAILCOW_HOSTNAME})_sieve._tcp IN SRV 0 1 4190 mail.example.org. (your ${MAILCOW_HOSTNAME})_smtps._tcp IN SRV 0 1 465 mail.example.org. (your ${MAILCOW_HOSTNAME})_submission._tcp IN SRV 0 1 587 mail.example.org. (your ${MAILCOW_HOSTNAME})
最后找个Mail-tester,MX Toolbox之类工具看看配置是否正确, 就可以愉快的使用了