Docker Composeでn8n環境を秒速構築!データベース連携も簡単解説

もう迷わない!n8n + PostgreSQL を Docker Compose で連携させる完全ガイド

この記事でわかること

  • n8n 環境を Docker Compose で構築する具体的な手順
  • n8nPostgreSQL データベースを連携させる設定方法
  • docker-compose.yml の書き方と主要な設定
  • .env ファイルを使った安全な認証情報管理の基本
  • 自前サーバーで n8n を安定運用させるための基礎知識

n8n を Docker で試したいけど、DB連携や docker-compose.yml が難しそう…?

大丈夫!この記事を読めば、Docker Compose で n8n + PostgreSQL 環境をサクッと構築できます。

1. なぜ Docker Compose で n8n を?

n8n は強力な自動化ツール。安定稼働には良い環境が必要です。Docker なら依存関係もクリーン。

さらに Docker Compose を使うと、n8n と連携DB (PostgreSQL 等) を1つの設定ファイル (docker-compose.yml) で管理できます。メリットはこちら:

  • 構築の再現性: ファイルがあれば誰でも同じ環境をすぐ作れます。
  • 設定管理の簡略化: 複数サービス設定を1ファイルで。
  • 連携の容易さ: コンテナ間ネットワークが簡単に。

さあ、Docker Compose で n8n + DB 環境構築の手順を見ていきましょう!

2. 準備するもの

始める前に、以下がインストール済みか確認してくださいね。

ターミナルで以下を実行して、バージョンが出れば準備OKです。

# Docker本体のバージョン確認
docker --version
# Docker Compose (v2) のバージョン確認
docker compose version

3. docker-compose.yml の作成と解説

まず、作業用ディレクトリを作って移動しましょう。

mkdir my-n8n-compose
cd my-n8n-compose

次に、このディレクトリに docker-compose.yml ファイルをテキストエディタで作成し、以下の内容を貼り付けます (n8n + PostgreSQL の例)。

# docker-compose.yml
version: '3.7'

services:
  n8n:
    image: n8nio/n8n:latest
    restart: always
    ports:
      - "5678:5678"
    environment:
      # DB接続情報 (.env から読み込み)
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=${POSTGRES_HOST}
      - DB_POSTGRESDB_PORT=${POSTGRES_PORT}
      - DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
      - DB_POSTGRESDB_USER=${POSTGRES_USER}
      - DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
      # n8n 基本設定
      - N8N_HOST=${SUBDOMAIN}.${DOMAIN_NAME}
      - N8N_PORT=5678
      - N8N_PROTOCOL=https # httpsアクセス時
      - NODE_ENV=production
      - GENERIC_TIMEZONE=${GENERIC_TIMEZONE} # 例: Asia/Tokyo
      - WEBHOOK_URL=https://${SUBDOMAIN}.${DOMAIN_NAME}/
    volumes:
      - n8n_data:/home/node/.n8n
    depends_on:
      - postgres
    networks:
      - n8n-network

  postgres:
    image: postgres:15
    restart: always
    environment:
      # DB初期設定 (.env から読み込み)
      - POSTGRES_DB=${POSTGRES_DB}
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - n8n-network

volumes:
  n8n_data:
  postgres_data:

networks:
  n8n-network:

各セクションのポイントです。

3.1. n8n サービスの定義

n8n コンテナの設定です。イメージ、ポート、環境変数などを指定します。

環境変数の詳細設定はこちら ▶

{/* summary自体は非表示にし、divをクリック可能にする想定 */}

  • DB_TYPE, DB_POSTGRESDB_*: n8nが使うDB種類と接続情報。${...}.env から安全に値取得。
  • N8N_HOST, N8N_PORT, N8N_PROTOCOL: n8n自身のURL設定。リバースプロキシ時に重要。
  • NODE_ENV=production: 本番モードで動作。
  • GENERIC_TIMEZONE: 時間処理のためのタイムゾーン指定 (例: Asia/Tokyo)。
  • WEBHOOK_URL: Webhookトリガー利用時の正しいURL生成に必要。

3.2. DBサービス(PostgreSQL)の定義

連携する PostgreSQL コンテナの設定。イメージ、初期DB情報 (環境変数経由) などを指定します。

3.3. ネットワークとボリューム

  • ボリューム (`volumes`): n8n_data, postgres_data を宣言。データ永続化のため。
  • ネットワーク (`networks`): n8n-network を宣言。同じネットワーク内のコンテナはサービス名で通信可能に。

3.4. 主要設定キーまとめ (表)

docker-compose.yml の主要キーをまとめました。

キー デフォルト 備考
version '3.7' Compose ファイル形式バージョン
services 各サービス定義の親要素
image n8nio/n8n:latest 使用するDockerイメージ
restart no always コンテナ停止時の再起動ポリシー
ports - "5678:5678" ホスト:コンテナのポート紐付け
environment - NODE_ENV=production コンテナ内環境変数設定
volumes (サービス内) - n8n_data:/home/node/.n8n データ永続化のボリューム紐付け
depends_on - postgres サービスの起動順序依存関係
networks (サービス内) default - n8n-network コンテナが接続するネットワーク
volumes (トップレベル) n8n_data: 名前付きボリューム宣言
networks (トップレベル) default作成 n8n-network: カスタムネットワーク宣言

