月額費用をゼロに:DockerでListmonkをセルフホストしてHomeLabを強化しよう

HomeLab tutorial - IT technology blog
HomeLab tutorial - IT technology blog

利便性の代償:SaaS vs セルフホスト

多くのクリエイターは、MailchimpやConvertKitのようなプラットフォームでメール配信を始めます。これらのサービスはリストが小さいうちは素晴らしいですが、購読者が増えると負担になります。購読者が2,500人に達すると、週に1回の更新を送信するだけで毎月60ドルから100ドルを支払うことになるかもしれません。自分が本当の意味で所有していないサービスに対して、これは高額な代償です。セルフホストはこの計算を完全に変えてくれます。

Listmonkに切り替えることは、サブスクリプションモデルからインフラモデルへの移行を意味します。セットアップに少し時間をかける代わりに、データの完全な所有権を手に入れることができます。購読者ごとに支払うのではなく、安価なVPSの料金を支払うか、既存のHomeLabハードウェアで実行します。継続的なコストはSMTPプロバイダーのみとなります。例えば、Amazon SESならメール1,000通あたりわずか0.10ドルです。5万人のリストに対してSaaSから請求される月額300ドル以上の請求書と比較すれば、選択は明白です。

なぜListmonkが最適な選択なのか

購読者を移行する前に、Listmonkのユニークな点を知っておく必要があります。これは単なる商用ツールの無料クローンではなく、スピードを重視して構築されたハイパフォーマンスエンジンです。

メリット

  • 真のデータプライバシー: 購読者リストがサーバーの外に出ることはありません。サードパーティのプラットフォームがオーディエンスデータをスキャンしたり、インサイトを広告主に販売したりすることはありません。
  • 人為的な制限なし: 100のリストを作成しようが、100万人の購読者がいようが、ソフトウェア側は気にしません。制約となるのはディスク容量とSMTPリレーのスループットだけです。
  • 高速な配信: ListmonkはGo言語で書かれているため、非常に効率的です。わずか1GB memoryのマシンでも、毎分10,000通のメールを送信できます。
  • 高度な機能: トランザクションメールのサポート、テンプレート管理、クリックトラッキング分析などが標準で備わっています。

トレードオフ

  • 到達率の管理: 自宅のIPから直接メールを送信すべきではありません。ブロックされる可能性が高いからです。Amazon SESやPostmarkのような信頼できるSMTPリレーの使用が不可欠です。
  • メンテナンス: あなたはシステム管理者になります。データベースのバックアップを怠れば、ハードウェアの故障によってオーディエンスリスト全体を失う可能性があります。

本番環境向けの構成

信頼性の高いセットアップのために、Nginx Proxy ManagerやTraefikのようなリバースプロキシの背後でListmonkを実行することをお勧めします。整理を容易にするため、専用のPostgreSQL 13データベースコンテナを使用します。データベースをアプリケーションロジックから分離することで、バックアップが非常にスムーズになります。

Docker Composeはこの管理に最適な方法です。スタック全体を1つのファイルで定義できます。バックエンドには、信頼性の面からAmazon SESが最適です。コストはごくわずかで、SPF、DKIM、DMARCといった技術的な複雑さを処理してくれるため、メールが確実に受信トレイに届きます。

ステップバイステップの実装

環境を整えましょう。まずはサーバー上に専用のプロジェクトディレクトリを作成することから始めます。

1. ワークスペースの準備

Listmonk用のフォルダ and、データベースファイルを永続化するためのdataサブフォルダを作成します:

mkdir listmonk && cd listmonk
mkdir -p data/postgres

2. Docker Composeの設定

docker-compose.yml ファイルを作成します。この設定では、公式のListmonkイメージと安定したPostgresバックエンドを使用します。コンテナ間の通信をプライベートに保つためにブリッジネットワークを使用している点に注目してください。

version: "3.8"

services:
  db:
    image: postgres:13-alpine
    container_name: listmonk_db
    restart: unless-stopped
    volumes:
      - ./data/postgres:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=ここに強力なパスワードを入力してください
      - POSTGRES_USER=listmonk
      - POSTGRES_DB=listmonk
    networks:
      - listmonk_net

  app:
    image: listmonk/listmonk:latest
    container_name: listmonk_app
    restart: unless-stopped
    ports:
      - "9000:9000"
    volumes:
      - ./config.toml:/listmonk/config.toml
    depends_on:
      - db
    networks:
      - listmonk_net

networks:
  listmonk_net:
    driver: bridge

3. 設定ファイル

Listmonkがデータベースに接続するには config.toml が必要です。listmonk フォルダにこのファイルを作成してください。データベースの認証情報が Docker Compose ファイルに入力したものと完全に一致していることを確認してください。

[app]
address = "0.0.0.0:9000"
admin_username = "admin"
admin_password = "あなたの秘密のログインパスワード"

[db]
host = "db"
port = 5432
user = "listmonk"
password = "ここに強力なパスワードを入力してください"
name = "listmonk"
ssl_mode = "disable"

4. データベースの初期化

まだコンテナを起動することはできません。Listmonkはまず内部のテーブル構造を構築する必要があります。スキーマをセットアップするために、この一度限りのコマンドを実行します:

docker-compose run --rm app ./listmonk --install

ログを確認してください。「installation complete(インストール完了)」というメッセージで終了すれば、次のステップに進む準備は完了です。

5. アプリケーションの起動

次に、サービスをバックグラウンドで起動します:

docker-compose up -d

ブラウザを開き、 http://your-server-ip:9000 にアクセスしてください。 config.toml の認証情報を使用してログインします。

SMTPリレーの設定

ダッシュボードを開いた状態で、Settings -> Messengers に移動します。これが外部世界への架け橋となります。Amazon SESを使用する場合、設定は以下のようになります:

  • Type: SMTP
  • Host: email-smtp.us-east-1.amazonaws.com
  • Port: 587
  • Auth: LOGIN
  • Username: [あなたのSES SMTPユーザー名]
  • Password: [あなたのSES SMTPパスワード]

この画面を閉じる前に、必ず「Test connection」機能を使用してください。失敗した場合は、サーバーのファイアウォールがポート587の送信トラフィックを許可しているか確認してください。

キャンペーンを成功させるためのプロのヒント

ソフトウェアを実行するのは簡単な部分です。メールを迷惑メールフォルダに入れられないようにするには戦略が必要です。セルフホストリストを管理して学んだことを共有します:

  • ダブルオプトインは必須: 設定で必ずこれを有効にしてください。ボットによる登録を防ぎ、リストの品質を高く保つことができます。クリーンなリストは、高い送信者スコアを維持するための最良の方法です。
  • 送信レートの管理: 5万通のメールを1秒で一斉送信しないでください。Listmonkの「Batch Size」設定を使用して、少しずつメールを配信します。最初は毎分50通から始め、評判が高まるにつれて徐々に増やしていきます。
  • 外部メディア: メール内に大きな画像を埋め込まないでください。画像はS3バケットや公開ウェブフォルダにホストします。これによりメールサイズを100KB以下に抑えることができ、到達率の向上に役立ちます。
  • 自動バックアップ: data フォルダを毎日バックアップするcronジョブを設定してください。コンテナを停止し、フォルダをZIP圧縮して安全な場所にアップロードする簡単なスクリプトを作成するだけで、数年分の作業を失わずに済みます。

マーケティングスタックをセルフホストするのは大きな一歩に感じるかもしれませんが、その独立性には価値があります。もう値上げやプラットフォームの利用停止を心配する必要はありません。ただ、コンテンツに集中するだけです。

Share: