lala.im:Podman部署WildDuck邮件服务器

運維技術·lala.im · 2020-08-19 · 122 人浏览

原文地址:https://lala.im/7338.html,請支持原作者!該處僅作轉載。

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 [email protected]

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

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": "[email protected]",
  "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:

範例

運維技術 Email lala.im
Theme Jasmine by Kent Liao