最近需要用到smtp服务,想了下自建还是maddy最简单、方便。遂用docker搭建了一个,记录下过程。
以前我也写过一篇手动安装的文章,如有需要可以在本博客搜索下,这里就不多说了。
下面使用的是官方的image,但整个配置步骤与官方文档有一些出入,因为我个人觉得官方的方法略繁琐。
按官方文档走的话,容器不能一次性启动完成,第一次启动肯定是失败的,得等到你把tls证书加载好再重启一遍容器才行,个人觉得不太优雅。。另外官方用的是命名卷,备份起来没有直接挂载主机目录方便,所以我改了下配置。
安装docker:
apt -y update apt -y install curl nginx python3-certbot-nginx curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh
新建docker-compose.yml:
mkdir -p /opt/maddy && cd /opt/maddy && nano docker-compose.yml
写入如下配置:
version: '3.7' services: maddy: image: foxcpp/maddy:0.6 container_name: maddy restart: unless-stopped ports: - "25:25" - "143:143" - "465:465" - "587:587" - "993:993" volumes: - ./maddy-data:/data
创建maddy-data目录:
mkdir maddy-data
然后在maddy-data目录里面下载一个maddy.conf配置文件:
curl -L https://raw.githubusercontent.com/foxcpp/maddy/master/maddy.conf.docker -o maddy-data/maddy.conf
编辑maddy.conf:
nano maddy-data/maddy.conf
里面有很多配置,但实际上没有多少需要改动的,只需要注意下面这些配置:
$(hostname) = {env:MADDY_HOSTNAME} $(primary_domain) = {env:MADDY_DOMAIN} $(local_domains) = $(primary_domain) tls file /data/tls/fullchain.pem /data/tls/privkey.pem
将其修改为:
$(hostname) = mx1.example.com $(primary_domain) = example.com $(local_domains) = $(primary_domain) tls file /data/fullchain.pem /data/privkey.pem
现在准备tls证书,在刚才安装docker的时候我们一并安装了nginx和certbot,所以下面就利用这两个软件来申请证书。
首先新建一个nginx配置文件:
nano /etc/nginx/sites-available/maddy
写入如下配置:
server { listen 80; server_name mx1.example.com; }
启用新的配置:
ln -s /etc/nginx/sites-available/maddy /etc/nginx/sites-enabled/maddy
签发证书:
certbot --nginx
完成之后将证书和密钥复制到对应的路径:
cp /etc/letsencrypt/live/mx1.example.com/fullchain.pem /opt/maddy/maddy-data/fullchain.pem cp /etc/letsencrypt/live/mx1.example.com/privkey.pem /opt/maddy/maddy-data/privkey.pem
启动:
docker compose up -d
创建账号:
docker exec -it maddy maddy creds create [email protected] docker exec -it maddy maddy imap-acct create [email protected]
简单说下为什么这么改容器也能正常运行,首先我看了下官方的Dockerfile:https://github.com/foxcpp/maddy/blob/master/Dockerfile
入口点是这样的:
ENTRYPOINT ["/bin/maddy", "-config", "/data/maddy.conf"]
也就意味着,程序默认用/data/maddy.conf这个配置文件启动服务,那我直接在主机准备一个maddy.conf挂载进去不就可以了。
再加上官方提供的环境变量有限,还不如直接编辑配置文件方便。
这篇文章是我于2023年1月25日写的,但是一直放在草稿里面没有发布。。今天重新搭建测试了一遍,确定这样配置是没问题的,就发出来了:
原文: