mailtrain

Self hosted newsletter app

メール配信Mailchimpの代替GPL-3.0
GitHub
5,720 スター710 フォーク
AIによる要約
ひとことで言うと

自前のサーバーでニュースレターの配信・購読者管理・自動キャンペーンを運用できるオープンソースのメール配信アプリケーション。

こんな方におすすめ

・企業:購読者数や送信数に応じた従量課金を避け、社内サーバーで顧客データを完全に管理しながら大規模なメールマーケティングを運用できる。 ・スタートアップ:内蔵のメール配信エンジン(Zone-MTA)により外部サービス不要でメール送信基盤を構築でき、初期コストを大幅に削減できる。 ・個人事業主・フリーランス:MJMLテンプレートや自動配信(トリガー・RSSキャンペーン)を無料で利用でき、少人数でもプロ品質のニュースレター運用が可能になる。

有料サービスとの違い

MailchimpやSendGridは購読者数や送信数に応じて月額料金が増加するが、Mailtrainはセルフホストのため購読者数・送信数ともに無制限で、購読者データの外部預託も不要になる。

Mailtrain v2

Mailtrainは、Node.js(v14以上)とMySQL(v8以上)またはMariaDB(v10以上)で構築されたセルフホスト型ニュースレターアプリケーションです。

これはMailtrainのバージョン2です。v1のほぼすべての機能を実装し、さらにいくつかの機能を追加しています。完全な書き直しのため、一からインストールする必要があります。

Mailtrain v1からアップグレードする場合は、DBをバックアップしてMailtrain v2で使用してください。Mailtrain v2はDBを新しいスキーマにアップグレードできるはずです。

機能

  • 購読者リスト管理
  • リストのセグメンテーション
  • カスタムフィールド
  • メールテンプレート(MJMLベースのテンプレートを含む)
  • カスタムレポート
  • 自動配信(トリガーおよびRSSキャンペーン)
  • 細かいユーザー権限と柔軟な共有機能を持つ複数ユーザー対応
  • エンタープライズレベルの状況に対応する階層型名前空間
  • メール配信のセットアップをほぼゼロにする組み込みZone-MTA(https://github.com/zone-eu/zone-mta)

推奨最小ハードウェア要件

  • 2 vCPU
  • 4096 MB RAM

クイックスタート

準備

Mailtrainは3つのURLエンドポイントを作成します。これらは「trusted」「sandbox」「public」と呼ばれます。これにより、Mailtrainはマルチユーザー環境でのセキュリティを保証し、XSS攻撃を回避できます。3つのエンドポイントの機能は以下の通りです:

  • trusted - ログインユーザーがリストの管理、キャンペーンの送信などに使用するメインのUIエンドポイントです。
  • sandbox - ユーザーに直接表示されないエンドポイントです。WYSIWYGテンプレートエディタのホスティングに使用されます。
  • public - 購読者向けのエンドポイントです。購読管理フォーム、ファイル、アーカイブのホスティングに使用されます。

Mailtrainの推奨デプロイメントでは、すべて同じIPアドレスを指す3つのDNSエントリを使用します。例えば以下のようになります:

  • lists.example.com - publicエンドポイント(example.comドメイン下のAレコードlists
  • mailtrain.example.com - trustedエンドポイント(example.comドメイン下のCNAMEレコードmailtrainlistsを指す)
  • sbox-mailtrain.example.com - sandboxエンドポイント(example.comドメイン下のCNAMEレコードsbox-mailtrainlistsを指す)

CentOS 7またはUbuntu 18.04 LTSへの新規インストール(SSLで保護された公開ウェブサイト)

これは公開アクセス可能なMailtrainインスタンスをセットアップします。すべてのエンドポイント(trusted、sandbox、public)はHTTP(ポート80)とHTTPS(ポート443)の両方を提供します。HTTPポートはHTTPSへのリダイレクトのみを行います。

以下のスクリプトはLet's Encryptから有効な証明書を取得します。 AWSや他のクラウドプロバイダーでMailtrainをホスティングしている場合は、インストールスクリプトを実行する前に、ポート80(HTTP)と443(HTTPS)への受信接続を許可してください。

注意: これにより、Let's Encryptの利用規約に自動的に同意することになります。 したがって、以下のスクリプトを実行することで、Let's Encryptの利用規約(https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf)に同意したことになります。

  1. rootとしてログインします。(AWS上のCentOS 7でrootとしてnpmを実行する際に問題が発生しました。sudo内の一見余分なsuで解決するようです。)

    sudo su -
    
  2. GITをインストール

    CentOS 7の場合:

    yum install -y git
    

    Ubuntu 18.04 LTSの場合:

    apt-get install -y git
    
  3. gitを使用してMailtrainを/opt/mailtrainディレクトリにダウンロード

    cd /opt
    git clone https://github.com/Mailtrain-org/mailtrain.git
    cd mailtrain
    git checkout v2
    
  4. インストールスクリプトを実行します。URLとメールアドレスを正しい値に置き換えてください。注意: このスクリプトを実行すると、Let's Encryptの条件に同意したことになります。

    CentOS 7の場合:

    bash setup/install-centos7-https.sh mailtrain.example.com sbox-mailtrain.example.com lists.example.com admin@example.com
    

    Ubuntu 18.04 LTSの場合:

    bash setup/install-ubuntu1804-https.sh mailtrain.example.com sbox-mailtrain.example.com lists.example.com admin@example.com
    
  5. Mailtrainを起動し、サーバー起動時にデフォルトで開始されるように設定します。

    systemctl start mailtrain
    systemctl enable mailtrain
    
  6. trustedエンドポイント(例:https://mailtrain.example.com)を開きます

  7. admin:testで認証します

  8. admin/アカウントでパスワードを更新します

  9. 管理/グローバル設定で設定を更新します

  10. DKIMでメールに署名する場合は、管理/送信設定でDKIMキーとDKIMセレクタを設定します。

CentOS 7またはUbuntu 18.04 LTSへの新規インストール(ローカルインストール)

これはローカルアクセス可能なMailtrainインスタンスをセットアップします(主に開発とテスト用)。 すべてのエンドポイント(trusted、sandbox、public)は以下のようにHTTPのみを提供します:

  1. rootとしてログインします。(AWS上のCentOS 7でrootとしてnpmを実行する際に問題が発生しました。sudo内の一見余分なsuで解決するようです。)

    sudo su -
    
  2. gitをインストール

    CentOS 7の場合:

    yum install -y git
    

    Ubuntu 18.04 LTSの場合:

    apt-get install -y git
    
  3. gitを使用してMailtrainを/opt/mailtrainディレクトリにダウンロード

    cd /opt
    git clone https://github.com/Mailtrain-org/mailtrain.git
    cd mailtrain
    git checkout v2
    
  4. インストールスクリプトを実行します。URLとメールアドレスを正しい値に置き換えてください。注意: このスクリプトを実行すると、Let's Encryptの条件に同意したことになります。

    CentOS 7の場合:

    bash setup/install-centos7-local.sh
    

    Ubuntu 18.04 LTSの場合:

    bash setup/install-ubuntu1804-local.sh
    
  5. Mailtrainを起動し、サーバー起動時にデフォルトで開始されるように設定します。

    systemctl start mailtrain
    systemctl enable mailtrain
    
  6. trustedエンドポイント http://localhost:3000 を開きます

  7. admin:testで認証します

DockerとDocker Composeによるデプロイ

このセットアップでは、Mailtrain、MongoDB、Redis、MariaDBで構成されるスタックを起動します。以下のHTTPエンドポイントでローカルアクセス可能なMailtrainインスタンスをセットアップします。

これを公開アクセス可能にするには、これらのエンドポイントをHTTPS経由で公開するリバースプロキシを追加する必要があります。プロキシを使用する場合は、以下に示すようにMAILTRAIN_SETTING経由でURLベースと--withProxyパラメータも設定する必要があります。 そのようなプロキシの例:

DockerでMailtrainをデプロイするには、以下の2つの依存関係がインストールされている必要があります:

docker-composeでMailtrainを起動する手順:

  1. Mailtrainのdocker-composeビルドファイルをダウンロード

    curl -O https://raw.githubusercontent.com/Mailtrain-org/mailtrain/v2/docker-compose.yml
    
  2. docker-composeでMailtrainをデプロイ(docker-compose.ymlファイルをダウンロードしたディレクトリで実行)。初回実行時はかなり時間がかかります。以降の実行は高速です。

    docker-compose up
    
  3. trustedエンドポイント http://localhost:3000 を開きます

  4. admin:testで認証します

上記の手順では、DockerHub(https://hub.docker.com/r/mailtrain/mailtrain)で自動ビルドされたDockerイメージを使用します。Dockerイメージを自分でビルドしたい場合(例:開発時)は、プロジェクトのルートディレクトリにある`docker-compose-local.yml`を使用してください。

DockerとDocker Composeによるデプロイ(開発用)

このセットアップでは上記と同様のスタックを起動しますが、Dockerコンテナを使用したローカル開発用に調整されています。

  1. このリポジトリをクローン

  2. 開発スタックを起動

    docker-compose -f docker-compose-develop.yml up -d
    
  3. コンテナ内のシェルに接続

    docker-compose exec mailtrain bash
    
  4. すべてのNodeモジュールをインストールし、クライアントWebアプリをビルドするために、以下のコマンドを一度実行

    cd /app
    bash setup/reinstall-modules.sh
    cd /app/client && npm run build && cd /app
    
    
  5. 初回起動時に以下のコマンドでサーバーを起動し、server/config/production.yamlを生成

    bash docker-entrypoint.sh
    

Docker環境変数

Dockerを使用する場合、以下の環境変数でデフォルトのMailtrain設定を上書きできます。これらの変数はdocker-compose設定ファイルで定義する必要があります。docker-compose.yml設定ファイルで直接値を指定できます。

あるいは、値を空のままにして宣言するだけでもかまいません(https://docs.docker.com/compose/environment-variables/#pass-environment-variables-to-containers を参照)。その場合、値は.envファイルまたは環境変数(例:URL_BASE_TRUSTED=https://mailtrain.domain.com (and more env-vars..) docker-compose -f docker-compose.yml build (or up))で提供できます。

!!!警告!!! 必ずADMIN_PASSWORDを設定してください。設定しないと、デフォルトパスワードがtestのままとなり、インスタンスが脆弱になります!

パラメータ 説明
ADMIN_PASSWORD 管理者パスワードを設定。管理者ユーザー名は変更可能ですが、パスワードは常にこの値で上書きされます。デフォルトがtestのため必ず設定してください
ADMIN_ACCESS_TOKEN API用のアクセストークンを設定(オプション)
PORT_TRUSTED インスタンスのtrustedポートを設定(デフォルト:3000)
PORT_SANDBOX インスタンスのsandboxポートを設定(デフォルト:3003)
PORT_PUBLIC インスタンスのpublicポートを設定(デフォルト:3004)
URL_BASE_TRUSTED インスタンスの外部trusted URLを設定(デフォルト:http://localhost:3000)、例:https://mailtrain.example.com
URL_BASE_SANDBOX インスタンスの外部sandbox URLを設定(デフォルト:http://localhost:3003)、例:https://sbox-mailtrain.example.com
URL_BASE_PUBLIC インスタンスの外部public URLを設定(デフォルト:http://localhost:3004)、例:https://lists.example.com
WWW_HOST サーバーがバインドするアドレスを設定(デフォルト:0.0.0.0)
WWW_PROXY Mailtrainがhttpリバースプロキシの背後にある場合に使用(デフォルト:false)
WWW_SECRET expressセッションのシークレットを設定(デフォルト:$(pwgen -1)
MONGO_HOST mongoホストを設定(デフォルト:mongo)
WITH_REDIS redisの有効/無効を設定(デフォルト:true)
REDIS_HOST redisホストを設定(デフォルト:redis)
REDIS_PORT redisポートを設定(デフォルト:6379)
MYSQL_HOST mysqlホストを設定(デフォルト:mysql)
MYSQL_PORT mysqlポートを設定(デフォルト:3306)
MYSQL_DATABASE mysqlデータベースを設定(デフォルト:mailtrain)
MYSQL_USER mysqlユーザーを設定(デフォルト:mailtrain)
MYSQL_PASSWORD mysqlパスワードを設定(デフォルト:mailtrain)
WITH_LDAP LDAP認証を有効にする場合に使用
LDAP_HOST 認証用LDAPホスト(デフォルト:ldap)
LDAP_PORT LDAPポート(デフォルト:389)
LDAP_SECURE ldapsプロトコルでLDAPを使用する場合に使用
LDAP_BIND_USER LDAP接続用ユーザー
LDAP_BIND_PASS LDAP接続用パスワード
LDAP_FILTER LDAPフィルター
LDAP_BASEDN LDAPベースDN
LDAP_UIDTAG LDAP UIDタグ(例:uid/cn/username)
WITH_ZONE_MTA 組み込みZone-MTAの有効/無効を設定(デフォルト:true)
POOL_NAME 組み込みZone-MTAのプール名を設定(デフォルト:os.hostname())
WITH_CAS CASを使用する場合に使用
CAS_URL CASベースURL
CAS_NAMETAG 名前の保存に使用するフィールド(デフォルト:username)
CAS_MAILTAG メールの保存に使用するフィールド(デフォルト:mail)
CAS_NEWUSERROLE 新規ユーザーのロール(デフォルト:nobody)
CAS_NEWUSERNAMESPACEID 新規ユーザーの名前空間ID(デフォルト:1)
LOG_LEVEL ログレベルを設定:`silly
DEFAULT_LANGUAGE デフォルト言語を設定(デフォルト:en-US)
WITH_POSTFIXBOUNCE PostfixBounce TCPリスナーの有効/無効を設定(デフォルト:false)
POSTFIXBOUNCE_PORT PostfixBounceリスニングTCPポートを設定(デフォルト:5699)
POSTFIXBOUNCE_HOST PostfixBounceリスニングホストを設定(デフォルト:127.0.0.1)

元のdocker-compose.ymlを変更したくない場合は、以下のように別のファイル(例:docker-compose.override.yml)にオーバーライドを配置できます。

version: '3'
services:
  mailtrain:
    environment:
    - URL_BASE_TRUSTED
    - URL_BASE_SANDBOX
    - URL_BASE_PUBLIC

ライセンス

GPL-V3.0