Mailtrainは、Node.jsで作成されたオープンソースのセルフホストニュースレターアプリケーションです。非常に人気のあるNode.jsライブラリNodemailerを使用してメールを送信します。卓越した自動化と分析を無料で提供します。 CSVファイルのインポートを使用して、100万の電子メールアドレスの電子メールリストを簡単に作成またはインポートできます。また、カスタムフィールドとフォームもサポートしています。アクションがトリガーされたときに特定のユーザーに特定のメッセージを送信できるトリガーによる自動化を提供します。任意のメールプロバイダーを使用して、Amazon SES、ZoneMTA、SendGrid、MailgunなどのサポートとともにSMTPプロトコルをサポートするニュースレターを送信できます。ニュースレターの美しいテンプレートを作成するための複数のWYSIWYGエディターを提供します。
このチュートリアルでは、CentOS 7に必要なすべての依存関係とともにMailtrainをインストールします。また、標準のHTTPポートでアプリケーションを提供するためのリバースプロキシとしてNginxをセットアップします。
Metabaseには少なくとも1GBのRAMが必要です。必要なすべての依存関係は、チュートリアル全体でインストールされます。ルートアクセス権を持つCentOS7の最小限のインストールが必要になります。 root以外のユーザーとしてログインしている場合は、sudo-iを実行してrootユーザーに切り替えることができます。
パッケージをインストールする前に、次のコマンドを使用してパッケージとリポジトリを更新することをお勧めします。
yum -y update
Node.jsをインストール
Node.jsは、Nodemailerを使用して構築されているため、Mailtrainに必要です。 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パスワードが設定されていません。Enterキーを押すだけで、先に進むことができます。 MariaDBインストールのルートパスワードを設定するかどうかを尋ねられます。yを選択して、インストールに強力なパスワードを設定します。また、テストデータベースと匿名ユーザーを削除するように求められます。ほとんどの質問は自明であり、すべての質問に「はい」または「はい」と答える必要があります。
Mailtrainでは、2人のデータベースユーザーが作業する必要があります。1人はMailtrainデータベースを管理するためのもので、もう1人はワーカーレポートを生成するためのものです。
データベースを作成するには、最初に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';
次に、MailtrainROの新しいユーザーを作成します。
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
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文字の文字列を生成します。表示されます:
[[email protected] 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として実行し、MailtrainReportsWorkerユーザーをユーザーnobodyとして実行できます。さらに、ポート3000でローカルホストをリッスンするように組み込みサーバーを構成します。標準のHTTPポートを介してMailtrain Webインターフェイスにアクセスできるように、Nginxをリバースプロキシとして設定します。
secret=のRandomStringを上記で生成されたランダム文字列に置き換えます。 Nginxプロキシの背後でMailtrain組み込みサーバーを実行するため、プロキシをtrueに設定します。
Mailtrainデータを保存するために作成したデータベースのユーザー名、パスワード、データベース名を設定します。
また、ワーカーレポートの本番構成を保存するための新しいファイルを作成します。
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
サーバーが実行されている場合は、次の出力が表示されます。
[[email protected] mailtrain]# NODE_ENV=production npm start > [email protected] start /opt/mailtrain > node index.js info Using local auth
ただし、アプリケーションを直接起動する代わりに、systemdサービスを使用します。 Ctrl+Cを押して実行を停止します。
Mailtrainユーザーにファイルの所有権を提供し、システムの他の非rootユーザーからconfigに対するすべての権限を削除します。
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
サービスがアクティブに実行されていることを確認する必要があります。
[[email protected] ~]# 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構成ファイルを作成します:
nano /etc/logrotate.d/mailtrain
次の構成でファイルにデータを入力します。
/var/log/mailtrain.log { daily rotate 12 compress delaycompress missingok notifempty copytruncate nomail }
Nginxをリバースプロキシとして設定
ユーザーにWebサイトを提供するには、運用Webサーバーを実行することが重要であるため、ポート3000でローカルホストをリッスンするようにMailtrain組み込みWebインターフェイスを構成しました。このチュートリアルでは、アプリケーションが標準のHTTPポートを介してアクセスできるように、リバースプロキシとしてNginxを使用します。 Nginx Webサーバーをインストールします:
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
サーバーでファイアウォールを実行している場合は、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とパスワードテストを使用してログインします。
アカウントを閲覧する ダッシュボードのセクションを開き、メールアドレスとパスワードを更新します。できるだけ早くパスワードを更新することが非常に重要です。
また、Mailtrainを使用する前に設定を更新することが重要です。
サイトのURLと管理者の電子メールを更新します。また、Google Analyticsを介して洞察を追跡するために、GoogleAnalytics追跡IDを提供することもできます。サーバーのホームページに表示されるHTMLコードを配置できます。
サンダー名、デフォルトアドレス、デフォルトの名前、電子メール、URLなどのキャンペーンのデフォルトを設定します。電子メールの送信中に、これらのオプションが構成されていない場合は、デフォルトが使用されます。
最後に、最も重要な構成は、電子メールサーバーの資格情報を提供することです。任意のSMTPサーバーまたはAmazonSES(Simple Email Service)を使用できます。 SMTPサーバーを使用している場合は、SMTPサーバーのメールサーバーのホスト名、ポート、ユーザー名、およびパスワードを入力します。 Amazon SESを使用している場合は、APIキーとその他のクレデンシャルを提供してください。
独自のSMTPサーバーを設定することもできます。次のガイドのいずれかに従ってください:
- Postalを使用してフル機能のメールサーバーを作成する方法
- Postfix、Dovecot、PostgreSQLを使用してCentOS6でフル機能のメールサーバーを構築する
- DebianでExim4、Clamav、Dovecot、SpamAssassinなどを使用してメールサーバーをセットアップする
これで、CentOS7サーバーに完全に機能するMailtrainサーバーがインストールされました。最初のリストを作成し、購読者へのニュースレターの送信を開始します。 WYSIWYGエディターを使用してインタラクティブなテンプレートを作成し、キャンペーンを使用してメールを送信できます。 Mailtrainは、送信および開封された電子メールのレポートも提供します。 [自動化]タブを使用して、特定のアクションが実行されたときに電子メールを送信するトリガーを作成できます。 GPG暗号化を設定することもできます。リストにGPG公開鍵セットのカスタムフィールドがある場合、サブスクライバーはGPG公開鍵をアップロードして、リストから暗号化されたメッセージを受信できます。