前情提要
上次搭建了一个Hydro-OJ
,注册需要邮箱验证,想着要不一步到位顺带把邮件系统也处理了(x)
系统选择
有很多酷炫且开源的邮件系统,github
上能搜到很多,比如mailcow,postal等。本片主要介绍postal
的搭建方式。
Postal 简介
官网:postal
Postal is a complete and fully featured mail server for use by websites & web servers. Think Sendgrid, Mailgun or Postmark but open source and ready for you to run on your own servers. Postal was developed by Krystal to serve its own mail processing requirements and we have since decided that it should be released as an open source project for the community.
摘自官网,懒癌晚期,就不翻译了(x)
本篇主要讲解如何使用docker
进行安装,即如何利用官方推荐的安装方式安装postal
邮件系统。
本篇均以Ubuntu/Debian
系统为例,其他包管理器的系统可以做类似参考——因为主要工作是容器做的,所以和系统版本不是直接相关。
准备工作
服务器配置
官方强烈建议服务器至少拥有以下配置:
- 至少
4GB
RAM
内存 - 至少
2
个CPU
核心 - 至少
100GB
的硬盘空间
但是实测之后发现,如果服务体量不大的话,2~3G
内存也是基本够用的,硬盘空间也不需要100G
,大硬盘只是用于存储邮件和备份。
另外,邮件系统需要一个可控域名,即需要一个域名,同时需要能够设置子域名。
系统环境
1 | sudo apt install git curl jq |
如果上述命令不能正常执行,可以尝试添加sudo
,或者将代码克隆到常规目录下,再利用sudo cp
等方式复制到对应目录下。
Docker
服务器中已经安装了docker
,并且能够以非root
身份运行。
1 | sudo apt install docker |
不会安装的话可以参考官方文档
如果不能以普通用户运行
docker
的话可以参考这篇博客:不输入sudo运行Docker · xiabee-瞎哔哔
MariaDB
1 | docker run -d \ |
这里直接利用docker
运行所需数据库,其中数据库设置为postal
,root
密码设置为postal
;如需修改,直接将MARIADB_DATABASE=xxx
和MARIADB_ROOT_PASSWORD=xxx
修改掉就行,之后的配置中如果遇到连接服务器的服务,改为对应密码即可。
RabbitMQ
1 | docker run -d \ |
同样,利用docker
运行消息队列。需要改密码的话将RABBITMQ_DEFAULT_PASS=xxx
等改掉即可。
docker-compose 2
postal
需要利用2.0
以上的docker-compose
进行安装。
查看docker-compose
版本:
1 | docker-compose version |
如何安装高版本的docker-compose
可以参考这篇博客:安装 docker-compose 2 · xiabee-瞎哔哔
安装过程
这里假设我们使用的域名为yourdomain.com
初始化 postal
1 | postal bootstrap postal.yourdomain.com |
在初始化之后,需要将postal.yourdomain.com
解析到服务器的ip
上,如果在本地搭建则解析到localhost
或者127.0.0.1
上。
同时,上述命令会在 /opt/postal/config
中生成三个文件:
postal.yml
:主要配置文件signing.key
各项签名的私钥Caddyfile
Caddy
服务器的配置文件(Caddy
类似于Nginx
,用作代理服务器)
初始化数据库
1 | postal initialize |
创建第一个用户,执行命令过程中会提示你设置用户名和密码。
运行 postal
1 | postal start |
此时会开始运行容器,如果没有相关镜像会直接拉取,耐心等待即可。
注意:需要利用2.0
以上的docker-compose
进行安装,确保宿主机中的docker-compose
版本高于2.0
Caddy (可选)
1 | docker run -d \ |
Caddy
为代理服务器,可选项很多,比如Nginx
,Appache
等,甚至可以不装(如果不需要https
的话)
最终应该看到这个样子:
1 | postal status |
注意事项
上述方法安装的postal
服务端运行在5000
端口,如果浏览器访问不了的话检查防火墙是否放行该端口的流量。
如果还是不能访问,检查/opt/postal/config
目录下的postal.yml
,找到web_server
模块:
1 | web_server: |
原文件默认将地址绑定到127.0.0.1
,只能在域内访问,从域外访问就会被拦截。如果VPS
没有特定设置的话,直接把绑定地址设置为0.0.0.0
,允许任何流量即可:
1 | web_server: |
同时,如果没有设置SSL
证书的话,可以把服务协议改为http
1 | web: |
最终效果
浏览器访问http://postal.yourdomain.com:5000
,即可看到以下界面:
到目前为止,postal
已经搭建完毕,具体的设置我们下期再写。