Linux システムに Docker を使用して n8n をデプロイする方法ガイド

タスク自動化は、特にワークフロー管理が複雑になりやすいLinux環境において、これまで以上に生産性向上に不可欠な要素となっています。n8nは、API接続、Webhookのオーケストレーション、複雑な統合管理を、既存のシステムを再発明することなく実現するための、理想的で柔軟なオープンソースソリューションです。Dockerは、ランタイム環境を分離することでデプロイメントを簡素化し、基盤となるLinuxシステムに関係なく、安定した移植性の高い運用を保証します。この詳細なガイドでは、専用マシンでもクラウド環境でも、データベースにはPostgreSQL、セキュアなリバースプロキシにはNginxといった堅牢なツールを活用しながら、LinuxサーバーにDockerとn8nをデプロイするための手順を段階的に説明します。このチュートリアルは、自動化ソリューションの産業化を目指すシステム管理者と、コンテナ環境におけるNode.jsの可能性を探求したいLinux愛好家の両方を対象としています。LinuxシステムにDockerとn8nをインストールするための必須の前提条件

デプロイメントを開始する前に、各コンポーネントがシームレスに動作できる適切な環境を準備することが重要です。 Linuxサーバーは安定している必要があります。通常はDebianまたはUbuntuが適しており、堅牢性とDockerおよび関連ツールとの幅広い互換性で知られています。n8nとその依存関係をホストするコンテナの起動をオーケストレーションするため、DockerとDocker Composeのインストールは必須です。

n8nインスタンスのセキュリティを確保するには、NginxやTraefikなどのリバースプロキシの使用をお勧めします。これにより、Let’s Encryptで無料で管理されるSSL/TLS証明書を追加できます。このレベルのセキュリティは、WebhookやAPIをインターネットに公開する際に不可欠であり、やり取りの機密性と整合性を確保します。本番環境では、ネイティブSQLiteよりもPostgreSQLデータベースの使用が推奨されます。PostgreSQLは、スケーラビリティが高く、多数のクエリをより効率的に処理できるためです。必須の前提条件は以下の通りです。

最新の Linux サーバー

(Debian 11 以上、Ubuntu 22.04 以上を推奨)

  • Docker と Docker Compose がインストールされている (Docker 20.10 以上、Compose 2.x 以上)
  • リバースプロキシがインストールされている (Nginx または Traefik を推奨)
  • サーバーを指すドメイン名 (アクセスと SSL 設定を容易にするため)
  • PostgreSQL が Docker 経由で設定され、n8n データベースを管理 適切なネットワーク構成
  • : ポート 80、443 (HTTP/S)、5678 (n8n) が開かれ、必要に応じてリダイレクトされている Linux 初心者であれば、これらの要素が何を表しているかを理解することでメリットが得られます。Docker はアプリケーションを軽量コンテナにカプセル化し、ホストシステムから分離します。一方、Nginx などのリバースプロキシは、n8n への受信アクセスをリダイレクトして保護します。PostgreSQL は強力なリレーショナルデータベースであり、堅牢性と n8n のベースである Node.js フレームワークとの互換性を備えているため、本番環境インスタンスに最適です。
  • Linux 上で Docker Compose を使用して Docker 環境を構成し、n8n をカスタマイズする Linux に n8n をデプロイする魅力は、Docker Compose の使いやすさにあります。この YAML ファイルは、すべてのコンテナとその相互作用を読み取りと編集が可能な形式で記述します。初期設定では、専用の n8n ツリーを作成し、次に 2 つの必須ファイルを定義します。

.env

環境変数用、そしてサービスのオーケストレーション用にはdocker-compose.ymlを使用します。

見落とされがちなのが、永続データの分離です。3つのローカルフォルダを作成する必要があります。1つはPostgreSQLデータ用、1つはn8nによって生成されたファイル用、そして最後に一時ファイルまたはスワップファイル用です。これらのディレクトリはそれぞれのコンテナにマウントされ、再起動やアップデートによるデータ損失を防ぎます。ディレクトリ作成の例: mkdir -p /opt/docker-compose/n8n/{postgresql,n8n_data,n8n_files} chmod 777 /opt/docker-compose/n8n/n8n_data (権限エラーを回避するために必要) .env ファイルには、以下の主要な変数が含まれています: N8N_HOST

