基于docker的轻量级邮件服务器的搭建和使用教程
前言
很早就想配置一个自己的邮件服务器,苦于没有时间。偶然的机会,黑色星期五买了一台1G内存的特价服务器,开放了25端口,于是趁这个周末,决定搭建一个自己的域名邮箱。
技术选型: docker-mailserver
优势:
简单/方便。你要知道自己去手动配一台这样功能完全的邮件服务器,也许一个晚上的时间都不够,稍微一个地方出错还可能用不了。
安全,你要知道邮件服务器,自用问题不大,如果是公共服务,各种SPAM/病毒邮件,你就会发现原来邮件服务器是真的难伺候。
也就是我个人觉得最重要的原因。我自建一个邮件服务器,是出于自用的目的,我拿一台VPS出来就只装一个邮件服务,我真的觉得太浪费。所以像这样用Docker,在部署完了后,我还可以装点别的程序跑一跑。而我之前介绍的Mailcow/Mailu/Poste.io这些,虽然它们都是用Docker部署的,但是都把80/443占用了,我们最多也就只能再跑一些小脚本,如果我们还想建站呢?那这些方案就不适合我们。
搭建步骤
配置DNS
首先需要在主机商配置反向dns解析
之后前往域名提供商进行dns解析设置
类型 | 记录名 | 记录值 |
---|---|---|
A | xxx.xxx.xxx.xxx(自己服务器的ip) | |
MX | @ | mail.example.com(mail.<域名>); 优先级选10 |
TXT | @ | v=spf1 mx ~all |
使用certbot申请https证书
安装好管理工具之后, 我们需要申请证书下来, 这里我的web服务器是NGINX, 并且我没有网站的静态目录, 所以我使用这个命令申请:
1 | sudo certbot certonly --standalone -d example.com -d www.example.com -d m.example.com |
如果你的网站有静态目录的话, 可以把--standalone
改成--webroot
并且加上-w
参数申请, 类似这样:
1 | sudo certbot certonly --webroot -w /var/www/html -d example.com -d www.example.com |
在你使用--standalone
申请证书的时候需要关闭nginx, 因为certbot会启用443端口校验你的域名信息, 如果nginx没有关闭, 会导致端口占用, 所以我们关闭nginx, 我这里是使用ubuntu, 所以使用这个命令关闭nginx:
1 | sudo services nginx stop |
更新证书时使用certbot renew
命令即可
使用crontab
添加定时任务
可使用crontab配置证书自动续签
1 | crontab -e |
0 3 1 * *
指每个月1号3点0分执行任务
解析验证
使用dig验证解析是否生效
1 | apt-get install dnsutils |
安装docker
基于debian11系统进行,参考官方文档 https://docs.docker.com/engine/install/debian/
1 | # 移除之前的版本 |
修改docker存储目录(可选)
查看原始存储目录
1 | docker info |
可以发现Docker Root
项默认目录为/var/lib/docker
1 | cd /etc/docker/ |
添加以下内容
1 | { |
保存退出,然后重启 docker 服务:
1 | systemctl restart docker |
拉取配置文件
1 | git clone https://github.com/docker-mailserver/docker-mailserver.git |
如果后续读取配置报错,需要在docker-compose.yml
头部添加 version: '3'
,以配置版本
开放端口
需要开放[25,193,993,465,587]这几个端口,以下以ufw举例,具体开放防火墙请自行Google
1 | ufw allow 25 |
生成DKIM签名记录
1 | ./setup.sh config dkim keysize 2048 |
添加到dns解析当中
类型 | 记录名 | 记录值 |
---|---|---|
TXT | mail._domainkey | v=DKIM1;h=sha256;k=rsa;p=xxx |
配置tls
编辑docker-mailserver配置文件
1 | cd docker-mailserver |
编辑 -volumes配置项下添加 - /etc/letsencrypt/:/etc/letsencrypt:ro
编辑mailserver.env
文件
1 | SSL_TYPE=letsencrypt |
最后重启docker-mailserver即可:
1 | docker-compose stop |
安装完成!
邮箱服务器管理
利用setup.sh
脚本可以轻松实现管理账户
可参考官方文档 https://docker-mailserver.github.io/docker-mailserver/edge/config/setup.sh/
1 | ./setup.sh email add [email protected] "xxx" # 添加账号密码 |
参考文章
本文参考了以下博文,感谢作者的付出