Почтовый сервер · 12 min read · Nov 06, 2025
Как создать полнофункциональный почтовый сервер с помощью Postal
Postal — это бесплатный и открытый полноценный почтовый сервер для отправки и получения электронных писем. Он написан на Ruby и JavaScript. Вы можете легко установить Postal на своем собственном сервере. Он также помогает предоставить правильную информацию DNS, необходимую для снижения спама. Postal используется многими организациями для ежедневной отправки и получения почты.
В этом руководстве мы установим почтовый сервер Postal на Ubuntu 17.04.
Предварительные условия
- Минимальный сервер Ubuntu 17.04. Рекомендуется 8 ГБ ОЗУ.
- Привилегии root. Это руководство написано от имени пользователя root, если вы вошли как пользователь sudo, выполните sudo -i.
- доменное имя, указывающее на ваш сервер.
Обновление базовой системы
Перед установкой любого пакета рекомендуется обновить пакеты и репозиторий с помощью следующей команды.
apt update && apt -y upgradeshutdown -r nowПосле обновления вашей системы продолжайте установку Ruby.
Установка Ruby
Postal написан на Ruby, поэтому необходимо установить Ruby 2.3 или выше на вашу систему. В этом руководстве мы установим последнюю версию Ruby с помощью RVM. Выполните следующую команду, чтобы добавить GPG-ключ RVM на ваш сервер.
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
Чтобы запустить Postal на вашем сервере, вам нужно будет установить bundler и procodile на вашем сервере. bundler — это менеджер зависимостей для приложений Ruby gem. procodile — это инструмент управления процессами для приложений Ruby. Установите оба приложения с помощью следующих команд.
gem install bundlergem install procodileУстановка сервера баз данных MariaDB
MariaDB — это форк сервера баз данных MySQL. MySQL — это программное обеспечение для управления реляционными базами данных, используемое для хранения данных в табличном формате. Чтобы установить MariaDB на вашем сервере, выполните:
apt -y install mariadb-client mariadb-server libmysqlclient-devВыполните следующие команды, чтобы запустить MariaDB и включить его автозапуск при загрузке.
systemctl start mariadbsystemctl enable mariadbТеперь выполните следующие команды, чтобы обеспечить безопасность вашей установки MariaDB.
mysql_secure_installationВышеуказанная команда запустит скрипт для обеспечения безопасности свежей установки MariaDB. Скрипт спросит существующий пароль пользователя root, мы только что установили MariaDB, пароль root не установлен, просто нажмите Enter, чтобы продолжить.
Скрипт спросит, хотите ли вы установить пароль root для вашей установки MariaDB, выберите y и установите надежный пароль для установки. Большинство вопросов являются самоочевидными, и вы должны ответить да или y на все вопросы.
Настройка базы данных для Postal
Чтобы создать базу данных для Postal, нам нужно будет сначала войти в командную строку MySQL. Выполните следующую команду для этого.
mysql -u root -pВышеуказанная команда войдет в оболочку MySQL от имени пользователя root, она запросит пароль пользователя root. Укажите пароль для входа. Теперь выполните следующий запрос, чтобы создать новую базу данных для вашей установки Postal.
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, но для этого нам нужно будет предоставить соответствующие разрешения пользователям Postal. Выполните следующую команду, чтобы предоставить привилегии всем пользователям, начинающимся с 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-serverRabbitMQ теперь установлен на вашей системе.
Настройка RabbitMQ
Вы можете запустить процесс сервера RabbitMQ, выполнив следующую команду.
systemctl start rabbitmq-serverЧтобы автоматически запустить RabbitMQ при загрузке, выполните следующую команду.
systemctl enable rabbitmq-serverТеперь выполните следующую команду, чтобы создать виртуальный хост для Postal на сервере RabbitMQ.
rabbitmqctl add_vhost /postalТеперь добавьте пользователя RabbitMQ для Postal, выполнив следующую команду.
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.
Установка Postal
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Теперь, когда все готово, загрузите последнюю архивную версию Postal и извлеките архив от имени пользователя Postal с помощью следующей команды.
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Теперь вы можете взаимодействовать с вашим сервером Postal из любого каталога. Для выполнения следующих команд вам нужно будет войти в оболочку как пользователь postal.
su - postalТеперь вам нужно будет установить все зависимости Ruby, необходимые для запуска приложения.
postal bundle /opt/postal/vendor/bundleПосле установки зависимостей вам нужно будет сгенерировать файлы конфигурации по умолчанию.
postal initialize-configВышеуказанная команда сгенерирует необходимую конфигурацию для вашей установки Postal, включая различные ключи и сертификаты. Это также создаст файл конфигурации 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
Измените вышеуказанную конфигурацию в соответствии с vhost и пользователем, созданными для RabbitMQ. Далее найдите настройки 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, выполнив следующую команду.
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, вы всегда можете выполнить следующую команду.
postal stopНастройка Nginx как обратного прокси
По соображениям безопасности веб-интерфейс и API Postal должны находиться за любым производственным веб-сервером, таким как Apache или Nginx. В этом руководстве мы установим и настроим Nginx как обратный прокси.
Установите веб-сервер Nginx, выполнив следующую команду.
apt -y install nginxРекомендуется использовать SSL для доступа к Nginx. Вы можете использовать либо самоподписанный сертификат, либо бесплатный SSL-сертификат Let’s Encrypt, либо коммерческий сертификат. В этом руководстве мы будем использовать бесплатный SSL-сертификат Let’s Encrypt.
Установите клиент 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 истекают через 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, выполнив.
systemctl restart nginxЧтобы включить nginx для автоматического запуска при загрузке, выполните следующую команду.
systemctl enable nginxТеперь вы можете получить доступ к Postal, перейдя по следующему веб-сайту через ваш любимый веб-браузер.
https://mail.example.comНастройка Postal
После того как вы перейдете на указанный выше сайт, вы увидите следующий интерфейс.

Введите адрес электронной почты и пароль пользователя, которого вы создали ранее. После входа в систему вам будет предложено создать новую организацию.

Укажите название организации. Вы можете выбрать автоматически сгенерированное короткое имя или указать его самостоятельно. Короткие имена используются в качестве имени пользователя при аутентификации на SMTP-сервере. Они должны содержать только буквы, цифры и дефисы.

После создания организации вам будет предложено создать новый почтовый сервер.

Укажите имя, короткое имя и режим почтового сервера. В режиме Live все электронные письма маршрутизируются и доставляются нормально, но в режиме разработки они видны только в веб-интерфейсе.

После добавления почтового сервера вам нужно будет добавить новый домен в почтовый сервер. Нажмите на вкладку Domains и создайте новое доменное имя.

После добавления доменного имени вам нужно будет настроить DNS для домена. Вам нужно будет добавить две TXT-записи для SPF и DKIM. Вам также нужно будет добавить запись CNAME и MX для обратного пути и доставки почты. После настройки DNS нажмите кнопку Проверить, правильны ли мои записи для проверки конфигурации DNS.

Теперь вам нужно будет создать учетные данные SMTP для отправки и получения электронных писем.

Выберите тип как SMTP или API. Укажите имя для учетных данных SMTP, выберите, как вы хотите обрабатывать адрес электронной почты.
После завершения вы можете вернуться на вкладку Обзор, и вы увидите информацию, необходимую для отправки или получения адреса электронной почты.

Заключение
В этом руководстве мы успешно настроили полнофункциональный почтовый сервер с помощью Postal на Ubuntu 17.04. Вы можете использовать почтовый сервер для отправки и получения электронных писем вашей организации.
Get new posts in your inbox
No spam. Unsubscribe anytime.