Podman部署WildDuck邮件服务器

WildDuck是一个开源邮件服务器软件,它不依赖postfix+dovecot,完全是用自己的代码实现的,数据存储用的是mongodb。

开始部署之前你需要添加两个解析记录,一个A记录一个MX记录这些就不多说了。

这里我使用podman来部署,如果你不想用podman也可以换成docker,两者都是兼容的。

系统debian10,安装podman,首先添加源:

apt -y update
apt -y install curl
echo 'deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/Debian_10/ /' > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/Debian_10/Release.key | apt-key add -

安装:

apt -y update
apt -y install podman

安装podman-compose:

curl -o /usr/local/bin/podman-compose https://raw.githubusercontent.com/containers/podman-compose/devel/podman_compose.py
chmod +x /usr/local/bin/podman-compose

因为后续部署需要用到ssl证书,为了方便起见在宿主机安装一个certbot+nginx。

apt -y install nginx python-certbot-nginx

然后新建一个nginx站点配置文件:

nano /etc/nginx/conf.d/mail.imlala.best.conf

写入如下配置即可:

server {
listen 80;
server_name mail.imlala.best; # 换成你的域名
root /var/www/mailserver/;
}

然后用certbot的web模式去签发ssl证书,这样就可以做到自动续签ssl证书:

certbot --nginx --agree-tos --no-eff-email --email xxxxx@qq.com

接下来新建需要用到的目录:

mkdir -p /opt/podman-wildduck
mkdir -p /opt/podman-wildduck/mongodb_data redis_data

进到目录新建一个docker-compose.yml:

cd /opt/podman-wildduck && nano docker-compose.yml

写入如下配置(需要改动的地方写了注释:)

version: "3"
services:
mail:
image: astzweig/wildduck
ports:
- "25:25"
- "5438:443"
- "465:465"
- "993:993"
networks:
- backend
- frontend
volumes:
- /etc/letsencrypt/live/mail.imlala.best/fullchain.pem:/etc/tls-keys/pub.pem:ro # 证书路径换成你自己的
- /etc/letsencrypt/live/mail.imlala.best/privkey.pem:/etc/tls-keys/prv.pem:ro # 证书路径换成你自己的
- mailconfig:/etc/nodemailer
depends_on:
- redis
- mongo
environment:
- FQDN=mail.imlala.bes # 换成你的域名
- MAIL_DOMAIN=imlala.best # 换成你的域名
- TLS_KEY=/etc/tls-keys/prv.pem
- TLS_CERT=/etc/tls-keys/pub.pem
- API_USE_HTTPS=true
- API_URL=https://mail.imlala.best:5438 # 换成你的域名
- API_TOKEN_SECRET=password # 自己随便输一个密码
redis:
image: redis:alpine
volumes:
- ./redis_data:/data
networks:
- backend
mongo:
image: mongo
volumes:
- ./mongodb_data:/data/db
networks:
- backend
networks:
backend:
frontend:
volumes:
mailconfig:

确认无误后up起来即可:

podman-compose -f docker-compose.yml up -d

由于这个邮件服务器是没有GUI的,官方的那个webmail好像没开源?所以很多操作只能通过调用api来进行。

例如创建一个邮箱账号:

curl -i -XPOST https://mail.imlala.best:5438/users?accessToken=password \
-H 'Content-type: application/json' \
-d '{
"username": "imlala",
"password": "password",
"name": "imlala",
"address": "imlala@imlala.best",
"tags": [
"status:regular_user",
"subscription:business_big"
]
}'

注:

1.accessToken=后面的值要和你在docker-compose.yml内配置的API_TOKEN_SECRET变量一致。

2.更多api调用方法:https://docs.wildduck.email/api/

dkim签名配置,首先编辑如下配置文件:

nano /var/lib/containers/storage/volumes/podman-wildduck_mailconfig/_data/wildduck/dkim.toml

这行的false改为true:

signTransportDomain=true

然后看下容器的ID或者NAME:

podman-compose ps

例如我的是:

using podman version: podman version 2.0.4
podman ps -a --filter label=io.podman.compose.project=docker-wildduck
CONTAINER ID  IMAGE                               COMMAND               CREATED      STATUS          PORTS                                      NAMES
0cbb29dddb47  docker.io/astzweig/wildduck:latest  /bin/sh -c ${SCRI...  2 hours ago  Up 2 hours ago  0.0.0.0:5438->443/tcp, 0.0.0.0:25->25/tcp  docker-wildduck_mail_1
3998df6428b4  docker.io/library/mongo:latest      mongod                2 hours ago  Up 2 hours ago  0.0.0.0:5438->443/tcp, 0.0.0.0:25->25/tcp  docker-wildduck_mongo_1
754e38d65b02  docker.io/library/redis:alpine      redis-server          2 hours ago  Up 2 hours ago  0.0.0.0:5438->443/tcp, 0.0.0.0:25->25/tcp  docker-wildduck_redis_1

生成密匙对:

podman exec -it 0cbb29dddb47 generate_dkim

然后会问你要签发的域名,在后面输入你的域名回车即可:

之后去添加你的DKIM解析记录即可。

使用的话,因为没有webmail,这里你可以选择用客户端,例如foxmail来登录:

验证成功之后,按下图配置即可,注意端口号IMAP是993,SMTP是465:

全部为采集文章,文中的 联系方式 均不是 本人 的!

发表评论