Mailcow的部署、备份与恢复

zhangxh 发布于 2024-11-24 292 次阅读


AI 摘要

在数字化时代,自建邮件服务器成为了越来越多企业和个人的优选方案。Mailcow以其强大的功能和灵活性,成为了值得信赖的选择。然而,成功部署、有效备份和恢复邮件服务器并不是一件简单的事。本文将带您深入了解Mailcow的Docker部署步骤、个性化定制、升级与备份流程,以及在操作过程中需注意的关键事项,助您顺利搭建高效的邮件服务。准备好迎接挑战了吗?

Docker部署

通过git下载所需文件

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

初始化并修改mailcow设置

cd mailcow-dockerized
./generate_config.sh
sudo vim mailcow.conf

通常只需要修改MAILCOW_HOSTNAMEDBPASSDBROOTHTTP_PORTHTTPS_PORTTZ即可,修改好之后直接启动容器

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的日历>分类客户标签出现了两次,把其中一次改为顾客即可。

此作者没有提供个人介绍
最后更新于 2024-11-26