Dcoker 部署 mailserver
前言
查找文章时没找到, 在本地发现了, 重新编辑一下, 供后来者参考。
使用Dcoker 部署邮件服务
DNS records 设置与 PTR records
注意把bar.foo换成需要的域名
| Type | Homename | Value | TTL |
|---|---|---|---|
| A | bar.foo | 000.000.000.000 | 3600 |
| A | *.bar.foo | 000.000.000.000 | 3600 |
| AAAA | bar.foo | 000.000.000.000 | 3600 |
| AAAA | *.bar.foo | 000.000.000.000 | 3600 |
| NS | bar.foo | ns1.bar.foo | 1800 |
| NS | bar.foo | ns2.bar.foo | 1800 |
| NS | bar.foo | ns3.bar.foo | 1800 |
| MX | bar.foo | mail.bar.foo. 【10】 | 14400 |
| TXT | bar.foo | v=spf1 mx ~all | 3600 |
| TXT | _dmarc.bar.foo | v=DMARC1; p=none | 3600 |
| TXT | mail._domainkey.bar.foo | v=DKIM1; k=rsa; p=**** | 3600 |
说明:
- NS 为域名解析服务器
- A 为IPv4 域名绑定
- AAAA 为IPv6 域名绑定
- MX 为 收信服务器
- TXT 为 E-Mail验证与设置
- 将主机名改为
mail.bar.foo后,可以设置PTR records。
IPv6使用letsencrypt自动延期证书是会出错要注意下。
p==***********为DKIM key这里隐去了
docker-mailserver
- 注意使用
ENABLE_CLAMAV=1时需要RAM≥1G
当网站与邮件服务在同一服务器时,要使用nginx-proxy
新建用户
mailserver目录下,可以使用docker命令添加多个用户
1 | touch config/postfix-accounts.cf |
创建 DKIM key
1 | docker run --rm \ |
查看
1 | cat /root/mailserver/config/opendkim/keys/bar.foo/mail.txt |
将DKIM1 调整后添加到域名解析mail._domainkey记录下。
1 | v=DKIM1; k=rsa; p=*********** |
p==***********为DKIM key这里隐去了
docker-mailserver 启动
启动 docker-proxy 【反向代理】
1 | docker run -d -p 80:80 -p 443:443 \ |
启动 letsencrypt-nginx-proxy-companion 【挂载TLS证书】
1 | docker run -d \ |
启动 library/nginx 【用于获取TLS证书, 验证时,需要port:80】
也可以使用下方docker-compose.yml
- 注意:要将
nginx桥接到nginx-proxy的网络,使其可以正常解析,LETSENCRYPT_TEST=true在测试时使用,防止证书频繁申请。
Email 必须为有效地址。
1 | version: '2' |
补充
也可以将nginx-proxy与letsencrypt-nginx-proxy-companion写在一起,这样还可以运行其他服务
具体可以查看这篇
letsencrypt-nginx-proxy-companion可以手动更新
1 | 手动更新 或 申请证书 |
测试SSL
1 | docker exec mailserver openssl s_client -connect 0.0.0.0:587 -starttls smtp -CApath /etc/letsencrypt/ |
其他
使用nginx-proxy
一般挂载
1 | docker run -d \ |
获取证书
1 | docker run -d \ |
查看 域名映射
1 | curl -H "Host:bar.foo" localhost |
查看 nginx 代理设置
1 | docker exec nginx-proxy cat /etc/nginx/conf.d/default.conf |
包管理
1 | docker run --rm --expose 9000 -e VIRTUAL_HOST=test.bar.foo -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer |