Docker搭建Maddy: 多合一邮件服务器

简介

Maddy 是一款用 Go 语言开发的邮件服务器,它实现了运行电子邮件服务器所需的所有功能。

Maddy 用一个具有统一配置和最低维护成本的守护进程取代了 Postfix、Dovecot、OpenDKIM、OpenSPF、OpenDMARC 等程序。

通俗点讲就是部署特别方便资源占用少,非常适合个人使用的电子邮件服务器。

支持AMD64, ARM64,让你的甲骨文吃灰小鸡用起来

具体步骤移步

1. 创建 docker volume

1
docker volume create maddydata

2. 创建 tls 证书

申请证书步骤略过,将证书 copy 并重命为tls_key.pemtls_cert.pem到 volume 目录

1
2
3
4
5
6
#docker volume 目录
cd $(docker volume inspect maddydata --format '{{.Mountpoint}}')

#拷贝并重命名证书到当前目录
cp /etc/letsencrypt/live/mx1.example.org/cert.pem tls_cert.pem
cp /etc/letsencrypt/live/mx1.example.org/privkey.pem tls_key.pem

3. 设置 hostname 和 domainname

1
2
export MADDY_HOSTNAME=mx1.example.org
export MADDY_DOMAIN=example.org

4. 创建 maddy 实例

4.1 使用 docker 创建

1
2
3
4
5
docker run -d --name maddy \
-e MADDY_HOSTNAME=$MADDY_HOSTNAME -e MADDY_DOMAIN=$MADDY_DOMAIN \
-v maddydata:/data \
-p 25:25 -p 143:143 -p 465:465 -p 587:587 -p 993:993 \
enwaiax/maddy:latest
4.2 使用 docker-compose 创建

1
2
3
mkdir maddy && cd maddy
wget https://raw.githubusercontent.com/Chasing66/beautiful_docker/main/maddy/docker-compose.yml
docker-compose up -d

5. 配置 DNS 记录解析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#A记录
example.org   A     10.2.3.4
example.org   AAAA  2001:beef::1

#MX记录
example.org   MX    mx1.example.org.
#同时最好配置mx1.example.org的A记录
mx1.example.org   A     10.2.3.4
mx1.example.org   AAAA  2001:beef::1

#SPF
example.org     TXT   "v=spf1 mx ~all"
mx1.example.org TXT   "v=spf1 mx ~all"

#_dmarc
_dmarc.example.org   TXT    "v=DMARC1; p=quarantine; ruf=mailto:postmaster@example.org"

#_mta-sts,_smtp.tls
_mta-sts.example.org   TXT    "v=STSv1; id=1"
_smtp._tls.example.org TXT    "v=TLSRPTv1;rua=mailto:postmaster@example.org"

#_dmarc
cd $(docker volume inspect maddydata --format '{{.Mountpoint}}')
cat dkim_keys/*.dns

default._domainkey.example.org   TXT    "v=DKIM1; k=ed25519; p=nAcUUozPlhc4VPhp7hZl+owES7j7OlEv0laaDEDBAqg="

6. 创建邮件发送账户

1
2
3
docker exec -it maddy sh
maddyctl creds create postmaster@example.org
maddyctl imap-acct create postmaster@example.org

备份

所有数据挂载在 volume 中,volum 路径为:

1
2
3
4
$ docker volume inspect maddydata --format '{{.Mountpoint}}'
/var/lib/docker/volumes/maddydata/_data
$ cd /var/lib/docker/volumes/maddydata/_data

备份该目录即可

内存占用参考
甲骨文ARM 4+24
# docker stats --no-stream
CONTAINER ID   NAME       CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O         PIDS
bf894aee9831   nginx      0.00%     4.906MiB / 23.31GiB   0.02%     2.32MB / 4.79MB   0B / 0B           5
7bf33f081437   php        0.00%     20.46MiB / 23.31GiB   0.09%     231kB / 2.24MB    0B / 32.8kB       3
294646f622a2   maddy      0.04%     9.812MiB / 23.31GiB   0.04%     884kB / 228kB     0B / 20.5kB       10

搭配rainloop, 可以有从web直接发邮件,如有用的人多,后面可以出教程,也是docker起的,两下就搞定了
先上个图

评论区
头像