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