: インターフェースで表示され、URL 生成に使用されるホスト名

N8N_WEBHOOK_URL

  • : Webhook が正しく動作するための、パブリックアクセス可能な URL
  • POSTGRES_DB

, POSTGRES_USER ,

  • POSTGRES_PASSWORD : PostgreSQL データベース接続情報
  • N8N_GENERIC_TIMEZONE : タイムゾーン (ワークフロー実行に影響)
  • docker-compose.yml には、以下の 2 つの主要サービスが含まれています:postgres : 環境変数設定、永続ボリューム、ヘルスチェックを含む公式 PostgreSQL イメージに基づいていますn8n : 公式n8n Dockerイメージ、アプリケーションをデータベースに接続するための環境変数設定、ポート管理、データとファイルを永続化するためのボリューム、そしてPostgreSQLのヘルス依存関係 これら2つのファイルを使って設定することで、自動化され、再現可能で、簡単に変更できる環境を構築できます。これは、オープンソースソフトウェア、Docker、そしてLinuxの強みを組み合わせたものです。この方法は、依存関係エラーやバージョン間の非互換性の問題からも保護します。
  • https://www.youtube.com/watch?v=NAzpMf50auI Linuxシステム上でn8n用Dockerコンテナを起動および管理する

環境の準備が整ったら、n8nコンテナがファイルへの書き込みに問題が生じないように、マウントしたフォルダの権限が適切であることを確認する必要があります。ほとんどの場合、n8nのデータを含むフォルダにchmod 777を設定する必要がありますが、この方法は権限が緩いため、関連するリスクを十分に理解する必要があります。 以下のコマンドでコンテナを起動すると、バックグラウンドサービスを開始およびデプロイできます。 sudo docker compose up -d

  • 以下のコマンドでコンテナの状態を監視します。 sudo docker compose ps
  • アクティブなコンテナのリストとそのステータスを表示します。 sudo docker compose logs -f

出力ログをリアルタイムで表示します。問題発生時に不可欠です。 PostgreSQLコンテナは、n8nが正しく接続し、エラーなく起動できるように、「正常な」状態である必要があります。ログには次のようなメッセージが表示されます。「エディターは https://n8n.it-connect.local 経由でアクセスできるようになりました」

このメッセージは、サービスが稼働しており、ポート 5678 経由で使用できる状態であることを示しています。設定されたドメイン名を使用してブラウザからアクセスできます。ログマネージャーを使用すると、Node.js、PostgreSQL データベース、ミドルウェアに基づく複雑なソリューションをデプロイする際の診断が大幅に簡素化されます。

Linux で HTTPS 経由で n8n を保護および公開するために Nginx リバースプロキシを構成する

リバースプロキシは、特に Webhook を使用する場合や、自動化をインターネット経由で公開する場合に、n8n へのアクセスを保護するための基本的な構成要素です。Nginx は軽量で信頼性が高く、設定が簡単なため、Linux では最適な選択肢です。Docker ポート 5678 を直接公開する代わりに、Nginx が仲介役として機能し、SSL/TLS 証明書を適用し、重要なリダイレクトと HTTP ヘッダーを管理できるようにします。主な手順は次のとおりです。

パッケージマネージャーを使ってNginxをインストールします。例えば、Debian/Ubuntuでは sudo apt install nginx です。

  • 自己署名証明書またはLet’s Encryptで生成したSSL証明書を保存するディレクトリを作成します。

OpenSSL(またはLet’s Encryptの場合はCertbot)を使って証明書を生成します。

  • sudo openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout /etc/nginx/ssl/n8n.key -out /etc/nginx/ssl/n8n.crt Nginxの設定には、2つのサーバーブロックを含める必要があります。
  • ポート80をリッスンするブロック(HTTPSへの301リダイレクトを実行します)。証明書、TLS 1.2および1.3プロトコルのサポート、そしてn8nが実行される http://127.0.0.1:5678 での proxy_pass 設定を含むHTTPSブロック。 基本的な設定ファイルは以下のようになります(ドメイン名は適宜変更してください)。

