タグ: VPS

  • n8nセルフホスト構築ガイド|Docker Composeで本番環境を構築する方法

    n8nセルフホスト構築ガイド|Docker Composeで本番環境を構築する方法

    n8nのセルフホストは、Cloud版と比べてコストを大幅に抑えながら、実行回数無制限・完全なデータ管理を実現できる運用方法です。この記事では、Docker Composeを使ったセルフホスト環境の構築から、本番運用に必要なHTTPS化、バックアップ、アップデートまでを解説します。

    セルフホストとCloud版の比較

    n8nには大きく3つの利用形態があります。

    項目 Cloud版 セルフホスト(VPS) ローカル(Docker Desktop)
    月額コスト €20〜50 ¥700〜2,000(サーバー代) 無料
    実行回数 2,500〜10,000/月 無制限 無制限
    外部連携(Webhook) △(トンネル必要)
    24時間稼働 ×(PC起動時のみ)
    運用・保守 不要 自己責任 自己責任
    データ管理 n8n社 自社管理 自社管理

    セルフホストが向いているケース

    • ワークフローの実行回数が多く、Cloud版の上限を超える
    • 機密データを外部サービスに預けたくない
    • 月額コストを最小限に抑えたい
    • サーバー運用の知識がある(または学ぶ意欲がある)

    セルフホストの選択肢

    セルフホストの構築先として、主に以下の選択肢があります。

    サービス 月額目安 特徴
    Hostinger VPS ¥780〜1,200 1クリックでn8nインストール可能、初心者向け
    XServer VPS ¥830〜1,150 国内サーバー、日本語サポート充実
    シン・VPS ¥620〜900 国内最安クラス
    DigitalOcean $6〜12 1クリックでn8nインストール可能、海外サーバー
    Railway $5〜(従量課金) PaaS型、使用量に応じて課金
    GCP Compute Engine 無料枠あり e2-micro無料枠で運用可能

    この記事では、汎用的なVPS環境を想定し、Docker Composeを使った構築方法を解説します。

    前提条件

    • VPS(Ubuntu 22.04/24.04 推奨、メモリ2GB以上)
    • SSH接続環境
    • 独自ドメイン(HTTPS化する場合)
    • 基本的なLinuxコマンドの知識

    ステップ1:Dockerのインストール

    まずVPSにSSH接続し、Dockerをインストールします。

    1-1. システムの更新

    
    sudo apt update && sudo apt upgrade -y
    

    1-2. Dockerのインストール

    公式のインストールスクリプトを使用します。

    
    curl -fsSL <a href="https://get.docker.com" target="_blank" rel="noopener">https://get.docker.com</a> | sh
    

    1-3. 現在のユーザーをdockerグループに追加

    
    sudo usermod -aG docker $USER
    

    一度ログアウトして再ログインするか、以下を実行します。

    
    newgrp docker
    

    1-4. インストール確認

    
    docker –version
    docker compose version
    

    バージョン情報が表示されれば成功です。

    ステップ2:n8n用のディレクトリとファイルを作成

    2-1. 作業ディレクトリの作成

    
    mkdir -p ~/n8n
    cd ~/n8n
    

    2-2. docker-compose.ymlの作成

    本番運用を想定し、PostgreSQLをデータベースとして使用する構成です。

    
    nano docker-compose.yml
    

    以下の内容を貼り付けます。

    
    version: ‘3.8’
    
    services:
      postgres:
        image: postgres:16
        restart: always
        environment:
          POSTGRES_USER: ${POSTGRES_USER}
          POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
          POSTGRES_DB: ${POSTGRES_DB}
        volumes:
          - postgres_data:/var/lib/postgresql/data
        healthcheck:
          test: [“CMD-SHELL”, “pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}”]
          interval: 10s
          timeout: 5s
          retries: 5
    
      n8n:
        image: n8nio/n8n:latest
        restart: always
        ports:
          - “5678:5678″
        environment:
          - DB_TYPE=postgresdb
          - DB_POSTGRESDB_HOST=postgres
          - DB_POSTGRESDB_PORT=5432
          - DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
          - DB_POSTGRESDB_USER=${POSTGRES_USER}
          - DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
          - N8N_HOST=${N8N_HOST}
          - N8N_PORT=5678
          - N8N_PROTOCOL=${N8N_PROTOCOL}
          - WEBHOOK_URL=${WEBHOOK_URL}
          - GENERIC_TIMEZONE=Asia/Tokyo
          - TZ=Asia/Tokyo
        volumes:
          - n8n_data:/home/node/.n8n
        depends_on:
          postgres:
            condition: service_healthy
    
    volumes:
      postgres_data:
      n8n_data:
    

    Ctrl + XYEnter で保存します。

    2-3. 環境変数ファイルの作成

    
    nano .env
    

    以下の内容を記述します。パスワードは必ず変更してください。

    
    # PostgreSQL設定
    POSTGRES_USER=n8n_user
    POSTGRES_PASSWORD=your_secure_password_here
    POSTGRES_DB=n8n
    
    # n8n設定
    N8N_HOST=localhost
    N8N_PROTOCOL=http
    WEBHOOK_URL=<a href="http://localhost:5678/" target="_blank" rel="noopener">http://localhost:5678/</a>
    

    パスワードの生成例

    
    openssl rand -base64 24
    

    ステップ3:n8nの起動と初期設定

    3-1. コンテナの起動

    
    docker compose up -d
    

    初回はイメージのダウンロードに数分かかります。

    3-2. 起動確認

    
    docker compose ps
    

    両方のコンテナが「running」になっていれば成功です。

    
    docker compose logs -f n8n
    

    ログを確認し、エラーがないことを確認します(Ctrl + Cで終了)。

    3-3. ブラウザでアクセス

    http://サーバーのIPアドレス:5678

    にアクセスします。初回はオーナーアカウントの作成画面が表示されます。

    1. メールアドレス、パスワード、名前を入力
    2. 「Next」をクリック
    3. アンケートに回答(スキップ可)
    4. ライセンス登録画面でメールアドレスを入力し、無料ライセンスキーを取得

    ステップ4:HTTPS化(本番運用向け)

    本番環境ではHTTPS化が必須です。ここではCaddyをリバースプロキシとして使用する方法を紹介します。

    4-1. ドメインのDNS設定

    お使いのドメインのDNS設定で、AレコードをVPSのIPアドレスに向けます。

    例:n8n.example.com203.0.113.1

    4-2. docker-compose.ymlの修正

    Caddyを追加した構成に変更します。

    
    version: ‘3.8’
    
    services:
      caddy:
        image: caddy:2
        restart: always
        ports:
          - “80:80″
          - “443:443″
        volumes:
          - ./Caddyfile:/etc/caddy/Caddyfile
          - caddy_data:/data
          - caddy_config:/config
        depends_on:
          - n8n
    
      postgres:
        image: postgres:16
        restart: always
        environment:
          POSTGRES_USER: ${POSTGRES_USER}
          POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
          POSTGRES_DB: ${POSTGRES_DB}
        volumes:
          - postgres_data:/var/lib/postgresql/data
        healthcheck:
          test: [“CMD-SHELL”, “pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}”]
          interval: 10s
          timeout: 5s
          retries: 5
    
      n8n:
        image: n8nio/n8n:latest
        restart: always
        environment:
          - DB_TYPE=postgresdb
          - DB_POSTGRESDB_HOST=postgres
          - DB_POSTGRESDB_PORT=5432
          - DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
          - DB_POSTGRESDB_USER=${POSTGRES_USER}
          - DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
          - N8N_HOST=${N8N_HOST}
          - N8N_PORT=5678
          - N8N_PROTOCOL=https
          - WEBHOOK_URL=<a href="https://${N8N_HOST}/" target="_blank" rel="noopener">https://${N8N_HOST}/</a>
          - GENERIC_TIMEZONE=Asia/Tokyo
          - TZ=Asia/Tokyo
        volumes:
          - n8n_data:/home/node/.n8n
        depends_on:
          postgres:
            condition: service_healthy
    
    volumes:
      postgres_data:
      n8n_data:
      caddy_data:
      caddy_config:
    

    n8nのportsを削除し、Caddyからのみアクセスさせる構成にしています。

    4-3. Caddyfileの作成

    
    nano Caddyfile
    
    
    n8n.example.com {
        reverse_proxy n8n:5678
    }
    

    n8n.example.comを実際のドメインに置き換えてください。CaddyはLet’s Encryptから自動でSSL証明書を取得します。

    4-4. .envファイルの更新

    
    # PostgreSQL設定
    POSTGRES_USER=n8n_user
    POSTGRES_PASSWORD=your_secure_password_here
    POSTGRES_DB=n8n
    
    # n8n設定
    N8N_HOST=n8n.example.com
    

    4-5. 再起動

    
    docker compose down
    docker compose up -d
    

    https://n8n.example.comでアクセスできれば完了です。

    ステップ5:運用・保守

    n8nのアップデート

    n8nは頻繁にアップデートされます。以下のコマンドで最新版に更新できます。

    
    cd ~/n8n
    docker compose pull
    docker compose up -d
    

    現在のバージョン確認:

    
    docker exec -it n8n-n8n-1 n8n -v
    

    バックアップ

    定期的なバックアップを推奨します。

    データベースのバックアップ

    
    docker exec n8n-postgres-1 pg_dump -U n8n_user n8n > backup_$(date +%Y%m%d).sql
    

    ボリュームごとバックアップ

    
    docker compose down
    sudo tar -czvf n8n_backup_$(date +%Y%m%d).tar.gz 
      /var/lib/docker/volumes/n8n_postgres_data 
      /var/lib/docker/volumes/n8n_n8n_data
    docker compose up -d
    

    ログの確認

    
    # n8nのログ
    docker compose logs -f n8n
    
    # PostgreSQLのログ
    docker compose logs -f postgres
    
    # 直近100行
    docker compose logs –tail=100 n8n
    

    コンテナの再起動

    
    docker compose restart
    

    トラブルシューティング

    コンテナが起動しない

    
    docker compose logs
    

    でエラー内容を確認します。よくある原因:

    • ポート5678が他のプロセスで使用中
    • .envファイルの記述ミス
    • PostgreSQLの接続エラー

    Webhookが動作しない

    • WEBHOOK_URLが正しく設定されているか確認
    • ファイアウォールでポート80/443が開いているか確認
    • ドメインのDNS設定が正しいか確認

    セキュアクッキーのエラー

    HTTPでアクセスしている場合に発生します。本番環境ではHTTPS化してください。ローカルテスト時は以下の環境変数を追加することで回避できます(非推奨)。

    
    environment:
      - N8N_SECURE_COOKIE=false
    

    メモリ不足

    VPSのメモリが1GB未満の場合、n8nの動作が不安定になることがあります。スワップファイルを追加するか、メモリを増設してください。

    
    # スワップファイルの追加(2GB)
    sudo fallocate -l 2G /swapfile
    sudo chmod 600 /swapfile
    sudo mkswap /swapfile
    sudo swapon /swapfile
    echo ‘/swapfile none swap sw 0 0’ | sudo tee -a /etc/fstab
    

    ライセンスについて

    n8nは「Sustainable Use License」を採用しています。

    • 無料で利用可能:社内業務、非商用、個人利用
    • 商用利用可能:自社の業務自動化に使用する場合
    • 有料ライセンス必要:n8nをホスティングサービスとして第三者に提供する場合、ホワイトラベル提供する場合

    自社の業務自動化目的であれば、セルフホストは完全無料で利用できます。

    よくある質問

    Q. Cloud版からセルフホストに移行できますか?

    A. はい、可能です。Cloud版のn8nからワークフローをエクスポート(JSON形式)し、セルフホスト環境にインポートできます。ただし、認証情報(Credentials)は再設定が必要です。

    Q. 複数人で使えますか?

    A. はい、セルフホスト版でも複数ユーザーを作成できます。ユーザー管理機能は無料で利用可能です。

    Q. PostgreSQLの代わりにSQLiteでも動きますか?

    A. はい、環境変数でDB_TYPE=sqliteを指定すれば動作します。ただし、本番環境ではPostgreSQLを推奨します。SQLiteはパフォーマンスや同時接続数に制限があります。

    Q. どのくらいのスペックが必要ですか?

    A. 最低要件としてCPU 1コア、メモリ1GBで動作しますが、安定運用には2コア、2GB以上を推奨します。ワークフローの複雑さや実行頻度に応じてスケールアップを検討してください。

    Q. 自動バックアップは設定できますか?

    A. cronを使って定期バックアップを設定できます。以下は毎日午前3時にバックアップを実行する例です。

    
    crontab -e
    # 以下を追加
    0 3 * * * cd ~/n8n && docker exec n8n-postgres-1 pg_dump -U n8n_user n8n > ~/backups/n8n_$(date +%Y%m%d).sql
    

    まとめ

    n8nのセルフホストは、初期設定の手間はかかりますが、一度構築すれば低コストで実行回数無制限の自動化環境を手に入れられます。

    この記事で解説した内容

    • Docker Composeを使ったn8n環境の構築
    • PostgreSQLをデータベースとして使用する本番構成
    • CaddyによるHTTPS化
    • アップデート、バックアップなどの運用方法

    まずはCloud版の14日間無料トライアルでn8nの使い方を学び、本格運用の段階でセルフホストに移行するのがおすすめの流れです。

    n8nの基本的な使い方については、料金プランの詳細はも参考にしてください。

  • 【完全版】n8n VPS構築ガイド|Ubuntu・Docker・SSL設定からセルフホスト本番運用まで

    【完全版】n8n VPS構築ガイド|Ubuntu・Docker・SSL設定からセルフホスト本番運用まで

    n8nをVPSにセルフホストすることで、月額3,000円以上のクラウド版と同等の機能を、月額500〜1,500円程度のコストで運用できます。

    ワークフロー数や実行回数の制限がなく、データを自社管理下に置けるため、セキュリティ面でも優れています。

    この記事では、VPSの選定からUbuntu環境の構築、Docker設定、SSL証明書の取得、独自ドメインでの公開まで、n8nセルフホストの全工程を詳しく解説します。

    セルフホストのメリットとクラウド版との比較

    n8n Cloudとセルフホストの比較

    項目 n8n Cloud セルフホスト(VPS)
    月額費用 €20〜(約3,000〜4,500円) VPS代のみ(500〜1,500円)
    ワークフロー数 プランにより制限あり 無制限
    実行回数 プランにより制限あり 無制限
    データ管理 Anthropic社サーバー 自社管理
    カスタマイズ 制限あり 完全に自由
    運用負担 なし 自己責任
    サポート 公式サポートあり コミュニティのみ

    セルフホストが向いているケース

    • 月額コストを抑えたい
    • 大量のワークフローを実行する
    • 機密データを外部に置きたくない
    • カスタムノードを使用したい
    • サーバー管理の基礎知識がある

    VPSの選定とスペック要件

    n8nの最低システム要件

    項目 最低要件 推奨スペック
    CPU 1 vCPU 2 vCPU以上
    メモリ 2GB RAM 4GB以上
    ストレージ 10GB SSD 20GB以上(NVMe推奨)
    OS Ubuntu 20.04+ Ubuntu 22.04 / 24.04

    おすすめVPSプロバイダー

    国内サービス

    サービス 最小プラン 月額料金 特徴
    XServer VPS 2GB 830円〜 国内最安クラス、無料枠あり
    ConoHa VPS 1GB 682円〜 時間課金対応、管理画面が使いやすい
    さくらのVPS 1GB 880円〜 安定性、サポート充実

    海外サービス

    サービス 最小プラン 月額料金 特徴
    DigitalOcean 1GB $6〜 n8nテンプレートあり
    Vultr 1GB $5〜 東京リージョンあり
    Hetzner 2GB €4〜 コスパ最強

    Ubuntu環境の初期セットアップ

    VPSを契約したら、まずUbuntu環境の初期設定を行います。

    Step 1:SSHでサーバーに接続


    ssh root@your_server_ip

    Step 2:システムの更新


    # パッケージリストの更新
    sudo apt update

    # インストール済みパッケージの更新
    sudo apt upgrade -y

    Step 3:新規ユーザーの作成(推奨)

    rootでの運用は避け、一般ユーザーを作成します。


    # 新規ユーザー作成
    adduser n8nadmin

    # sudo権限を付与
    usermod -aG sudo n8nadmin

    # 新ユーザーでログイン確認
    su – n8nadmin

    Step 4:ファイアウォールの設定


    # UFWの有効化
    sudo ufw allow OpenSSH
    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp
    sudo ufw allow 5678/tcp
    sudo ufw enable

    # 設定確認
    sudo ufw status

    Step 5:タイムゾーンの設定


    sudo timedatectl set-timezone Asia/Tokyo

    Dockerのインストール

    n8nの運用にはDockerを使用することを強く推奨します。

    Docker Engineのインストール


    # 公式スクリプトでインストール
    curl -fsSL https://get.docker.com | bash

    # 一般ユーザーでDockerを実行できるようにする
    sudo usermod -aG docker $USER

    # 設定を反映(再ログインが必要)
    newgrp docker

    # 動作確認
    docker –version

    Docker Composeのインストール


    # Docker Compose v2(プラグイン版)
    sudo apt install docker-compose-plugin -y

    # 動作確認
    docker compose version

    n8nのインストールと起動

    Step 1:作業ディレクトリの作成


    mkdir -p ~/n8n-docker
    cd ~/n8n-docker

    Step 2:環境変数ファイルの作成


    nano .env

    以下の内容を入力:


    # n8n設定
    N8N_BASIC_AUTH_ACTIVE=true
    N8N_BASIC_AUTH_USER=admin
    N8N_BASIC_AUTH_PASSWORD=your_secure_password

    # サーバー設定
    N8N_HOST=your_server_ip
    N8N_PORT=5678
    N8N_PROTOCOL=http
    WEBHOOK_URL=http://your_server_ip:5678/

    # タイムゾーン
    TZ=Asia/Tokyo

    # 暗号化キー(32文字以上のランダム文字列)
    N8N_ENCRYPTION_KEY=your_32_char_encryption_key_here

    Step 3:docker-compose.ymlの作成


    nano docker-compose.yml

    以下の内容を入力:


    version: "3.8"

    services:
    n8n:
    image: n8nio/n8n:latest
    container_name: n8n
    restart: always
    ports:
    – “5678:5678”
    environment:
    – N8N_BASIC_AUTH_ACTIVE=${N8N_BASIC_AUTH_ACTIVE}
    – N8N_BASIC_AUTH_USER=${N8N_BASIC_AUTH_USER}
    – N8N_BASIC_AUTH_PASSWORD=${N8N_BASIC_AUTH_PASSWORD}
    – N8N_HOST=${N8N_HOST}
    – N8N_PORT=${N8N_PORT}
    – N8N_PROTOCOL=${N8N_PROTOCOL}
    – WEBHOOK_URL=${WEBHOOK_URL}
    – GENERIC_TIMEZONE=${TZ}
    – TZ=${TZ}
    – N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
    – N8N_SECURE_COOKIE=false
    volumes:
    – n8n_data:/home/node/.n8n

    volumes:
    n8n_data:

    Step 4:n8nの起動


    # コンテナを起動
    docker compose up -d

    # ログ確認
    docker compose logs -f n8n

    Step 5:動作確認

    ブラウザで以下にアクセス:


    http://your_server_ip:5678

    .envで設定したユーザー名とパスワードでログインします。

    独自ドメインとSSL証明書の設定

    本番運用では、独自ドメインとHTTPS接続が必須です。

    Step 1:ドメインのDNS設定

    ドメインのDNS管理画面で、Aレコードを追加します。


    Type: A
    Name: n8n(またはサブドメイン)
    Value: your_server_ip
    TTL: 3600

    Step 2:Nginxのインストール


    sudo apt install nginx -y
    sudo systemctl enable nginx
    sudo systemctl start nginx

    Step 3:Nginx設定ファイルの作成


    sudo nano /etc/nginx/sites-available/n8n

    以下の内容を入力(n8n.yourdomain.comを自分のドメインに置換):


    server {
    listen 80;
    server_name n8n.yourdomain.com;

    location / {
    proxy_pass http://localhost:5678;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection “upgrade”;
    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 $scheme;
    chunked_transfer_encoding off;
    proxy_buffering off;
    proxy_cache off;
    }
    }

    Step 4:設定の有効化


    # シンボリックリンクの作成
    sudo ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/

    # 設定テスト
    sudo nginx -t

    # Nginx再起動
    sudo systemctl reload nginx

    Step 5:SSL証明書の取得(Let’s Encrypt)


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

    # SSL証明書の取得と設定
    sudo certbot –nginx -d n8n.yourdomain.com

    メールアドレスの入力と利用規約への同意が求められます。

    Step 6:環境変数の更新

    SSL設定後、.envファイルを更新します。


    N8N_HOST=n8n.yourdomain.com
    N8N_PROTOCOL=https
    WEBHOOK_URL=https://n8n.yourdomain.com/

    docker-compose.ymlも更新:


    environment:
    # ...他の設定
    - N8N_SECURE_COOKIE=true

    Step 7:n8nの再起動


    docker compose down
    docker compose up -d

    これで https://n8n.yourdomain.com でアクセスできます。

    PostgreSQLの追加(本番向け)

    本番運用では、SQLiteではなくPostgreSQLを使用します。

    docker-compose.yml(PostgreSQL版)


    version: "3.8"

    services:
    postgres:
    image: postgres:15-alpine
    container_name: n8n-postgres
    restart: always
    environment:
    – POSTGRES_USER=n8n
    – POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
    – POSTGRES_DB=n8n
    volumes:
    – postgres_data:/var/lib/postgresql/data
    healthcheck:
    test: [‘CMD-SHELL’, ‘pg_isready -U n8n’]
    interval: 10s
    timeout: 5s
    retries: 5

    n8n:
    image: n8nio/n8n:latest
    container_name: n8n
    restart: always
    ports:
    – “5678:5678”
    environment:
    – DB_TYPE=postgresdb
    – DB_POSTGRESDB_HOST=postgres
    – DB_POSTGRESDB_PORT=5432
    – DB_POSTGRESDB_DATABASE=n8n
    – DB_POSTGRESDB_USER=n8n
    – DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
    – N8N_BASIC_AUTH_ACTIVE=${N8N_BASIC_AUTH_ACTIVE}
    – N8N_BASIC_AUTH_USER=${N8N_BASIC_AUTH_USER}
    – N8N_BASIC_AUTH_PASSWORD=${N8N_BASIC_AUTH_PASSWORD}
    – N8N_HOST=${N8N_HOST}
    – N8N_PORT=${N8N_PORT}
    – N8N_PROTOCOL=${N8N_PROTOCOL}
    – WEBHOOK_URL=${WEBHOOK_URL}
    – GENERIC_TIMEZONE=${TZ}
    – TZ=${TZ}
    – N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
    – N8N_SECURE_COOKIE=true
    volumes:
    – n8n_data:/home/node/.n8n
    depends_on:
    postgres:
    condition: service_healthy

    volumes:
    postgres_data:
    n8n_data:

    .envにPostgreSQLのパスワードを追加:


    POSTGRES_PASSWORD=your_db_password_here

    n8nのアップデート方法

    Dockerイメージの更新


    # 作業ディレクトリに移動
    cd ~/n8n-docker

    # 最新イメージをプル
    docker compose pull

    # コンテナを再作成
    docker compose up -d

    # 古いイメージを削除
    docker image prune -f

    アップデート前の確認事項

    • リリースノートで破壊的変更を確認
    • バックアップを取得
    • テスト環境で動作確認(可能であれば)

    バックアップの設定

    自動バックアップスクリプト


    nano ~/n8n-backup.sh


    #!/bin/bash
    BACKUP_DIR="/home/n8nadmin/backups"
    DATE=$(date +%Y%m%d_%H%M%S)

    # ディレクトリ作成
    mkdir -p ${BACKUP_DIR}

    # PostgreSQLバックアップ(PostgreSQL使用時)
    docker exec n8n-postgres pg_dump -U n8n -d n8n | gzip > ${BACKUP_DIR}/n8n_db_${DATE}.sql.gz

    # n8nデータボリュームのバックアップ
    docker run –rm -v n8n-docker_n8n_data:/data -v ${BACKUP_DIR}:/backup alpine
    tar czf /backup/n8n_data_${DATE}.tar.gz -C /data .

    # 7日より古いバックアップを削除
    find ${BACKUP_DIR} -name “*.gz” -mtime +7 -delete

    echo “Backup completed: ${DATE}”


    # 実行権限を付与
    chmod +x ~/n8n-backup.sh

    cronで自動実行


    crontab -e

    以下を追加:


    0 3 * * * /home/n8nadmin/n8n-backup.sh >> /home/n8nadmin/backup.log 2>&1

    セキュリティ強化

    SSH鍵認証の設定


    # ローカルPCで鍵を生成
    ssh-keygen -t ed25519 -C "your_email@example.com"

    # 公開鍵をサーバーにコピー
    ssh-copy-id n8nadmin@your_server_ip

    # パスワード認証を無効化
    sudo nano /etc/ssh/sshd_config
    # PasswordAuthentication no に変更

    sudo systemctl restart sshd

    Fail2banの導入


    sudo apt install fail2ban -y
    sudo systemctl enable fail2ban
    sudo systemctl start fail2ban

    自動セキュリティ更新


    sudo apt install unattended-upgrades -y
    sudo dpkg-reconfigure -plow unattended-upgrades

    トラブルシューティング

    よくある問題と解決方法

    問題 原因 解決方法
    ブラウザでアクセスできない ファイアウォール設定 UFWでポート5678を許可
    Webhookが動作しない WEBHOOK_URLの設定ミス 外部からアクセス可能なURLを設定
    認証情報が保存されない ボリュームマウントの問題 docker-compose.ymlのvolumes設定を確認
    SSL証明書エラー DNS設定の反映待ち 数分〜数時間待って再試行
    コンテナが再起動を繰り返す 設定エラー docker compose logs で確認

    ログの確認方法


    # n8nのログ
    docker compose logs -f n8n

    # Nginxのログ
    sudo tail -f /var/log/nginx/error.log

    # システムログ
    sudo journalctl -u docker -f

    よくある質問(FAQ)

    Q. VPSのスペックはどれくらい必要ですか?

    A. 小〜中規模のワークフローであれば、2GB RAM / 1 vCPUで十分です。複雑なワークフローや同時実行が多い場合は、4GB RAM以上を推奨します。

    Q. セルフホストでも公式サポートは受けられますか?

    A. Community版(セルフホスト)では公式サポートはありません。コミュニティフォーラムやGitHubのIssueを活用してください。Enterprise版を契約すれば公式サポートが受けられます。

    Q. SQLiteのままでも問題ないですか?

    A. 個人利用や小規模な使用であれば問題ありません。ただし、Webhookを多数受け付ける場合や、本番運用ではPostgreSQLを推奨します。

    Q. アップデートでデータは消えませんか?

    A. Dockerボリュームを使用していれば、イメージの更新でデータは消えません。ただし、念のためアップデート前にバックアップを取得してください。

    Q. 複数人で使用できますか?

    A. Community版では複数ユーザーの管理機能は制限されています。チームでの利用にはEnterprise版の検討をおすすめします。

    まとめ

    この記事では、n8nのVPSセルフホスト構築を解説しました。

    構築の流れ

    1. VPSの契約(2GB RAM以上推奨)
    2. Ubuntu環境の初期設定
    3. Docker / Docker Composeのインストール
    4. n8nのdocker-compose.yml作成と起動
    5. 独自ドメインとSSL証明書の設定
    6. PostgreSQLの追加(本番向け)
    7. バックアップの自動化

    本番運用のポイント

    • N8N_ENCRYPTION_KEYを必ず設定・バックアップ
    • SSL証明書でHTTPS接続を有効化
    • PostgreSQLでデータベースを永続化
    • 定期的なバックアップを自動化
    • セキュリティ設定(SSH鍵認証、Fail2ban)

    コスト比較

    • n8n Cloud:月額€20〜(約3,000〜4,500円)
    • セルフホスト:月額500〜1,500円(VPS代のみ)

    セルフホストにより、年間で2〜4万円のコスト削減が可能です。サーバー管理の手間はありますが、一度構築すれば安定して運用できます。ぜひチャレンジしてみてください。