如何在 CentOS 7 上安装 Mailtrain Newsletter 应用程序
在此页
- 要求
- 更新基础系统
- 安装 Node.js
- 安装 MariaDB
- 安装依赖项
- 下载并安装 Mailtrain
- 设置系统服务
- 设置Logrotate
- 将 Nginx 设置为反向代理
- 配置防火墙和 SELinux
- 访问网络界面
Mailtrain 是一个在 Node.js 上编写的开源自托管时事通讯应用程序。它使用非常流行的 Node.js 库 Nodemailer 来发送电子邮件。它免费提供出色的自动化和分析。您可以使用 CSV 文件导入轻松创建或导入包含一百万个电子邮件地址的电子邮件列表。它还支持自定义字段和表单。它通过触发器提供自动化,触发器可以在触发操作时向特定用户发送特定消息。您可以使用任何电子邮件提供商发送支持 SMTP 协议以及支持 Amazon SES、ZoneMTA、SendGrid 和 Mailgun 等的时事通讯。它提供多个所见即所得的编辑器来创建漂亮的时事通讯模板。
在本教程中,我们将在 CentOS 7 上安装 Mailtrain 以及所有必需的依赖项。我们还将设置 Nginx 作为反向代理以在标准 HTTP 端口上为应用程序提供服务。
要求
Metabase 需要至少 1GB 的 RAM。在整个教程中将安装所有必需的依赖项。您将需要具有根访问权限的 CentOS 7 的最小安装。如果您以非 root 用户身份登录,则可以运行 sudo -i 切换到 root 用户。
更新基础系统
在安装任何包之前,建议您使用以下命令更新包和存储库。
yum -y update
安装 Node.js
Mailtrain 需要 Node.js,因为它是使用 Nodemailer 构建的。 Node.js 是一种非常流行的 JavaScript 运行时,而 Nodemailer 是 Node.js 应用程序发送电子邮件的模块。
添加 Node.js 8.x 存储库:
curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash -
安装 Node.js。
yum -y install nodejs
安装 MariaDB
要存储 Mailtrain 数据库,我们需要安装 MariaDB。 MariaDB 是 MySQL 的一个分支
将 MariaDB 存储库安装到您的系统中。
nano /etc/yum.repos.d/mariadb.repo
将以下行添加到文件中。
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
现在通过运行安装 MariaDB。
yum -y install mariadb-server mariadb
使用以下命令启动 MariaDB 并使其在引导时启动。
systemctl start mariadb
systemctl enable mariadb
现在运行以下命令来保护您的 MySQL 或 MariaDB 安装。
mysql_secure_installation
它将运行一个小脚本,要求您提供 MariaDB 的根密码。由于我们刚刚安装了MariaDB,所以没有设置root密码,直接回车继续。它会问你是否要为你的 MariaDB 安装设置一个 root 密码,选择 y 并为安装设置一个强密码。它还会要求您删除测试数据库和匿名用户。大多数问题都是不言自明的,您应该对所有问题回答是或 y。
Mailtrain 需要两个数据库用户才能工作,一个用于管理 Mailtrain 数据库,另一个用于生成工作人员报告。
要创建数据库,我们需要先登录 MySQL 命令行。同样运行以下命令。
mysql -u root -p
这将提示您输入密码,提供您之前设置的 MySQL 的根密码。现在运行以下查询为您的 Mailtrain 安装创建一个新数据库。
CREATE DATABASE mailtrain CHARACTER SET utf8 COLLATE utf8_general_ci;
上面的查询将创建一个名为 mailtrain 的数据库。确保在每个查询的末尾使用分号,因为查询始终以分号结尾。创建数据库后,您可以创建一个新用户并授予该用户对数据库的所有权限。不建议对数据库使用 root 用户。要创建新的数据库用户,请运行以下查询。
CREATE USER 'mailtrain'@'localhost' IDENTIFIED BY 'StrongPassword';
上面的查询将创建一个用户名为 mailtrain 的用户。您可以使用任何首选用户名而不是 mailtrain。用强密码替换 StrongPassword。现在为您的数据库用户提供对您创建的数据库的适当权限。运行以下命令。
GRANT ALL PRIVILEGES ON mailtrain.* TO 'mailtrain'@'localhost';
现在为 Mailtrain RO 创建一个新用户。
CREATE USER 'mailtrain_ro'@'localhost' IDENTIFIED BY 'StrongROPassword';
通过 Mailtrain 数据库向 RO 用户提供读取访问权限。
GRANT SELECT ON mailtrain.* TO 'mailtrain_ro'@'localhost';
现在运行以下命令以立即应用对数据库权限的更改。
FLUSH PRIVILEGES;
使用 exit 命令退出 MySQL 提示符。
EXIT;
安装依赖
Mailtrain 需要更多的依赖才能工作。通过运行安装依赖项:
yum -y install ImageMagick git python redis bind-utils gcc-c++ make
ImageMagick 是一个处理位图图像的工具,Git 将用于克隆应用程序项目存储库。 Redis 是一个非常流行的会话缓存应用程序,Python、bind-utils、gcc-c++ 和 make 将用于编译应用程序文件。
启动 Redis 并使其自动启动:
systemctl start redis
systemctl enable redis
下载并安装 Mailtrain
使用 Git 克隆 Mailtrain 安装文件。
git clone git://github.com/Mailtrain-org/mailtrain.git /opt/mailtrain
创建一个新的 Mailtrain 用户来运行 Mailtrain 守护进程。这将确保 Mailtrain 在隔离环境中运行。
adduser mailtrain -d /opt/mailtrain
上面的命令将创建一个新用户 mailtrain 并且 /opt/mailtrain 将用作主目录。
运行以下命令切换到 Mailtrain 目录:
cd /opt/mailtrain
在继续之前,您应该生成一个随机字符串,用于加密会话数据。要生成随机字符串,您可以使用 pwgen 实用程序。
运行 yum -y install pwgen 以安装 pwgen 实用程序。运行 pwgen -1 64 以生成长度为 64 个字符的字符串。你会看见:
[ mailtrain]# pwgen -1 64
Poy0aeLalie5uew7eenanootehohLudiuleac5aigaekah1amokumeeg5aiG2ied
创建一个新的配置文件 production.toml。此文件中提供的配置会覆盖默认配置文件 default.toml。我们不应该修改默认的配置文件。创建一个新文件 production.toml 来存储覆盖配置。
nano config/production.toml
使用以下配置填充文件。
language="en"
user="mailtrain"
group="mailtrain"
rouser="nobody"
rogroup="nobody"
[log]
level="error"
[www]
host="localhost"
port="3000"
secret="RandomString"
remember=604800
proxy=true
tmpdir="/tmp"
[mysql]
user="mailtrain"
password="StrongPassword"
database="mailtrain"
port=3306
charset="utf8"
[redis]
enabled=true
[queue]
processes=5
[reports]
enabled=true
上述配置使 Mailtrain 以用户 mailtrain 和 Mailtrain Reports Worker 用户以用户 nobody 身份运行。此外,它将内置服务器配置为在端口 3000 上侦听本地主机。我们将 Nginx 设置为反向代理,以便可以通过标准 HTTP 端口访问 Mailtrain Web 界面。
将 secret= 中的 RandomString 替换为上面生成的随机字符串。将代理设置为 true,因为我们将在 Nginx 代理后面运行 Mailtrain 内置服务器。
设置您创建的用于存储 Mailtrain 数据的数据库的用户名、密码和数据库名称。
此外,创建一个新文件来存储 Worker Reports 的生产配置。
nano workers/reports/config/production.toml
使用以下配置填充文件。
[log]
level="error"
[mysql]
host="localhost"
user="mailtrain_ro"
password="StrongROPassword"
database="mailtrain"
port=3306
charset="utf8"
timezone="local"
现在下载所需的 Node.js 依赖项并安装软件:
npm install --production
安装应用程序后,您可以立即使用以下命令启动它:
NODE_ENV=production npm start
如果服务器正在运行,那么您应该会看到以下输出。
[ mailtrain]# NODE_ENV=production npm start
> start /opt/mailtrain
> node index.js
info Using local auth
但是我们不会直接启动应用程序,而是使用 systemd 服务。按 ctrl+C 停止执行。
将文件的所有权提供给 Mailtrain 用户,并从系统的其他非根用户中删除对配置的所有权限:
chown -R mailtrain:mailtrain /opt/mailtrain
chmod o-rwx /opt/mailtrain/config
设置系统服务
创建一个新的 Systemd 服务文件。使用 Systemd 而不是直接命令来运行服务器将确保服务器在失败和重新启动时自动启动。它使管理服务变得非常容易。
nano /etc/systemd/system/mailtrain.service
使用以下配置填充文件。
[Unit]
Description=Mailtrain Server
Requires=mariadb.service
After=syslog.target network.target
[Service]
user=mailtrain
group=mailtrain
Environment="NODE_ENV=production"
WorkingDirectory=/opt/mailtrain
ExecStart=/usr/bin/node index.js
Type=simple
Restart=always
RestartSec=10
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=mailtrain
[Install]
WantedBy=multi-user.target
启动 Mailtrain 并使其在引导时自动启动:
systemctl enable mailtrain
systemctl start mailtrain
要检查服务的状态,请运行:
systemctl status mailtrain
您应该看到该服务正在积极运行。
[ ~]# systemctl status mailtrain
? mailtrain.service - Mailtrain Server
Loaded: loaded (/etc/systemd/system/mailtrain.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2017-10-09 11:15:40 UTC; 9s ago
Main PID: 18092 (mailtrain)
CGroup: /system.slice/mailtrain.service
??18092 mailtrain
??18105 /usr/bin/node /opt/mailtrain/services/executor.js
??18112 /usr/bin/node /opt/mailtrain/services/sender.js
??18117 /usr/bin/node /opt/mailtrain/services/sender.js
??18125 /usr/bin/node /opt/mailtrain/services/sender.js
??18131 /usr/bin/node /opt/mailtrain/services/sender.js
??18136 /usr/bin/node /opt/mailtrain/services/sender.js
Oct 09 11:15:40 liptan-pc systemd[1]: Started Mailtrain Server.
Oct 09 11:15:40 liptan-pc systemd[1]: Starting Mailtrain Server...
Oct 09 11:15:44 liptan-pc mailtrain[18092]: info Using local auth
设置Logrotate
Logrotate 是一个非常有用的工具,用于刷新过时的日志。当一个服务持续运行时,它会产生大量的日志。包含日志的文件会占用大量磁盘空间。 Logrotate 会定期删除旧日志,以便日志条目可以被新日志替换。
创建一个新的 logrotate 配置文件:
nano /etc/logrotate.d/mailtrain
使用以下配置填充文件:
/var/log/mailtrain.log {
daily
rotate 12
compress
delaycompress
missingok
notifempty
copytruncate
nomail
}
将 Nginx 设置为反向代理
我们已将 Mailtrain 内置 Web 界面配置为在端口 3000 上侦听本地主机,因为运行生产 Web 服务器为用户提供网站服务非常重要。在本教程中,我们将使用 Nginx 作为反向代理,以便可以通过标准 HTTP 端口访问应用程序。安装 Nginx 网络服务器:
yum -y install nginx
为 Nginx 的服务器块文件创建一个新的虚拟主机:
nano /etc/nginx/conf.d/mailtrain.conf
使用以下内容填充文件:
server {
listen 80;
listen [::]:80;
server_name news.example.com www.news.example.com ;
access_log /var/log/nginx/mailtrain.log;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header HOST $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://127.0.0.1:3000;
proxy_redirect off;
}
}
重新启动 Nginx Web 服务器并使其在启动时自动启动:
systemctl restart nginx
systemctl enable nginx
配置防火墙和 SELinux
如果您在服务器上运行防火墙,则需要配置防火墙以设置 HTTP 服务例外。允许 Nginx 反向代理从网络外部连接。
firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --reload
如果您的系统启用了 SELinux,那么您将需要在 SELinux 策略中添加一些例外。
要检查 SELinux 是否已启用,请运行:
getenforce
如果启用了 SELinux,则运行:
setsebool -P httpd_can_network_connect 1
访问网页界面
Mailtrain 安装现已完成。您现在可以访问 http://news.example.com 上的 Mailtrain 服务器。您将看到以下界面。