Nginx 設定スニペット:

server {

listen 80;

server_name n8n.example.com;

return 301 https://$server_name$request_uri;

}

  • server { listen 443 ssl http2; server_name n8n.example.com;
  • ssl_certificate /etc/nginx/ssl/n8n.crt;
  • ssl_certificate_key /etc/nginx/ssl/n8n.key;

ssl_protocols TLSv1.2 TLSv1.3;

ssl_prefer_server_ciphers off;

  • ssl_session_cache shared:SSL:10m;
  • ssl_session_timeout 10m; レンタル / { proxy_pass http://127.0.0.1:5678;

proxy_http_version 1.1;

proxy_set_header アップグレード $http_upgrade;

<!– wp:code {"content":"
nserver {n    listen 80;n    server_name n8n.example.com;n    return 301 https://$server_name$request_uri;n}nnserver {n    listen 443 ssl http2;n    server_name n8n.example.com;nn    ssl_certificate /etc/nginx/ssl/n8n.crt;n    ssl_certificate_key /etc/nginx/ssl/n8n.key;n    ssl_protocols TLSv1.2 TLSv1.3;n    ssl_prefer_server_ciphers off;n    ssl_session_cache shared:SSL:10m;n    ssl_session_timeout 10m;nn    location / {n        proxy_pass http://127.0.0.1:5678;n        proxy_http_version 1.1;n        proxy_set_header Upgrade $http_upgrade;n        proxy_set_header Connection 'upgrade';n        proxy_set_header Host $host;n        proxy_set_header X-Real-IP $remote_addr;n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;n        proxy_set_header X-Forwarded-Proto $scheme;nn        proxy_buffering off;n        proxy_read_timeout 300s;n    }n}n
“} –>
proxy_set_header 接続 'upgrade';
    proxy_set_header ホスト $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;

proxy_bufferingoff;
    proxy_read_timeout 300s;
    }

    }
    /etc/nginx/sites-enabled/ 内のシンボリックリンク経由でこのサイトを有効化し、その後 Nginx をリロードする必要があります。
    sudo ln -s /etc/nginx/sites-available/n8n.example.com /etc/nginx/sites-enabled/
    sudo systemctl reload nginx
    https://n8n.example.com にアクセスすると、HTTPS で保護された n8n 管理インターフェースが表示されます。証明書が自己署名されている場合、SSL 証明書の警告が表示されることがありますが、これは認定 CA 経由で修正できます。
    

    n8n 入門:Linux でのワークフロー、Webhook、API 統合の管理
        n8n をインストールしてアクセスできるようになると、ワークフローを設定することで自動化を最大限に活用できるようになります。n8n は Node.js をベースに構築されており、API を介して数百ものサービスをネイティブサポートしているため、複雑な自動化チェーンを簡素化できます。主な概念は次のとおりです。
        ワークフロー
        :スクリプト、API 呼び出し、さまざまなトリガーを含む自動化されたタスクシーケンス。
        Webhook
        :外部からワークフローをトリガーするための HTTP エントリポイント。外部イベントへの対応に不可欠です。
        統合
        :MySQL、PostgreSQL、Redis など、多くのネイティブコネクタに対応しており、データの相互接続を容易にします。
        実例:顧客フォームによってトリガーされた Webhook を受信した後、CRM データを MySQL データベースと自動的に同期します。このオーケストレーションにより、手作業によるエラーを回避し、処理時間を短縮し、人的リソースを解放できます。

        n8nは直感的なグラフィカルインターフェースとすぐに使えるテンプレートも提供しており、GitHubまたは公式サイトからアクセスすることで、初心者でもプロセスを迅速に進めることができます。大規模な本番ワークフローにおけるキュー管理を改善するには、Redisを中間キャッシュとして使用することを推奨します。
        Docker、Linux、そしてn8nの相乗効果により、従来は複雑だったデプロイメントが簡素化されます。このモジュール型アーキテクチャは、アップデートとデバッグを容易にし、自動化アプリケーションの成長をサポートする制御されたスケーラビリティを提供します。