由于 PMail 后续更新,本文也将修改,适应最新版本
前言
最近想自建一个域名邮箱,开源的邮箱服务内存占用太高,对于个人使用不太友好,接着找到一个由 Golang 编写的域名邮箱 Pmail。
官方介绍:PMail 是一个追求极简部署流程、极致资源占用的个人域名邮箱服务器。单文件运行,包含完整的收发邮件服务和 Web 端邮件管理功能。只需一台服务器、一个域名、一行代码、一分钟部署时间,你就能够搭建出一个自己的域名邮箱。
GitHub 地址:https://github.com/Jinnrry/PMail/
以下为界面截图:
准备工作
- 服务器,开放了 25 号端口的服务器,没有开放则无法发信。
- 域名
- nginx 反代服务器
- nginx proxy manager(
可选,但建议),与 nginx 二选一 - docker 或者 docker-compose
部署
提示:文章篇幅较长
docker-compose
如果服务器 80,443 端口没有被占用,搭建过程则较为简单。如果 80,443 端口被其他应用占用,搭建过程则较为繁琐。
本次 80,443 端口被 nginx proxy manager 占用,所以采用映射其他端口搭建
本次教程采用 docker-compose 方式安装,方便管理配置文件和升级。其余方式请参考官方教程
在你喜欢的目录下,新建 pamail 文件夹,在 pamil 文件夹下,新建 docker-compose.yml 文件,如:
|
|
文件内容如下
|
|
配置文件编写完成之后,在 docker-compose.yml 所在目录下,运行
|
|
接着会开启一个阻塞的前台进程,会打印日志信息,没有报错的话,服务则已经启动。
开放端口,因为使用的云服务器,所以需要在云服务器管理面板,开放安全组,也就是端口,笔者使用的阿里云。
进入 ecs 管理面板,在左侧选择 【安全组】,选择服务器对应的安全组。
接着【手动添加】
填写端口范围和授权对象,端口即为配置文件开放的端口,授权对象为 0.0.0.0,表示所有 ip 都可访问,描述为备注信息。
保存后,安全组配置完成。
配置 pmail
暂停 pamil 的启动,修改配置文件
|
|
修改配置文件
|
|
网页访问服务器的公网 ip+端口,如本次教程为 http://ip:8780,ip 为服务器的公网 ip,在ecs 管理面板 可以看到。
欢迎界面,初次进入的页面如下:
下一步,选择数据库,建议默认即可,根据自己使用的数据库安装
继续下一步,设置 pmail 管理员密码
下一步,设置域名
下一步,设置 DNS,将以下信息添加到 dns 解析处,
DNS 记录配置,在上一步,需要将 DNS 记录添加到对应的域名,我使用的 DNSPOD,点此跳转 DNSPOD ,进入之后,按照提示添加记录即可
配置 ssl,dns 记录添加完成之后,回到 pmail 配置页面,继续配置证书。
这里选择手动配置 ssl 证书,如果服务器的 80 端口没有被占用,可以选择自动配置,当然,前面的 docker-compose.yml 端口信息也需要改成 80,443。
为什么选择不用 80,443 端口呢??
自动配置 ssl 需要用到 80 端口来验证服务器的所有权,所以自动配置 ssl 必须使用 80 端口。但是我的服务器安装了 nginx proxy manger(简称 npm) ,反代服务,一个 web 端的 nginx 工具,简化 nginx 配置,还可以一键生成 ssl 证书,我的服务器应用比较多,其他应用采用的都是子域名的方式访问。通过这种方式,简化的自己的工作、但是 npm 已经占用了 80,443 端口,所以 80,443 端口不可用。总不可能为了一个域名服务,让其他域名都不可用域名访问了吧。所以,将容器的 80,443 端口映射到了其他端口。
默认的证书位置在 ./config/ssl/private.key、./config/ssl/public.crt
下,我们就把自己的 ssl 证书上传到 ./config/ssl
下。
如果继续介绍 npm 申请 ssl 证书,这篇文章的篇幅就会过长。如果需要,到时候会另开文章介绍,这里就不多介绍了。也可自行搜索相关教程。
关于 ssl 配置可以参考这篇博文:Debian 下的 Certbot 安装使用,附 nginx 使用
完成了这一步后,就基本完成了,不过还需要配置反向代理。
反向代理
dns 记录
进入 dnspod 管理页面,新增 dns 记录,如下
新增代理
进入 npm 管理页面,新增代理
点击 Add Proxy Host
编辑新增内容,按照如图所示编辑,打码的部分为服务的 ip 或者域名。
开启 ssl,点击 ssl,ssl 证书选择已经申请的,如果没有,这里不做介绍。
强制 ssl 开启,http2 开启,如图:
最后点击 save 保存。到这反向代理也配置完成。
但是访问会出现
修改 pmail 配置文件,关闭前台进程,ctrl+c,关闭。
pmail 的配置文件已经挂载到本地了,在 config/config.json
下,
进入 pmail 文件夹,编辑 config.json
|
|
- httpsEnabled 配置改成 2
- sslType 改成 1
启动测试
修改配置后,重新启动 docker 容器。
在 docker-compose.yml 所在目录下,运行
|
|
浏览器通过域名访问或者 ip+端口访问即可
最终效果如下,
测试,发送测试邮件给 163 邮箱
163 邮箱 接收
总结:
搭建过程较为繁琐,需要的前置条件较多.
pmail 界面相较于其他邮箱要差一些,没有多用户功能,最新版已增加,实现了基本的收发功能。基本满足个人使用。
感谢作者的开源精神。
最后继续附上 pmail 的 GitHub 地址:https://github.com/Jinnrry/PMail/
附录
配置信息详解
|
|