前言 查找文章时没找到, 在本地发现了, 重新编辑一下, 供后来者参考。
使用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 2 3 4 5 6 touch config/postfix-accounts.cf docker run --rm \ -e [email protected] \ -e MAIL_PASS=password \ -ti tvial/docker-mailserver:latest \ /bin/sh -c 'echo "$MAIL_USER|$(doveadm pw -s SHA512-CRYPT -u $MAIL_USER -p $MAIL_PASS)"' >> config/postfix-accounts.cf
创建 DKIM key 1 2 3 docker run --rm \ -v "/root/mailserver/config":/tmp/docker-mailserver \ -ti tvial/docker-mailserver:latest generate-dkim-config bar.foo
查看
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 2 3 4 5 6 7 8 docker run -d -p 80:80 -p 443:443 \ --name nginx-proxy \ -v /path/to/certs:/etc/nginx/certs:ro \ -v /etc/nginx/vhost.d \ -v /usr/share/nginx/html \ -v /var/run/docker.sock:/tmp/docker.sock:ro \ --label com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy \ jwilder/nginx-proxy
启动 letsencrypt-nginx-proxy-companion 【挂载TLS证书】
1 2 3 4 5 docker run -d \ -v /path/to/certs:/etc/nginx/certs:rw \ -v /var/run/docker.sock:/var/run/docker.sock:ro \ --volumes-from nginx-proxy \ jrcs/letsencrypt-nginx-proxy-companion
启动 library/nginx 【用于获取TLS证书, 验证时,需要port:80
】 也可以使用下方docker-compose.yml
注意:要将nginx
桥接到nginx-proxy
的网络,使其可以正常解析,LETSENCRYPT_TEST=true
在测试时使用,防止证书频繁申请。 Email 必须为有效地址。
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 27 28 29 30 31 32 33 34 35 36 37 38 version: '2' services: webmail: image: nginx:latest restart: always environment: - VIRTUAL_HOST=mail.bar.foo - LETSENCRYPT_HOST=mail.bar.foo - [email protected] network_mode: "bridge" mailserver: image: tvial/docker-mailserver:latest hostname: mail domainname: bar.foo container_name: mail restart: always ports: - "25:25" - "143:143" - "587:587" - "993:993" volumes: - /root/mailserver/mail:/var/mail - /root/mailserver/mail-state:/var/mail-state - /root/mailserver/config/:/tmp/docker-mailserver/ - /path/to/certs/mail.bar.foo:/etc/letsencrypt/live/mail.bar.foo environment: - SSL_TYPE=letsencrypt - ENABLE_SPAMASSASSIN=0 - ENABLE_CLAMAV=0 - ENABLE_FAIL2BAN=0 - ENABLE_POSTGREY=0 - ONE_DIR=1 - DMS_DEBUG=0 - TLS_LEVEL=intermediate
补充 也可以将nginx-proxy
与letsencrypt-nginx-proxy-companion
写在一起,这样还可以运行其他服务
具体可以查看这篇
letsencrypt-nginx-proxy-companion
可以手动更新
1 2 3 4 5 6 手动更新 或 申请证书 docker exec letsencrypt-nginx-proxy-companion /app/force_renew 证书状态 docker exec letsencrypt-nginx-proxy-companion /app/cert_status
测试SSL 1 2 docker exec mailserver openssl s_client -connect 0.0.0.0:587 -starttls smtp -CApath /etc/letsencrypt/ docker exec mailserver openssl s_client -connect 0.0.0.0:993 -starttls imap -CApath /etc/letsencrypt/
其他 使用nginx-proxy
一般挂载
1 2 3 4 5 docker run -d \ --name webblog \ --expose 80 \ -e "VIRTUAL_HOST=bar.foo" \ library/nginx
获取证书
1 2 3 4 5 6 7 docker run -d \ --name web \ --expose 80 \ -e "VIRTUAL_HOST=mail.bar.foo" \ -e "LETSENCRYPT_HOST=mail.bar.foo" \ -e "[email protected] " \ library/nginx
查看 域名映射
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