n8nセルフホスト構築|Docker+SSL対応の全手順

n8n自動化

※ この記事にはアフィリエイトリンクが含まれています。リンク経由で購入しても読者の皆さんに追加費用は発生しません。収益は本サイトの運営費に充てています。

n8n Cloudの月額約3,000円を節約して、VPS上に自分だけのn8n環境を構築する方法を解説します。前回のVPS比較記事でサーバー選びは済ませました。今回は実際にConoHa VPS上でn8nを動かすまでの全手順です。

こんな方に読んでほしい記事です:

  • n8n Cloudの料金が気になっていて、セルフホストに興味がある
  • Docker Composeの基本は分かるが、n8n固有の設定が分からない
  • SSL対応(HTTPS)まで一気に構築したい
  • VPS比較を読んで、ConoHaかXServerに決めた

n8nセルフホストの構築方法は2つある

ConoHa VPSでn8nを構築する方法は大きく分けて2つあります。

方法 難易度 カスタマイズ性 所要時間
スタートアップスクリプト 約5分
Docker Compose手動構築 約30分

2025年10月から、ConoHa VPSにはn8n用のスタートアップスクリプトが追加されました。独自ドメインなしでもHTTPS対応のn8nがすぐに使えます。「とにかく早く動かしたい」ならスタートアップスクリプト、「構成を理解して自分でカスタマイズしたい」ならDocker Compose手動構築を選んでください。

方法1:スタートアップスクリプトで5分構築

ConoHa VPSの料金プランを確認する

手順

  1. ConoHa VPSの管理画面で「サーバー追加」を選択
  2. メモリ2GB以上のプランを選択(推奨は2GB、月額995円〜)
  3. OS選択で「アプリケーション」タブ → 「n8n」を選択
  4. rootパスワードを設定して「追加」をクリック
  5. サーバーが起動したら、表示されるURLにアクセス

これだけでHTTPS対応のn8nが動きます。独自ドメインの設定も管理画面から可能です。初めてn8nを触る方や、インフラに時間をかけたくない方にはこの方法がベストです。

スタートアップスクリプトの制限事項

ただし、いくつかの制限があります。

  • DBがデフォルトのSQLite。ワークフローが増えるとPostgreSQLに移行したくなる
  • Nginxの設定をカスタマイズしにくい
  • n8nのバージョンアップが自動ではない

「最初はスタートアップスクリプトで始めて、運用に慣れたらDocker Compose構成に移行する」というのが個人的におすすめのステップです。

方法2:Docker Compose + Nginx + SSLで手動構築

構成を理解した上で運用したい方向けの手順です。最終的な構成は以下の通りです。

インターネット
  │
  ▼ (443/HTTPS)
Nginx(リバースプロキシ + SSL終端)
  │
  ▼ (5678/HTTP)
n8n(Docker コンテナ)
  │
  ▼
PostgreSQL(Docker コンテナ)

Step 1:VPSにSSH接続してDockerをインストール

# ConoHa VPSにSSH接続
ssh root@your-server-ip

# Dockerのインストール(公式スクリプト)
curl -fsSL https://get.docker.com | sh

# Docker Composeの確認(Docker 24以降は内蔵)
docker compose version

ConoHa VPSはUbuntu 22.04を選択すればDockerのインストールは問題なく通ります。XServer VPSを使う場合はn8nアプリイメージを選べばこのステップは不要です。

Step 2:docker-compose.ymlを作成

# 作業ディレクトリの作成
mkdir -p /opt/n8n && cd /opt/n8n

# docker-compose.yml を作成
cat << 'EOF' > docker-compose.yml
version: '3.8'
services:
  n8n:
    image: n8nio/n8n:latest
    restart: always
    ports:
      - "5678:5678"
    environment:
      - N8N_HOST=your-domain.com
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - WEBHOOK_URL=https://your-domain.com/
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_PORT=5432
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=n8n
      - DB_POSTGRESDB_PASSWORD=your-secure-password
    volumes:
      - n8n_data:/home/node/.n8n
    depends_on:
      - postgres

  postgres:
    image: postgres:16
    restart: always
    environment:
      - POSTGRES_DB=n8n
      - POSTGRES_USER=n8n
      - POSTGRES_PASSWORD=your-secure-password
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  n8n_data:
  postgres_data:
EOF

ポイントは3つあります。

  • DB_TYPE=postgresdb:デフォルトのSQLiteではなくPostgreSQLを使う。ワークフローが増えてもパフォーマンスが安定します
  • N8N_PROTOCOL=https:Nginxで SSL終端する前提。これを設定しないとWebhookのURLがhttpになってしまう
  • WEBHOOK_URL:外部サービスからのWebhook受信に使うURL。ドメインを設定する前に忘れがちなポイントです

