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 |