例子linux

例子Linux教程

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成功设置了一个功能齐全的邮件服务器。您可以使用邮件服务器发送和接收您组织的电子邮件。

发表评论