Step 3:Nginxの設定とSSL証明書の取得

# Nginxのインストール
apt install -y nginx certbot python3-certbot-nginx

# SSL証明書の取得(ドメインのDNS設定が完了している前提)
certbot --nginx -d your-domain.com

# Nginx設定ファイルの編集
cat << 'EOF' > /etc/nginx/sites-available/n8n
server {
    listen 443 ssl;
    server_name your-domain.com;

    ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;

    location / {
        proxy_pass http://localhost:5678;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;

        # WebSocket対応(n8nのリアルタイム更新に必要)
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        # タイムアウト延長(長時間実行ワークフロー対応)
        proxy_read_timeout 300s;
        proxy_send_timeout 300s;
    }
}
EOF

# 設定の有効化と再起動
ln -sf /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx

見落としがちなのがWebSocket対応の設定です。n8nのエディタはWebSocketでリアルタイム通信しているので、UpgradeConnectionヘッダーの設定がないとワークフローの編集画面が正常に動きません。

Step 4:n8nを起動して動作確認

# コンテナの起動
cd /opt/n8n
docker compose up -d

# ログの確認
docker compose logs -f n8n

ブラウザでhttps://your-domain.comにアクセスすると、n8nの初期設定画面が表示されます。管理者アカウントを作成すればセルフホスト環境の完成です。

構築後にやっておくべき3つの設定

1. 自動バックアップの設定

PostgreSQLのデータを定期的にバックアップするcronジョブを設定します。

# 毎日3時にバックアップを取得
echo "0 3 * * * docker exec $(docker ps -qf name=postgres) pg_dump -U n8n n8n | gzip > /opt/n8n/backups/n8n_$(date +\%Y\%m\%d).sql.gz" | crontab -

バックアップがないと、サーバー障害時にワークフローを全部作り直すことになります。運用開始前に必ず設定しておいてください。

2. n8nのバージョンアップ手順

cd /opt/n8n
docker compose pull    # 最新イメージを取得
docker compose down    # 一度停止
docker compose up -d   # 新バージョンで起動

バージョンアップ前には必ずバックアップを取得してください。まれにDB構造の変更が入ることがあり、ロールバックが必要になるケースがあります。

3. ファイアウォールの設定

# 必要なポートのみ開放
ufw allow 22/tcp     # SSH
ufw allow 443/tcp    # HTTPS(n8n)
ufw enable

ポート5678を直接外部に公開しないでください。Nginx経由で443番ポートのみ公開し、n8nへのアクセスはNginxを通す構成にします。

よくあるトラブルと対処法

「502 Bad Gateway」が出る場合:n8nのコンテナが起動していないか、ポート5678が正しくマッピングされていない可能性があります。docker compose logs n8nでエラーを確認してください。

ワークフローの保存時にエラーが出る場合:PostgreSQLの接続設定(ホスト名、パスワード)が間違っている可能性があります。docker compose logs postgresでDBのログを確認してください。

Webhookが受信できない場合WEBHOOK_URLの設定とNginxのproxy_passが一致しているか確認してください。また、ファイアウォールで443番ポートが開放されているかも要チェックです。

セルフホストの運用コスト

実際にかかるコストをまとめます。

項目 月額 備考
ConoHa VPS 2GBプラン 995円 36ヶ月契約時
ドメイン 約100円 年額1,200円程度を月割り
SSL証明書 0円 Let’s Encryptで無料
合計 約1,100円 n8n Cloud(約3,000円)の約1/3

n8n Cloudとの差額は月額約1,900円、年間で約23,000円。その分をClaude APIやOpenAI APIの利用料金に回せると考えると、エンジニアにとってセルフホストは合理的な選択です。

関連書籍

まとめ:セルフホストは「コスト削減」だけでなく「自由度」を得る手段

n8nのセルフホストは、月額を約1/3にできるコスト面のメリットだけではありません。カスタムノードの自由な追加、実行回数の制限なし、ワークフローデータの完全な自己管理。これらはn8n Cloudでは得られないメリットです。

  • すぐに始めたいならConoHa VPSのスタートアップスクリプト
  • 構成を理解して運用したいならDocker Compose手動構築
  • Dockerに慣れていないならXServer VPSのn8nアプリイメージ

どの方法を選んでも、メモリ2GB以上のVPSとドメインがあれば30分以内にn8nが動き始めます。ブログの自動化パイプラインも、このセルフホスト環境の上で動かす予定です。

n8nのワークフロー構築自体は直感的ですが、API設計やWebhookの基礎知識があると自由度が一気に広がります。体系的に学びたい場合は、デイトラのWebアプリ開発コースがAPI連携やバックエンド周りをカバーしています。

進展があればまたこのブログで報告します。

コメント

タイトルとURLをコピーしました