单击登录按钮并使用用户名 admin 和密码 test 登录。

浏览仪表板的帐户部分并更新电子邮件地址和密码。尽快更新密码非常重要。

此外,在使用 Mailtrain 之前更新设置也很重要。

更新站点 URL 和管理员电子邮件。您还可以提供 Google Analytics 跟踪 ID 以通过 Google Analytics 跟踪见解。您可以放置一些将显示在服务器主页上的 HTML 代码。

设置活动默认值,例如您的 Sander 名称、默认地址、名称默认值、电子邮件和 URL 等。发送电子邮件时,如果未配置这些选项,则将使用默认值。

最后,最重要的配置是提供电子邮件服务器凭据。您可以使用任何 SMTP 服务器或 Amazon SES(简单电子邮件服务)。如果您使用的是 SMTP,请提供您的 SMTP 服务器的邮件服务器主机名、端口、用户名和密码。如果您使用的是 Amazon SES,请提供 API 密钥和其他凭证。
您还可以设置自己的 SMTP 服务器。只需遵循以下任何指南:
- 如何使用 Postal 创建功能齐全的邮件服务器
- 使用 Postfix、Dovecot、PostgreSQL 在 CentOS 6 上构建功能齐全的邮件服务器
- 在 Debian 上使用 Exim4、Clamav、Dovecot、SpamAssassin 等设置邮件服务器
您现在已经在 CentOS 7 服务器上安装了一个完全可用的 Mailtrain 服务器。创建您的第一个列表并开始向订阅者发送时事通讯。您可以使用 WYSIWYG 编辑器创建交互式模板,并使用活动发送电子邮件。 Mailtrain 还提供有关发送和打开的电子邮件的报告。您可以使用“自动化”选项卡创建触发器,在完成某些特定操作时发送电子邮件。您还可以设置 GPG 加密。如果列表具有 GPG 公钥集的自定义字段,则订阅者可以上传他们的 GPG 公钥以接收来自列表的加密消息。