本文介绍在Ubuntu 16.04 Server操作系统中安装设置Mailtrain(Self-Hosted Newsletter App-自托管新闻通讯应用程序)的方法,可先参考在Ubuntu 18.04服务器上安装Mailtrain的方法。
一、安装MariaDB数据库 你的订阅者数据将存储在数据库中,Mailtrain支持MySQL和MariaDB,MariaDB是MySQL的直接替代品,让我们安装MariaDB数据库服务器,输入以下命令将其安装在Ubuntu 16.04上: sudo apt install mariadb-server mariadb-client 安装完成后,使用systemctl检查其状态: systemctl status mysql
如果它没有运行,请使用以下命令启动它: sudo systemctl start mysql 要使MariaDB能够在系统引导时自动启动,请运行: sudo systemctl enable mysql 现在运行安装安全性脚本: sudo mysql_secure_installation 当它要求你输入MariaDB root密码时,请按Enter键,因为尚未设置root密码,然后输入y以设置MariaDB服务器的root密码:
接下来,可以按Enter键回答所有剩余的问题,这将删除匿名用户,禁用远程root登录并删除测试数据库,此步骤是MariaDB数据库安全性的基本要求(注意字母Y是大写的,这意味着它是默认答案):
二、为Mailtrain创建数据库和用户 现在我们需要登录MariaDB控制台并为Mailtrain创建数据库和用户,默认情况下,Ubuntu上的MaraiDB包使用unix_socket来验证用户登录,这基本上意味着你可以使用操作系统的用户名和密码登录MariaDB控制台,因此,你可以运行以下命令登录而不提供MariaDB root密码: sudo mysql -u root 使用以下命令为Mailtrain创建数据库,我将它命名为mailtrain,但你可以使用您喜欢的任何名称(不要遗漏分号): create database mailtrain; 然后输入以下命令为Mailtrain创建数据库用户,并将mailtrain数据库的所有权限授予用户,用你首选的用户名和密码替换mtuser和your-password: grant all privileges on mailtrain.* to mtuser@localhost identified by 'mtuser_password'; 接下来,创建一个对mailtrain数据库具有只读访问权限的用户,我将此用户命名为mt_readonly: grant select on mailtrain.* TO mt_readonly@localhost identified by 'mt_readonly_password'; 刷新权限表以使更改生效,然后退出MariaDB控制台: flush privileges; exit;
三、安装Node.js Mailtrain构建于Node.js之上,Node.js是一个JavaScript运行时环境,可将人类可读的JavaScript代码转换为机器代码,所以我们需要在Ubuntu 16.04上安装Node.js才能运行Mailtrain,Mailtrain需要Node.js 7+,本文将从NodeSource存储库安装Node.js(V8.x): curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - sudo apt install -y nodejs 参考:在Arch Linux/macOS/CentOS 7/Ubuntu 16.04系统上安装Node.js的方法。 nodejs包中包含npm(Node.js包管理器)二进制文件,因此无需单独安装它,要检查Node.js和npm版本,请运行: node -v npm -v 输出信息如下:
要从npm编译和安装本机插件,还需要安装构建工具: sudo apt install -y build-essential
四、运行Mailtrain 转到/var/www/并从Github获取Mailtrain文件: cd /var/www/ sudo git clone https://github.com/Mailtrain-org/mailtrain.git 使用以下命令将初始SQL数据导入mailtrain数据库,需要输入mtuser的密码: mysql -u mtuser -p mailtrain < /var/www/mailtrain/setup/sql/mailtrain.sql 创建production.toml配置文件: sudo nano /var/www/mailtrain/config/production.toml 在此文件中,可以添加覆盖/var/www/mailtrain/config/default.toml文件中的默认配置的配置,我们只需要添加以下配置: user="mailtrain" group="mailtrain" [log] level="error" [www] secret="Replace this with some random characters" [mysql] user="mtuser" password="mtuser_password" [queue] processes=5 保存并关闭文件,然后为mailtrain守护程序创建mailtrain用户和组以运行为,请注意,我们不需要为此用户创建密码,因此我们创建系统用户而不是普通用户: sudo adduser --system --group mailtrain 为报表工作者创建配置文件: sudo nano /var/www/mailtrain/workers/reports/config/production.toml 添加以下配置,此报告工作程序将具有对mailtrain数据库的只读访问权限: [log] level="error" [mysql] user="mt_readonly" password="mt_readonly_password" 保存并关闭文件,然后更改/var/www/mailtrain/的权限: sudo chown mailtrain:mailtrain /var/www/mailtrain/ -R sudo chmod o-rwx /var/www/mailtrain/config/ 并安装所需的node包: cd /var/www/mailtrain sudo npm install --no-progress --production --unsafe-perm=true 将systemd服务单元文件复制到/etc/systemd/system/目录: sudo cp /var/www/mailtrain/setup/mailtrain.service /etc/systemd/system/ 打开此文件: sudo nano /etc/systemd/system/mailtrain.service 因为我们将Mailtrain下载到/var/www/mailtrain/目录,所以将工作目录从/opt/mailtrain更改为/var/www/mailtrain,保存并关闭此文件,然后启动mailtrain.service: sudo systemctl start mailtrain.service 在系统引导时启用自动启动: sudo systemctl enable mailtrain.service 检查其状态,确保它正在运行,如果输出显示激活(自动重启),那么只需等待片刻即可启动Mailtrain: sudo systemctl status mailtrain.service 现在Mailtrain正在运行,你可以通过端口3000访问Mailtrain Web界面: your-server-ip:3000
五、设置反向代理并启用HTTPS 在使用Mailtrain Web界面之前,让我们将其置于Nginx之后,然后启用HTTPS,在Ubuntu 16.04上安装Nginx Web服务器: sudo apt install nginx 现在可以将示例mailtrain-nginx.conf文件复制到/etc/nginx/conf.d/目录: sudo cp /var/www/mailtrain/setup/mailtrain-nginx.conf /etc/nginx/conf.d/ 打开此文件: sudo nano /etc/nginx/conf.d/mailtrain-nginx.conf 找到以下行: server_name mailtrain.org www.mailtrain.org; 将server_name参数的值更改为你自己的域名,例如newsletter.your-domain.com,不要忘记为此子域创建A记录,比如: server_name newsletter.linuxbabe.com; 保存并关闭文件,然后测试Nginx配置: sudo nginx -t 如果测试成功,请重新加载Nginx以使更改生效: sudo systemctl reload nginx 你现在应该可以通过子域访问Mailtrain Web界面:newsletter.your-domain.com。 现在编辑/var/www/mailtrain/config/production.toml文件: sudo nano /var/www/mailtrain/config/production.toml 在[www]部分中,添加以下两行以指示mailtrain位于Nginx代理后面,并使其仅侦听本地主机地址: host="127.0.0.1" proxy=true 保存并关闭文件,然后重新启动Mailtrain以使更改生效: sudo systemctl restart mailtrain 然后使用Let加密启用HTTPS,在Ubuntu 16.04服务器上安装Let的加密客户端certbot,参考使用Certbot:在Linux上安装letsencrypt的最简单方法: sudo apt install software-properties-common sudo add-apt-repository ppa:certbot/certbot sudo apt update sudo apt install certbot python3-certbot-nginx 然后,可以使用Nginx插件通过执行以下命令自动获取并安装TLS证书: sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email your-email-address -d newsletter.your-domain.com
现在,可以通过你的域名和安全的HTTPS连接访问Mailtrain Web界面:
使用用户名admin和密码测试登录,然后更改您的帐户电子邮件地址和密码,转到设置页面以更改默认配置,应该将服务地址从http://localhost:3000/更改为你的子域(https://newsletter.your-domain.com)。 在“邮件程序设置”中,如果你拥有自己的电子邮件服务器或使用Amazon SES,则可以使用SMTP(在Ubuntu 18.04系统上安装和配置Postfix作为SMTP服务器),实际上,你还可以在SMTP选项卡中使用其他SMTP中继服务,在下面的屏幕截图中,我使用自己的电子邮件服务器,电子邮件将使用STARTTLS加密在端口587上提交:
保存你的设置,然后,你可以创建一个列表来测试Mailtrain的功能。
六、处理Mailtrain中的退回邮件 你的电子邮件列表迟早会包含你无法发送电子邮件的地址,例如,当使用公司电子邮件地址的订户离开公司时,该电子邮件地址将被删除,因此,你的电子邮件服务器将收到退回邮件,指出无法发送电子邮件。 如果使用SMTP中继服务发送电子邮件,他们将为你处理退回邮件,如果你使用自己的电子邮件服务器发送电子邮件,则需要在Mailtrain中处理退回邮件,Mailtrain提供两种处理退回邮件的方法:通过VERP、通过Postfix日志。 我个人使用VERP方法,因为它在电子邮件社区中被广泛使用,也因为第二种方法导致我的服务器上的CPU使用率很高。 下面进行VERP Bounce Handling操作,使用VERP(可变包络返回路径),你的电子邮件列表管理器为每个订户使用唯一的信封地址。要启用VERP,请编辑production.toml文件: sudo nano /var/www/mailtrain/config/production.toml 如果你的Mailtrain主机没有运行SMTP服务器,请添加以下文本: [verp] enabled=true port=25 disablesenderheader=true 如果你的Mailtrain服务器有像Postfix一样运行的SMTP服务器,则添加以下文本,退回处理服务器将侦听127.0.0.1:2525: [verp] enabled=true port=2525 host="127.0.0.1" disablesenderheader=true 保存并关闭文件,然后重新启动Mailtrain以使更改生效: sudo systemctl restart mailtrain 在Mailtrain Web界面中,转到Settings -> VERP Bounce Handlding,选中Use VERP to catch bounces,保存设置:
接下来,需要为服务器主机名(bounces.your-domain.com)创建MX记录,然后为此主机名添加A记录,指向你的Mailtrain主机,以便将退回邮件发送到你的Mailtrain主机,列表中的每个订阅者都将拥有一个唯一的信封地址,如vI06Mrg@bounces.your-domain.com。 请注意,如果你为域名部署了DMARC记录,则必须将SPF对齐设置为relaxed mode,如果它设置为strict mode,你的简报可能无法通过DMARC检查。 如果Mailtrain退回处理服务器正在侦听127.0.0.1的端口2525并且Postfix SMTP服务器正在侦听公共IP地址的端口25,则需要设置传输映射,以便Postfix可以将退回邮件中继到Mailtrain,创建传输映射文件: sudo nano /etc/postfix/transport 将以下行添加到此文件中,这告诉Postfix将地址如vI06Mrg@bounces.your-domain.com的电子邮件中继到Mailtrain退回处理服务器: bounces.your-domain.com smtp:[127.0.0.1]:2525 保存并关闭文件,然后生成索引文件: sudo postmap /etc/postfix/transport 编辑Postfix主配置文件: sudo nano /etc/postfix/main.cf 将以下行添加到该文件中: transport_maps = hash:/etc/postfix/transport 保存并关闭文件,然后重新启动Postfix以使更改生效: sudo systemctl restart postfix 参考:使用Postfix命令管理详解。 至此,已经完成在Ubuntu 16.04服务器上安装Mailtrain的所有步骤。
相关主题 |