n8n

Docker と Docker‑Composeで n8n を VPS に安全にデプロイする手順

ⓘ本ページはプロモーションが含まれています

DXの導入や効果にお悩みの担当者へ

スポンサードリンク
 状況別に選べる  

DXを前に進めたい、あなたの立場と目的は?

DXの推進には社内政治や人々のリテラシーなど組織の様々な壁が立ちはだかります。導入後も部署・全社のAIリテラシーを底上げしていき浸透させていく運用が重要です。目的に合った本を選びやり方を学ぶことでDXの成功と会社の成長をもたらすことができますよ。

▷ 硬直的な組織でDXを導入したいなら

【イノベーションOps 組織を動かすDX&AI導入プロセスのすべて】を購入する

机上の空論にならない実践的導入ができるようになります

▷ さらに様々な事例を学びAIリテラシーを底上げしたいなら

Kindle Unlimited をサブスクする

月額980円だけで読み放題。30日間無料なので、合わなければ解約してもOK

▶ その他では 【AIエージェント時代のDX ビジネスオーケストレーションの衝撃】を購入する / 生成AIカテゴリー が参考になります。


スポンサードリンク

1. 前提条件と環境準備

本セクションでは、Docker Engine と Docker‑Compose プラグイン のインストール方法、および ファイアウォール設定(ufw)を中心に解説します。
VPS にログインできること、sudo 権限が付与されたユーザーで作業できることが前提です。

1.1 Docker Engine のインストール(Ubuntu/Debian 系)

Docker の公式リポジトリは GPG 鍵を apt-key ではなく keyring に保存するのが推奨されています。以下の手順で安全にセットアップできます。

ポイント:Docker‑Compose はプラグイン形式 (docker compose) が公式です。docker-compose バイナリは不要なので、上記手順だけで完結します。

macOS の場合

Homebrew 版も同様に docker compose コマンドが利用可能です。


1.2 Docker‑Compose プラグインのバージョン取得(インストール前に実行)

Docker Compose のプラグインは、GitHub Releases API から最新版タグを取得してダウンロードする方法が安全です。以下は Bash スクリプト例です。

注意DOCKER_COMPOSE_VERSION=$(docker compose version ...) のように、インストール前に docker compose を呼び出すとエラーになるため、上記 API 取得方式を採用してください。


1.3 ファイアウォール設定(ufw)

n8n の内部ポート 5678 はリバースプロキシ経由でのみ利用し、外部から直接アクセスさせないのがベストプラクティスです。したがって、インターネットに公開するのは 80/tcp(HTTP)443/tcp(HTTPS) のみとします。

ポイントufw allow 5678/tcp のように全世界へ開放すると、内部 API が外部から直撃される危険があります。上記設定でローカル限定に抑えましょう。


2. n8n Docker イメージの取得とタグ選択

このセクションでは 公式イメージの取得手順 と、バージョン固定の重要性 を解説します。実運用では「最新」タグよりも、特定リビジョンを明示的に指定する方が安定します。

2.1 最新タグ(動的取得)と推奨タグ

Docker Hub の n8nio/n8n リポジトリから 現在の最新版 を自動で取得したい場合は、以下のように API 経由で最新タグを取得します。

実務上の推奨N8N_TAG.env に保存し、Compose ファイルでは ${N8N_TAG} と変数展開することで、バージョン管理が容易になります。

2.2 バージョン固定例

