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 down和docker compose up -d重启两个应用即可。
此时登入Poste.io邮局页面,申请TLS证书就可以正常下发了。