Poste.io部署过程中踩到的坑

前几天尝试在Netcup的1o机上部署邮局,参考的是这位大佬教程,但是在部署的时候因为环境不同踩了一些坑,接下来分享一下解决的过程。

关于硬件配置

Netcup的1o机内存只有1GiB,而且由于上面还可能部署了其他服务,这个内存大小是有点吃紧的,因此推荐开启Swap,不推荐开启Zram,这个VPS的核心性能比较差,而且是共享核心,因此Zram的效果可能还不如Swap。

我个人开启了3GiB的Swap,但是感觉不开启反垃圾邮件和反病毒的话,1GiB Swap其实也够用。

#分配1G大小的Swap文件
fallocate -l 3G /swapfile
#赋予600权限仅限root可读写
chmod 600 /swapfile
#申明swapfile为swap文件
mkswap /swapfile
#启用swap
swapon /swapfile
#查看swap状态
swapon -s
#开机挂载swap
echo "/swapfile swap swap defaults 0 0" >> /etc/fstab

反向代理引出的问题

大佬的博客未声明使用反向代理,直接使用Poste.io容器占用了80和443端口。

我的环境中是使用NginxProxyManager做的反向代理,因此docker-compose.yaml文件应该如下编写:

services:
  mailserver:
    image: analogic/poste.io
    hostname: mx.xxx.xxx
    network_mode: host
    environment:
      - HTTPS=OFF
      - DISABLE_CLAMAV=TRUE
      - DISABLE_RSPAMD=TRUE
      - HTTP_PORT=8080
      - HTTPS_PORT=4433
      - TZ=Asia/Shanghai
    volumes:
      - /opt/mail:/data

在环境变量中申明了HTTP和HTTPS的监听端口,分别为8080和4443,此时即使使用host模式也不会占用80和443端口了。

证书问题

其实这个问题和第二个也有点关系,因为NginxProxyManager占用了80和443端口,导致Poste.io容器无法使用80端口来申请证书,这个问题其实可以通过两个容器共享卷实现。

首先要使用docker命令创建一个卷

root@mx:~/docker/mail# docker volume create well-known
root@mx:~/docker/mail# docker volume ls
DRIVER    VOLUME NAME
local     well-known

修改NginxProxyManager的docker-compose.yaml

services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    network_mode: "host"
    #ports:
    #  - '80:80'
    #  - '81:81'
    #  - '443:443'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
      - well-known:/data/letsencrypt-acme-challenge/.well-known

volumes:
  well-known:
    external: true

修改Poste.io的docker-compose.yaml

services:
  mailserver:
    image: analogic/poste.io
    hostname: mx.xxx.xxx
    network_mode: host
    environment:
      - HTTPS=OFF
      - DISABLE_CLAMAV=TRUE
      - DISABLE_RSPAMD=TRUE
      - HTTP_PORT=8080
      - HTTPS_PORT=4433
      - TZ=Asia/Shanghai
    volumes:
      - /opt/mail:/data
      - well-known:/opt/www/.well-known

volumes:
  well-known:
    external: true

先后分别docker compose downdocker compose up -d重启两个应用即可。

此时登入Poste.io邮局页面,申请TLS证书就可以正常下发了。