以下は 2024 年 10 月時点での最新安定版(執筆時点)を取得する例です。将来的に別タグになる場合は、必ず公式リリースノート(https://github.com/n8n-io/n8n/releases)を確認してください。

注意0.240.0 といった将来のリリース番号を記載すると、実際に存在しない場合に読者が混乱します。必ず「現時点で公開されている最新タグ」か、latest を利用する旨を明示してください。


3. docker‑compose.yml の作成と永続化設定

本章では docker-compose.yml の全体像と、データベース選択・ボリューム定義のベストプラクティスを解説します。
「導入段落 → 設定項目説明 → 実装例」の流れで記載することで、読者が設定意図をすぐに把握できます。

3.1 基本構成(SQLite 使用時)

SQLite はシンプルかつ小規模なワークフローに適しています。以下は バージョン固定汎用ボリューム名 を採用した最小構成です。

設定ポイント解説(H3)

  • DATABASE_TYPE=sqlite は公式ドキュメントでも推奨されるデフォルトです。PostgreSQL を利用する場合は別サービスを追加し、DATABASE_TYPE=postgresdb に変更します。
  • ボリューム名 n8n_data はプロジェクト固有ではなく汎用的に命名しているため、他のプロジェクトでも同様のスクリプトが流用可能です。

3.2 PostgreSQL を利用した構成(オプション)

大規模運用や外部ツール連携が必要な場合は、PostgreSQL コンテナ を追加し、DATABASE_TYPE=postgresdb に切り替えます。以下はその全体像です。

設定ポイント解説(H3)

  • depends_on により、PostgreSQL が起動してから n8n が開始します。
  • 環境変数はすべて .env ファイルで管理し、機密情報は chmod 600 .env と Docker secrets に移行することを推奨します。

3.3 環境変数一覧(重要度別)

変数名 必須/任意 説明
N8N_BASIC_AUTH_ACTIVE 必須 Basic Auth を有効化 (true)
N8N_BASIC_AUTH_USER / N8N_BASIC_AUTH_PASSWORD 必須 管理者認証情報。パスワードは .env に保存
N8N_HOST 必須 公開ドメイン名(例: n8n.example.com
N8N_PORT 任意 コンテナ内部ポート(デフォルト 5678)
N8N_PROTOCOL 必須 https に固定し、リバースプロキシ側で TLS を終端
WEBHOOK_URL 必須 外部からフックが呼び出される URL
DATABASE_TYPE 必須 sqlitepostgresdb のいずれか
DB_POSTGRESDB_* 系列 PostgreSQL 使用時必須 接続情報(ホスト・ポート・ユーザー等)

4. HTTPS 化の実装パターン

HTTPS が未導入だと、認証情報やワークフロー定義が平文で送信されるリスクがあります。本節では ConoHa VPS 用自動取得スクリプト と、Docker Compose 内で完結する certbot コンテナ方式 の 2 パターンを比較します。

4.1 ConoHa VPS 向けスタートアップスクリプト(公式ガイド参照)

ConoHa が提供している「n8n Docker」セットアップの公式ページは
https://doc.conoha.jp/products/vps-v3/image-v3/image-usage/n8n-docker/(2024‑10‑時点)です。以下はその手順をベースにした cloud‑init スクリプト例です。

ポイント解説(H3)

  • cloud‑init に登録すれば、VPS 起動時に自動で Nginx と Certbot が構築されます。
  • 証明書は /etc/letsencrypt/live/n8n.example.com/ に配置され、Nginx が自動的に SSL 終端を行います。

4.2 Docker Compose 内で完結する certbot コンテナ方式

Docker‑Compose のみで 自動取得・自動更新 を実現したい場合は、jwilder/nginx-proxynginxproxy/acme-companion の組み合わせが便利です。

ポイント解説(H3)

  • VIRTUAL_HOSTLETSENCRYPT_* ラベルだけで、nginx‑proxy が自動的にリバースプロキシと SSL 証明書を生成します。
  • コンテナの再起動や証明書更新は acme-companion がバックグラウンドで処理するため、運用負荷が大幅に低減します。

4.3 IP アドレス+自己署名証明書(テスト向け)

社内限定の検証環境では、Let’s Encrypt の取得が不要な場合があります。その際は 自己署名証明書 を作成し、Nginx に組み込む手順を示します。

Docker 側の環境変数は次の通りです。

注意:自己署名証明書はブラウザで警告が表示されます。実運用では必ず Let’s Encrypt か社内 PKI の証明書に置き換えてください。


5. 初期設定・運用・保守ガイド

本章では 管理者認証の作成手順アップデートフローバックアップ戦略、そして セキュリティベストプラクティス を体系的にまとめます。

5.1 管理者ユーザーと Basic Auth の設定

n8n は起動時に N8N_BASIC_AUTH_* が設定されていると自動で Basic Auth を有効化します。以下は安全なパスワード生成から .env 管理までの流れです。

docker compose up -d 後、ブラウザから https://n8n.example.com/ にアクセスすると Basic Auth のポップアップが表示されます。認証後は ユーザー設定 → API キー で追加のトークン認証も構築できます。

5.2 アップデート手順(安全なロールアウト)

バージョン更新は イメージ取得 → コンテナ停止 → バックアップ → 再起動 の順に行います。ロールバック用のタグ保持も忘れずに実施してください。

ロールバック例

5.3 バックアップスクリプト(汎用版)

永続化ボリュームは Docker が管理するため、docker run --rm -v <volume>:/data ... tar で取得できます。プロジェクト固有の名前ではなく、環境変数 N8N_DATA_VOLUME を利用して汎用性を高めます。

復元手順

5.4 セキュリティベストプラクティス

項目 推奨設定
ファイアウォール ufw allow 80/tcpufw allow 443/tcpufw allow from 127.0.0.1 to any port 5678
最小権限ユーザー Docker デーモンは docker グループに所属した非 root ユーザーで実行
機密情報の保護 .envchmod 600、本番では Docker Secrets または外部シークレットマネージャ(AWS Secrets Manager 等)へ移行
イメージ署名 Docker Content Trust (DOCKER_CONTENT_TRUST=1) を有効化し、公式イメージの検証を実施
脆弱性スキャン 定期的に trivy image n8nio/n8n:${N8N_TAG} で CVE をチェック
ログローテーション /etc/logrotate.d/docker に標準設定があるが、/var/lib/docker/containers/*/*.log が肥大化しないようにサイズ制限を追加

まとめ:上記項目は「最小限の露出」と「運用可視性」の両立を目的としています。特にファイアウォールで内部ポート 5678 をローカル限定にすることが、外部からの不正アクセス防止に直結します。


6. 完全なプロジェクト構成例(最終形)

以下は 実務でそのまま使える ディレクトリ構造とファイル一覧です。コメントを多めに入れているので、カスタマイズの際の参考になります。

実行手順


参考リンク


以上です。 本ガイドは最新情報に合わせて随時更新してください。安全でスケーラブルな n8n 環境構築の一助となれば幸いです。

スポンサードリンク

DXの導入や効果にお悩みの担当者へ

スポンサードリンク
 状況別に選べる  

DXを前に進めたい、あなたの立場と目的は?

DXの推進には社内政治や人々のリテラシーなど組織の様々な壁が立ちはだかります。導入後も部署・全社のAIリテラシーを底上げしていき浸透させていく運用が重要です。目的に合った本を選びやり方を学ぶことでDXの成功と会社の成長をもたらすことができますよ。

▷ 硬直的な組織でDXを導入したいなら

【イノベーションOps 組織を動かすDX&AI導入プロセスのすべて】を購入する

机上の空論にならない実践的導入ができるようになります

▷ さらに様々な事例を学びAIリテラシーを底上げしたいなら

Kindle Unlimited をサブスクする

月額980円だけで読み放題。30日間無料なので、合わなければ解約してもOK

▶ その他では 【AIエージェント時代のDX ビジネスオーケストレーションの衝撃】を購入する / 生成AIカテゴリー が参考になります。


-n8n