2026-02-28 04:16PM
参考文档:https://docs.mailcow.email/getstarted/install/
1. 安装前置条件
1.1 需要先安装下面这些内容:
git
openssl
curl
awk
sha1sum
grep
cut
jq
1.2 更新并安装配置
$ apt update $ apt install -y git openssl curl gawk coreutils grep jq
2. 安装 docker
$ curl -sSL https://get.docker.com/ | CHANNEL=stable sh
$ systemctl enable --now docker
3. 安装 docker compose
$ apt update
$ apt install docker-compose-plugin
4. 安装 mailcow
4.1 克隆仓库
$ su
$ umask 0022
$ cd /opt
$ git clone https://github.com/mailcow/mailcow-dockerized
$ cd mailcow-dockerized
4.2 生产配置文件
$ ./generate_config.sh
这个配置文件,并不会修改对服务器的 hostname、server 等内容,所以可以运行

4.3 下载镜像
$ docker compose pull

下载镜像需要等待大概20分钟左右
4.4 下载完之后,并启动容器
$ docker compose up



发现报错了:
Error response from daemon: failed to set up container networking: driver failed programming external connectivity on endpoint mailcowdockerized-nginx-mailcow-1 (4b82711fae53100c7fac3db77812a3e99ec80e8759dfa34941fe571b8f5529a3): Bind for 0.0.0.0:80 failed: port is already allocated
主要是因为:我服务器的 80 端口已经被占用了,mailcow 的 nginx 容器还在尝试绑定 80 端口,所以启动失败
4.5 解决方法:强制修改 mailcow 端口映射
创建 docker-compose.overide.yml 文件来覆盖默认的 80/443 端口映射
4.5.1 先停止当前启动失败的容器
$ cd /opt/mailcow-dockerized
$ docker compose down
4.5.2 禁用自动 ssl 证书申请
$ vim mailcow.conf
找到下面这3行:
SKIP_LETS_ENCRYPT=n
HTTP_PORT=80
HTTPS_PORT=443
修改为下面这样:
SKIP_LETS_ENCRYPT=y # 禁用 Let's Encrypt 自动申请
HTTP_PORT=8081 # 与 override 中的 81 对应
HTTPS_PORT=4443 # 与 override 中的 444 对应
4.5.3 把你的 ssl 证书文件(key.pem,cert.pem)上传到 /opt/mailcow-dockerized/data/assets/ssl 目录下
如果你的证书文件格式是 key.key 和 cert.crt 那么需要转换格式
# 转换私钥(需要输入证书密码,没有则直接回车)
openssl rsa -in key.key -out key.pem
# 转换证书
openssl x509 -in cert.crt -out cert.pem
设置正确的权限
$ chmod 644 data/assets/ssl/key.pem
$ chmod 644 data/assets/ssl/cert.pem
4.5.4 重启 mailcow
$ docker compose up -d
然后 docker ps 查看是否启动成功
/opt/mailcow-dockerized# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
386fb9c0a340 ghcr.io/mailcow/watchdog:2.09 "/watchdog.sh" 8 minutes ago Up 5 seconds mailcowdockerized-watchdog-mailcow-1
6b70da3248ca ghcr.io/mailcow/acme:1.95 "/sbin/tini -g -- /s…" 8 minutes ago Up 5 seconds mailcowdockerized-acme-mailcow-1
afc2fdd2b1c0 ghcr.io/mailcow/nginx:1.05 "/docker-entrypoint.…" 8 minutes ago Up 6 seconds 0.0.0.0:4443->4443/tcp, [::]:4443->4443/tcp, 80/tcp, 0.0.0.0:8081->8081/tcp, [::]:8081->8081/tcp mailcowdockerized-nginx-mailcow-1
69a9c78dffe4 mcuadros/ofelia:latest "/usr/bin/ofelia dae…" 8 minutes ago Up 36 seconds mailcowdockerized-ofelia-mailcow-1
96f3560c54e3 ghcr.io/mailcow/rspamd:3.14.2 "/docker-entrypoint.…" 8 minutes ago Up 6 seconds mailcowdockerized-rspamd-mailcow-1
2b889745c801 ghcr.io/mailcow/dovecot:2.3.21.1-1 "/docker-entrypoint.…" 8 minutes ago Up 36 seconds 0.0.0.0:110->110/tcp, [::]:110->110/tcp, 0.0.0.0:143->143/tcp, [::]:143->143/tcp, 0.0.0.0:993->993/tcp, [::]:993->993/tcp, 0.0.0.0:995->995/tcp, [::]:995->995/tcp, 0.0.0.0:4190->4190/tcp, [::]:4190->4190/tcp, 127.0.0.1:19991->12345/tcp mailcowdockerized-dovecot-mailcow-1
3dc2ceae4dd5 ghcr.io/mailcow/postfix:3.7.11-1 "/docker-entrypoint.…" 8 minutes ago Up 6 seconds 0.0.0.0:25->25/tcp, [::]:25->25/tcp, 0.0.0.0:465->465/tcp, [::]:465->465/tcp, 0.0.0.0:587->587/tcp, [::]:587->587/tcp, 588/tcp mailcowdockerized-postfix-mailcow-1
1cdefb5059f3 ghcr.io/mailcow/phpfpm:8.2.29-1 "/docker-entrypoint.…" 8 minutes ago Up 36 seconds 9000/tcp mailcowdockerized-php-fpm-mailcow-1
90210e28f6be mariadb:10.11 "docker-entrypoint.s…" 8 minutes ago Up 37 seconds 127.0.0.1:13306->3306/tcp mailcowdockerized-mysql-mailcow-1
04e284316455 redis:7.4.6-alpine "/bin/sh /redis-conf…" 8 minutes ago Up 37 seconds 127.0.0.1:7654->6379/tcp mailcowdockerized-redis-mailcow-1
64854d042403 ghcr.io/mailcow/postfix-tlspol:1.8.22 "/docker-entrypoint.…" 8 minutes ago Up 6 seconds mailcowdockerized-postfix-tlspol-mailcow-1
3bb42a1b319e ghcr.io/mailcow/clamd:1.71 "/sbin/tini -g -- /c…" 8 minutes ago Up 6 seconds (health: starting) mailcowdockerized-clamd-mailcow-1
562d621fba32 memcached:alpine "docker-entrypoint.s…" 8 minutes ago Up 37 seconds 11211/tcp mailcowdockerized-memcached-mailcow-1
c52682ec35a6 ghcr.io/mailcow/unbound:1.24 "/docker-entrypoint.…" 8 minutes ago Up 37 seconds (healthy) 53/tcp, 53/udp mailcowdockerized-unbound-mailcow-1
55a430bcec70 ghcr.io/mailcow/sogo:5.12.4-1 "/docker-entrypoint.…" 8 minutes ago Up 37 seconds mailcowdockerized-sogo-mailcow-1
abab306a4bbd ghcr.io/mailcow/dockerapi:2.11 "/bin/sh /app/docker…" 8 minutes ago Up 37 seconds mailcowdockerized-dockerapi-mailcow-1
0c817432090d ghcr.io/mailcow/olefy:1.15 "python3 -u /app/ole…" 8 minutes ago Up 37 seconds mailcowdockerized-olefy-mailcow-1
6aad41a57205 ghcr.io/mailcow/netfilter:1.63 "/bin/sh -c /app/doc…" 8 minutes ago Up 37 seconds mailcowdockerized-netfilter-mailcow-1
发现已经启动了,在浏览器里面访问服务器 IP + 4443

发现已经可以打开了
登录
请登录后再发表评论。
评论列表:
目前还没有人发表评论