Postal是一个免费开源的完整邮件服务器,用于发送和接收电子邮件。它是用Ruby和JavaScript编写的。您可以在自己的服务器上轻松安装Postal。它还可以帮助您提供减少垃圾邮件所需的正确DNS信息。许多组织使用邮政每天发送和接收邮件。
在本教程中,我们将在Ubuntu 17.04上安装邮政邮件服务器。
先决条件
最小的Ubuntu 17.04服务器。建议使用8 GB RAM。
Root权限。本指南以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
您将看到以下输出:
# 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安装成功,您应该看到以下输出。
root@ubuntu:~# ruby -v
ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-linux]
安装 Ruby Gems
要在服务器上运行Postel,您需要在服务器上安装bundler和procodile。bundler是Rubygem应用程序的依赖管理器。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安装设置根密码,选择y并为安装设置强密码。大多数问题都是不言自明的,你应该对所有问题都回答“是”或“是”。
设置邮件数据库
要为Postal创建数据库,我们需要先登录MySQL命令行。运行以下命令。
mysql -u root -p
上面的命令将登录到root用户的MySQL shell,它将提示输入root用户的密码。提供登录密码。现在运行以下查询,为您的邮件安装创建一个新的数据库。
CREATE DATABASE postal CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
上述查询将创建一个名为postal的新数据库。确保在每个查询的末尾使用分号,因为查询总是以分号结尾。
现在,为您的数据库用户提供您创建的数据库的所有权限。运行以下命令。
GRANT ALL ON `postal`.* TO `postal`@`127.0.0.1` IDENTIFIED BY "StrongPassword";
将StrongPassword替换为非常强大和安全的密码。
数据库将由邮件自动写入,但为此,我们需要向邮政用户提供适当的权限。运行以下命令,为所有以postal-开头的用户提供权限。
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
您应该得到以下输出。
root@ubuntu:~# git --version
git version 2.11.0
Node.js将用于编译JavaScript库。使用以下命令安装软件。
apt -y install nodejs
您可以通过运行以下命令检查Node.js是否已成功安装。
nodejs -v
您应该得到以下输出。
root@ubuntu:~# nodejs -v
v4.7.2
现在我们已经准备好了所有的依赖项,您可以安装Postal了。
安装邮件
邮件应该作为自己的独立用户运行。运行以下命令以创建新用户。
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配置文件。您应该得到以下输出。
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
找到以下行:
web:
# The host that the management interface will be available on
host: postal.example.com
将主机名更改为您的实际域名。此外,请找到以下行。
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
根据您创建的数据库更改用户名、密码和数据库名称。进一步地,找到这些线:
rabbitmq:
# Specify the connection details for your RabbitMQ server.
host: 127.0.0.1
username: postal
password: StrongPassword
vhost: /postal
根据为RabbitMQ创建的vhost和用户更改上述配置。接下来,找到DNS配置。
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
上述命令将要求您输入电子邮件地址、用户名和密码。上述命令将生成以下输出。
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 : [email protected]
First Name : Liptan
Last Name : Biswas
Initial Password: : **************
User has been created with e-mail address [email protected]
Postal的命令行设置现已完成,您可以使用以下命令启动服务器。
postal start
要检查服务是否正确启动,请运行以下命令。
postal status
您应该得到以下输出。
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。您可以使用自签名证书或Let’s Encrypt免费SSL证书或商业证书。在本教程中,我们将使用Let’s Encrypt免费SSL。
通过运行以下命令安装Let’s Encrypt客户端,也称为certbot。
apt -y install certbot
安装完成后,运行以下命令从Let’s Encrypt证书颁发机构获取证书。确保域名指向您的服务器,因为certbot将在提供证书之前检查域名授权。将mail.example.com替换为您的实际域名。
certbot certonly --standalone -d mail.example.com
生成证书后,它们将存储在/etc/letsencrypt/live/mail.example.com中。
Let’s Encrypt 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
用以下内容填充文件。
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
现在,您可以通过您最喜欢的网络浏览器浏览以下网站来访问Postal on。
https://mail.example.com
配置邮政
浏览上述网站后,您将看到以下界面。

输入您之前创建的用户的电子邮件地址和密码。登录后,系统将要求您创建一个新组织。

提供组织的名称。您可以选择使用自动生成的短名称,也可以自己指定一个。在使用SMTP服务器进行身份验证时,短名称用作用户名。它应该只包含字母、数字和连字符。

创建组织后,系统将要求您创建新的邮件服务器。

提供电子邮件服务器的名称、简称和模式。在实时模式下,所有电子邮件都会正常路由和传递,但在开发模式下,它们仅在web界面中可见。

添加邮件服务器后,您需要在邮件服务器中添加一个新域。单击“域”选项卡并创建新域名。

添加域名后,您需要为该域配置DNS。您需要为SPF和DKIM添加两条TXT记录。您还需要为返回路径和邮件传递添加CNAME记录和MX记录。配置DNS后,单击“检查我的记录是否正确”按钮以验证DNS配置。

现在,您需要创建用于发送和接收电子邮件的SMTP凭据。

选择类型为SMTP或API。提供SMTP凭据的名称,选择您希望如何处理电子邮件地址。
完成后,您可以返回“概述”选项卡,您将看到发送或接收电子邮件地址所需的信息。

结论
在本教程中,我们在Ubuntu 17.04上使用Postal成功设置了一个功能齐全的邮件服务器。您可以使用邮件服务器发送和接收您组织的电子邮件。
-
扫码下载安卓APP
-
微信扫一扫关注我们
微信扫一扫打开小程序
手Q扫一扫打开小程序
-
返回顶部
发表评论