4. 環境変数ファイル (.env) の準備

docker-compose.yml と同じ場所に .env ファイルを作り、YAML内の ${...} 変数の値を設定します。

# .env ファイル

# PostgreSQL データベース設定
POSTGRES_HOST=postgres
POSTGRES_PORT=5432
POSTGRES_DB=n8n_db
POSTGRES_USER=n8n_user
POSTGRES_PASSWORD=Your_Very_Strong_Password! # ★★★ 必ず強力なパスワードに! ★★★

# n8n アクセスURL設定 (リバースプロキシ経由時)
SUBDOMAIN=n8n
DOMAIN_NAME=yourdomain.com # あなたのドメイン

# タイムゾーン設定
GENERIC_TIMEZONE=Asia/Tokyo

# 必要ならSMTP設定など

セキュリティ・アドバイス

.env ファイルの取り扱いには注意しましょう。

  • 🔒 権限設定:chmod 600 .env で所有者のみ読み書き可能に。
  • 🔒 管理除外:.gitignore に必ず .env を追加。
  • 🔒 漏洩注意:データベース情報など機密情報が含まれます。
  • 🔒 高度対策:本番環境では Vault や Secrets Manager 等の利用検討を。

【重要ポイント】

  • POSTGRES_PASSWORD は必ず複雑なものにしてくださいね。
  • POSTGRES_HOST=postgres は Compose 内のサービス名と一致させます。
  • SUBDOMAIN, DOMAIN_NAME は実際のアクセスURLに合わせて設定します。
  • GENERIC_TIMEZONE を環境に合わせて設定しましょう。

5. コンテナの起動と動作確認

ファイルができたら、ターミナルで docker-compose.yml があるディレクトリに移動し、以下を実行してコンテナを起動させてみましょう!

# バックグラウンドで起動 (-d オプション)
docker compose up -d

初回はイメージ取得に時間がかかるかも。起動後、以下で状態を確認します。

# コンテナの状態確認
docker compose ps

`State` が `Up` や `running` ならOK!

もし問題があれば、ログを確認すると手がかりが見つかります。(Ctrl+Cで停止)

# n8nコンテナのログ確認 (-f で追跡)
docker compose logs -f n8n

# postgresコンテナのログ確認 (-f で追跡)
docker compose logs -f postgres

正常ならブラウザで http://localhost:5678 にアクセス!n8n の初期画面が出れば大成功です!ぜひ試してください。

6. n8n からDBへの接続設定 (例)

ワークフローから直接 PostgreSQL を操作する場合、n8n で接続情報 (Credentials) を設定します。「Credentials」>「Add credential」で「Postgres」を選び、以下のように入力しましょう。

設定項目 入力値 (例) 説明
Credential Name Docker Postgres 任意の名前
Host postgres Compose サービス名
Port 5432 DBポート
Database n8n_db .env の DB名
User n8n_user .env の ユーザー名
Password (設定したパスワード) .env の パスワード
SSL Disable 内部通信なら通常不要

保存後、Postgres ノード等でこの認証情報を選べば接続できますよ。

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

構築中に困ったときのヒントです。

7.1. 起動に失敗したら?

  • 確認・対処:
    • まず docker compose logs <サービス名> でエラー確認!
    • docker-compose.yml / .env の記述ミス(インデント、変数名等)をチェック。
    • ポート競合? ホスト側ポート使用済みなら ports 設定変更 or 競合プロセス停止。
    • ボリューム権限問題? docker compose down -v で完全削除後、再試行(データ消失注意!)。

7.2. アクセスできないときは?

  • 確認・対処:
    • docker compose ps でコンテナ `Up` 状態か確認。
    • ホストOSファイアウォールでポート許可されてるか確認。
    • リバースプロキシ設定を確認(設定している場合)。

7.3. DB接続でエラーが出たら?

  • 確認・対処:
    • .env のDB接続情報と docker-compose.yml の環境変数が完全一致か再確認(特にホスト名=サービス名!)。
    • postgres コンテナ正常起動かログ確認。
    • n8n Credentials 設定が正しいか確認。

8. まとめ:快適な n8n 環境を!

お疲れ様でした!この記事では、Docker Compose で n8n と PostgreSQL を連携させる環境構築手順を解説しました。

docker-compose.yml.env で設定をコード化すれば、再現性・保守性がグッと上がります。DB連携でデータ永続化や柔軟な操作も可能に。

この基本構成から、あなたのニーズに合わせて環境を拡張していきましょう。

ぜひ、Docker Compose で構築した n8n 環境で、自動化の世界を楽しんでください!

n8n 公式サイトで最新情報をチェック