邮政是一个免费的开源邮件服务器,用于发送和接收电子邮件。 它是用Ruby和JavaScript编写的。 您可以轻松地在自己的服务器上安装邮政。 它还可以帮助您提供减少垃圾邮件所需的正确DNS信息。 邮政被许多机构用来每天发送和接收邮件。
在本教程中,我们将在Ubuntu 17.04上安装邮政服务器。
条件
- 最小Ubuntu 17.04服务器。 推荐8 GB RAM。
- 根权限 本指南以root用户身份编写,如果以sudo用户身份登录,请运行sudo -i 。
- 指向您的服务器的域名。
更新基本系统
在安装任何软件包之前,建议您使用以下命令更新软件包和存储库。
apt update && apt -y upgrade
shutdown -r now
更新系统后,继续安装Ruby。
安装Ruby
Postal是用Ruby编写的,因此需要在系统上安装Ruby 2.3或更高版本。 在本教程中,我们将使用RVM安装最新版本的Ruby。 运行以下命令在服务器上添加RVM的GPG密钥。
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
现在使用以下命令安装RVM。
curl -sSL https://get.rvm.io | bash -s stable
要立即使用RVM,您需要运行以下命令。
source /etc/profile.d/rvm.sh
现在使用以下命令获取Ruby列表。
rvm list known
您将看到以下输出:
代码语言:javascript复制# MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.7[-head] # security released on head
[ruby-]1.9.1[-p431]
[ruby-]1.9.2[-p330]
[ruby-]1.9.3[-p551]
[ruby-]2.0.0[-p648]
[ruby-]2.1[.10]
[ruby-]2.2[.6]
[ruby-]2.3[.3]
[ruby-]2.4[.0]
ruby-head
现在使用以下命令在列表中安装最新版本的Ruby。
rvm install 2.4
使用以下命令使用Ruby版本。
rvm use 2.4
您可以使用以下命令验证Ruby的版本。
ruby -v
如果Ruby安装成功,您应该会看到以下输出。
代码语言:javascript复制root@ubuntu:~# ruby -v
ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-linux]
安装RubyGem
要在服务器上运行Postel,您需要在服务器上安装bundler和procodile 。 bundler是Ruby gem应用程序的依赖管理器。 procodile是Ruby应用程序的流程管理工具。 使用以下命令安装两个应用程序。
gem install bundler
gem install procodile
安装MariaDB数据库服务器
MariaDB是MySQL数据库服务器的一个分支。 MySQL是用于以表格格式存储数据的关系数据库管理系统软件。 要在服务器上安装MariaDB,请运行:
apt -y install mariadb-client mariadb-server libmysqlclient-dev
运行以下命令启动MariaDB并使其在引导时启动。
systemctl start mariadb
systemctl enable mariadb
现在运行以下命令来保护您的MariaDB安装。
mysql_secure_installation
上述命令将运行一个脚本来保护新鲜的MariaDB安装。 该脚本将要求现有的root用户密码,我们刚刚安装了MariaDB,root密码未设置,只需按Enter继续。
该脚本会询问您是否要为您的MariaDB安装设置root密码,然后选择y并为安装设置一个强密码。 大部分问题是不言自明的,你应该回答所有问题的答案。
邮政安装数据库
要创建一个Postal的数据库,我们需要先登录到MySQL命令行。 运行以下命令相同。
mysql -u root -p
上述命令将登录到root用户的MySQL shell,它将提示输入root用户的密码。 提供登录密码。现在运行以下查询为您的邮政安装创建一个新的数据库。
CREATE DATABASE postal CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
上述查询将创建一个名为邮政的新数据库。 请确保在每个查询结尾使用分号,因为查询始终以分号结尾。
现在通过您创建的数据库为数据库用户提供所有权限。 运行以下命令。
代码语言:javascript复制GRANT ALL ON `postal`.* TO `postal`@`127.0.0.1` IDENTIFIED BY "StrongPassword";
用强大而安全的密码替换StrongPassword 。
数据库将自动由邮政编写,但为此,我们需要为邮政用户提供适当的权限。 运行以下命令为以邮递开始的所有用户提供特权。
代码语言:javascript复制GRANT ALL PRIVILEGES ON `postal-%` . * to `postal`@`127.0.0.1` IDENTIFIED BY "StrongPassword";
现在运行以下命令立即对数据库权限应用更改。
FLUSH PRIVILEGES;
使用以下命令退出MySQL提示符。
EXIT;
安装RabbitMQ
RabbitMQ是用Erlang语言编写的,在本教程中我们将安装最新版本的Erlang到服务器中。 使用以下命令安装Erlang。
apt -y install erlang
通过运行导入GPG密钥:
curl -sL https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add -
现在通过运行以下命令添加RabbitMQ存储库:
add-apt-repository 'deb http://www.rabbitmq.com/debian/ testing main'
通过运行以下命令更新存储库索引。
apt update
现在您可以通过运行以下命令来安装RabbitMQ。
apt -y install rabbitmq-server
RabbitMQ现已安装在您的系统上。
安装RabbitMQ
您可以通过运行以下命令启动RabbitMQ服务器进程。
systemctl start rabbitmq-server
要在引导时自动启动RabbitMQ,请运行以下命令。
systemctl enable rabbitmq-server
现在运行以下命令在RabbitMQ服务器中为Postal创建虚拟主机。
rabbitmqctl add_vhost /postal
现在通过运行以下命令为Postal添加一个RabbitMQ用户。
rabbitmqctl add_user postal StrongPassword
替换StrongPassword是非常强的密码。
现在将RabbitMQ虚拟主机的适当权限设置为RabbitMQ用户。
rabbitmqctl set_permissions -p /postal postal ".*" ".*" ".*"
安装Git和Node.js
Git将用于检索安装程序包和几个依赖关系。 运行以下命令在系统上安装Git。
apt -y install git
您可以使用以下命令检查版本,检查Git是否安装成功。
git --version
你应该得到以下输出。
代码语言:javascript复制root@ubuntu:~# git --version
git version 2.11.0
Node.js将用于编译JavaScript库。 使用以下命令安装软件。
apt -y install nodejs
您可以通过运行以下命令来检查Node.js是否已成功安装。
nodejs -v
你应该得到以下输出。
代码语言:javascript复制root@ubuntu:~# nodejs -v
v4.7.2
现在我们已经准备好所有的依赖项,可以安装邮政。
安装邮政
邮政应作为自己的隔离用户运行。 运行以下命令创建新用户。
useradd -r -m -d /opt/postal -s /bin/bash postal
上述命令将创建一个用户名为postal的新用户,并将主目录设置为/ opt / postal 。
允许Ruby通过运行以下命令来监听特权端口。
setcap 'cap_net_bind_service= ep' /usr/local/rvm/rubies/ruby-2.4.0/bin/ruby
现在一切都准备好了,请下载最新的邮件档案,并使用以下命令将邮件解压缩为邮政用户。
wget https://postal.atech.media/packages/stable/latest.tgz -O - | sudo -u postal tar zxpv -C /opt/postal
现在通过运行以下命令创建一个符号链接到Postal二进制文件。
ln -s /opt/postal/bin/postal /usr/bin/postal
现在您可以从任何目录与您的邮政服务器进行互动。 对于运行下一个命令,您需要以邮政用户身份登录到shell。
su - postal
现在,您将需要安装运行应用程序所需的所有ruby依赖项。
postal bundle /opt/postal/vendor/bundle
一旦安装了依赖项,您将需要生成默认的配置文件。
postal initialize-config
上述命令将为您的邮政安装生成必需的配置,包括各种密钥和证书。 这也将生成默认的postal.yml配置文件。 你应该得到以下输出。
代码语言:javascript复制postal@ubuntu:~$ postal initialize-config
Created example config file at /opt/postal/config/postal.yml
Created new private key for Let's Encrypt
Created new signing key for DKIM & HTTP requests
Created new private key for default fast server TLS connections
Created new self signed certificate for default fast server TLS connections
现在您需要在postal.yml配置中配置几个选项。
nano /opt/postal/config/postal.yml
找到以下行:
代码语言:javascript复制web:
# The host that the management interface will be available on
host: postal.example.com
将主机名更改为实际的域名。 此外,找到以下几行。
代码语言:javascript复制main_db:
# Specify the connection details for your MySQL database
host: 127.0.0.1
username: postal
password: p0stalpassw0rd
database: postal
message_db:
# Specify the connection details for your MySQL server that will be house the
# message databases for mail servers.
host: 127.0.0.1
username: postal
password: p0stalpassw0rd
prefix: postal
根据您创建的数据库更改用户名,密码和数据库名称。 此外,找到以下行:
代码语言:javascript复制rabbitmq:
# Specify the connection details for your RabbitMQ server.
host: 127.0.0.1
username: postal
password: StrongPassword
vhost: /postal
根据vhost和RabbitMQ创建的用户更改上述配置。 接下来,找到DNS配置。
代码语言:javascript复制dns:
# Specifies the DNS record that you have configured. Refer to the documentation at
# https://github.com/atech/postal/wiki/Domains-&-DNS-Configuration for further
# information about these.
mx_records:
- mx.postal.example.com
smtp_server_hostname: postal.example.com
spf_include: spf.postal.example.com
return_path: rp.postal.example.com
route_domain: routes.postal.example.com
track_domain: track.postal.example.com
使用您希望与邮件服务器一起使用的实际域更改上述域。
保存文件并退出编辑器。 现在,通过运行以下命令初始化数据库和其他资源:
postal initialize
通过运行以下命令创建邮政管理员用户。
postal make-user
上述命令将要求您提供电子邮件地址,用户名和密码。 上述命令将生成以下输出。
代码语言:javascript复制postal@ubuntu:~$ postal make-user
Postal User Creator
Enter the information required to create a new Postal user.
This tool is usually only used to create your initial admin user.
E-Mail Address : me@liptanbiswas.com
First Name : Liptan
Last Name : Biswas
Initial Password: : **************
User has been created with e-mail address me@liptanbiswas.com
Postal的命令行设置现已完成,您可以使用以下命令启动服务器。
postal start
要检查服务是否正确启动,请运行以下命令。
postal status
你应该得到以下输出。
代码语言:javascript复制postal@ubuntu:~$ postal status
Procodile Version 1.0.17
Application Root /opt/postal
Supervisor PID 5319
Started 2017-07-21 07:26:19 0000
|| web
|| Quantity 1
|| Command bundle exec puma -C config/puma.rb
|| Respawning 5 every 3600 seconds
|| Restart mode usr1
|| Log path none specified
|| Address/Port none
|| => web.1 Running 07:26 pid:5325 respawns:0 port:- tag:-
|| worker
|| Quantity 1
|| Command bundle exec ruby script/worker.rb
|| Respawning 5 every 3600 seconds
|| Restart mode start-term
|| Log path none specified
|| Address/Port none
|| => worker.1 Running 07:26 pid:5327 respawns:0 port:- tag:-
|| cron
|| Quantity 1
|| Command bundle exec rake postal:cron
|| Respawning 5 every 3600 seconds
|| Restart mode term-start
|| Log path none specified
|| Address/Port none
|| => cron.1 Running 07:26 pid:5329 respawns:0 port:- tag:-
|| smtp
|| Quantity 1
|| Command bundle exec rake postal:smtp_server
|| Respawning 5 every 3600 seconds
|| Restart mode usr1
|| Log path none specified
|| Address/Port none
|| => smtp.1 Running 07:26 pid:5332 respawns:0 port:- tag:-
|| requeuer
|| Quantity 1
|| Command bundle exec rake postal:requeuer
|| Respawning 5 every 3600 seconds
|| Restart mode term-start
|| Log path none specified
|| Address/Port none
|| => requeuer.1 Running 07:26 pid:5334 respawns:0 port:- tag:-
要停止邮政,您可以随时运行以下命令。
postal stop
配置Nginx作为反向代理
出于安全考虑,Postal Web界面和API应该位于任何生产Web服务器(如Apache或Nginx)的后面。 在本教程中,我们将安装和配置Nginx作为反向代理。
通过运行以下命令安装Nginx Web服务器。
apt -y install nginx
建议使用SSL访问Nginx。 您可以使用自签名证书或者让我们加密免费的SSL证书或商业证书。 在本教程中,我们将使用我们加密免费的SSL。
安装我们通过运行以下命令来加密客户端也称为certbot。
apt -y install certbot
一旦安装完成,请运行以下命令从“加密证书颁发机构”获取证书。 确保域名指向您的服务器,因为certbot将在提供证书之前检查域名权限。 用您的实际域名替换mail.example.com 。
certbot certonly --standalone -d mail.example.com
生成证书后,它们将存储在/etc/letsencrypt/live/mail.example.com中 。
我们加密SSL在90天内到期,因此建议您为证书设置自动续订。 运行以下命令打开crontab文件。
crontab -e
在crontab文件中输入以下行。
30 1 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.log
上述cron工作将在上午1:30每周一自动运行,如果您的证书到期,则会自动续订。
现在通过运行以下命令为您的网站创建一个新的服务器块。
nano /etc/nginx/conf.d/mail.example.com.conf
使用以下内容填充文件。
代码语言:javascript复制server {
listen [::]:80;
listen 0.0.0.0:80;
server_name mail.example.com;
return 301 https://$host$request_uri;
}
server {
listen [::]:443 ssl;
listen 0.0.0.0:443 ssl;
root /opt/postal/public;
server_name mail.example.com;
ssl_certificate /etc/letsencrypt/live/mail.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mail.example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
ssl_prefer_server_ciphers on;
ssl_ciphers EECDH ECDSA AESGCM:EECDH aRSA AESGCM:EECDH ECDSA SHA512:EECDH ECDSA SHA384:EECDH ECDSA SHA256:ECDH AESGCM:ECDH AES256:DH AESGCM:DH AES256:RSA AESGCM:!aNULL:!eNULL:!LOW:!RC4:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS;
location / {
client_max_body_size 50M;
try_files $uri $uri/index.html $uri.html @puma;
}
location /assets {
add_header Cache-Control max-age=3600;
}
location @puma {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_pass http://127.0.0.1:5000;
}
}
保存文件并退出编辑器。 现在通过运行重新启动nginx web服务器。
systemctl restart nginx
要启动nginx在引导时自动启动,请运行以下命令。
systemctl enable nginx
您现在可以通过您最喜爱的网络浏览器浏览以下网站访问邮政。
https://mail.example.com
配置邮政
浏览上述网站后,您将看到以下界面。
输入您之前创建的用户的电子邮件地址和密码。 登录后,系统将要求您创建一个新的组织。
提供组织的名称。 您可以选择使用自动生成的短名称,也可以自己指定一个。 用SMTP服务器进行身份验证时,使用短名称作为用户名。 它应该只包含字母,数字和连字符。
创建组织后,系统将要求您创建一个新的邮件服务器。
提供电子邮件服务器的名称,短名称和模式。 在实时模式下,所有电子邮件都会正常发送和传送,但在开发模式下,只能在网页界面中看到。
添加邮件服务器后,您将需要在邮件服务器中添加新的域。 单击“ 域”选项卡并创建一个新的域名。
添加域名后,您需要配置域名的DNS。 您将需要为SPF和DKIM添加两个TXT记录。 您还需要添加CNAME记录和MX记录以返回路径和邮件传递。 配置DNS后,单击检查我的记录是否正确按钮验证DNS配置。
现在,您将需要创建SMTP凭据来发送和接收电子邮件。
选择类型为SMTP或API。 提供SMTP凭据的名称,选择您希望处理电子邮件地址的方式。
完成后,您可以回到概览选项卡,您将看到发送或接收电子邮件地址所需的信息。
结论
在本教程中,我们使用Ubuntu 17.04上的邮件成功设置了一个功能齐全的邮件服务器。 您可以使用邮件服务器发送和接收组织的电子邮件。