Docker部署
通过git下载所需文件
cd /opt
git clone https://github.com/mailcow/mailcow-dockerized
初始化并修改mailcow设置
cd mailcow-dockerized
./generate_config.sh
sudo vim mailcow.conf
通常只需要修改MAILCOW_HOSTNAME
、DBPASS
、DBROOT
、HTTP_PORT
、HTTPS_PORT
和TZ
即可,修改好之后直接启动容器
docker compose up -d
需要打开的端口为25、465、587、143、993、110、995、4190、80、443。
至于DNS设置,除了SPF记录和DMARC记录内容,其余的记录只需要跟着添加域名后的DNS设置指引来做就好,同时要记得在服务器提供商那里做PTR反向解析。
SPF记录设置为
v=spf1 mx a:mail.zhangxh.org ~all
mail.zhangxh.org
可以换为允许的发件ip地址或者域名。
DMARC记录内容设置为
v=DMARC1; p=reject; rua=mailto:service@zhangxh.org; ruf=mailto:service@zhangxh.org; adkim=s; aspf=s
其中service@zhangxh.org
可以设置为任何邮件服务器中已经创建的邮箱,用于接收各大邮件服务提供商的DMARC报告的狂轰滥炸。
反向代理
如果直接使用Mailcow内部自带的反向代理,这个步骤可以直接跳过。如果像我一样使用Nginx Proxy Manager进行反向代理,则需要在Advanced>Custom Nginx Configueration
中添加如下设置以保证Mailcow的SSL证书成功申请
rewrite ^(/.well-known/acme-challenge/.*)$ /internal$1 last;
location ~ ^/internal(/.well-known/acme-challenge/.*)$ {
proxy_pass http://$server:$port$1;
}
个性化
有一说一,SOGo的页面丑到我无法直视,所以我就想顺带给Mailcow做一次个性化。
Mailcow Logo的修改可以在系统>配置>选项>页面自定义
中更改,SOGo Logo可以通过替换data/conf/sogo/sogo-full.svg
文件更改。
Mailcow的favicon可以通过替换data/web/favicon.png
来更改,SOGo的favicon可以通过替换data/conf/sogo/custom-favicon.ico
来更改。替换favicon的png必须是16x16、32x32、64x64、128x128和256x256这种标准像素。
上述替换完成后执行
docker compose restart memcached-mailcow sogo-mailcow
为SOGo添加自定义主题就复杂一些,首先修改data/conf/sogo/custom-theme.js
为
(function() {
'use strict';
angular.module('SOGo.Common')
.config(configure)
configure.$inject = ['$mdThemingProvider'];
function configure($mdThemingProvider) {
var greyMap = $mdThemingProvider.extendPalette('grey', {
'200': 'F5F5F5',
'300': 'E5E5E5',
'1000': '4C566A'
});
var blueCow = $mdThemingProvider.extendPalette('blue', {
'600': 'E5E5E5'
});
$mdThemingProvider.definePalette('frost-grey', greyMap);
$mdThemingProvider.definePalette('blue-cow', blueCow);
$mdThemingProvider.theme('default')
.primaryPalette('blue-cow', {
'default': '400',
'hue-1': '400',
'hue-2': '600',
'hue-3': 'A700'
})
.accentPalette('blue', {
'default': '600',
'hue-1': '300',
'hue-2': '300',
'hue-3': 'A700'
})
.backgroundPalette('frost-grey');
$mdThemingProvider.generateThemesOnDemand(false);
}
})();
修改data/conf/sogo/sogo.conf
中的下述值
SOGoUIxDebugEnabled = YES;
重启SOGo和Memcached容器
docker compose restart memcached-mailcow sogo-mailcow
在浏览器中打开SOGo并按下F12
打开浏览器的开发工具台,在控制台终端里执行
copy([].slice.call(document.styleSheets)
.map(e => e.ownerNode)
.filter(e => e.hasAttribute('md-theme-style'))
.map(e => e.textContent)
.join('\n')
)
此命令复制了我们需要的CSS文件,把它粘贴到data/conf/sogo/custom-theme.css
中去,然后把data/conf/sogo/sogo.conf
的设置改回来
SOGoUIxDebugEnabled = NO;
在docker-compose.override.yml
中追加设置
services:
sogo-mailcow:
volumes:
- ./data/conf/sogo/custom-theme.css:/usr/lib/GNUstep/SOGo/WebServerResources/css/theme-default.css:z
最后执行
docker compose up -d
docker compose restart memcached-mailcow
升级、备份与恢复
无论是升级、备份还是恢复,Mailcow都提供官方的脚本,实在是太良心了!以下的命令均要在/opt/mailcow-dockerized
中执行,并且备份的位置为/opt/backup
.
升级
bash update.sh
备份
MAILCOW_BACKUP_LOCATION=/opt/backup /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup all --delete-days 10
恢复
MAILCOW_BACKUP_LOCATION=/opt/backup /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh restore
如果想要设置定时备份,可以利用crontab
crontab -e
在打开的文件中添加以下内容
0 4 */3 * * MAILCOW_BACKUP_LOCATION=/opt/backup /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup all --delete-days 10
在迁移的过程中,如果原服务器与目标服务器架构不一样,那么rspamd
组件是没有办法迁移的。
一些注意事项
为了防止邮件服务器被黑我也是煞费苦心,这里记录一下曾经踩过的坑
如果使用Windows的docker desktop进行部署,那么mailcow是无法获取外部连接的真实ip地址的,所有的外部连接地址均被识别为内网地址,从而使得mailcow变成一个开放中继,变成别人发送垃圾邮件的肉机,动不动就有上万封邮件在排队。解决办法是在/opt/mailcow-dockerized/data/conf/postfix/extra.cf
中添加下述设置
smtpd_relay_restrictions = permit_sasl_authenticated,permit_auth_destination,reject
同样,如果在Linux系统上禁止docker修改iptable也会出现一样的问题,所以在动mailcow的网络时都要慎重。每次动完mailcow的网络都要上MXToolBox测试一下自己的邮件服务器是否成为了开放中继。MXToolBox也能检查自己的ip地址是否被列入了发件黑名单。
还有一个小问题是SOGo的日历>分类
中客户
标签出现了两次,把其中一次改为顾客
即可。
Comments NOTHING