
もう迷わない!n8n + PostgreSQL を Docker Compose で連携させる完全ガイド
この記事でわかること
n8n
環境をDocker Compose
で構築する具体的な手順n8n
とPostgreSQL
データベースを連携させる設定方法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. 準備するもの
始める前に、以下がインストール済みか確認してくださいね。
- Docker: コンテナ実行環境。なければ Docker公式サイト (外部サイト) へGO!
- Docker Compose: 複数コンテナ管理ツール (Docker Desktop に同梱)。詳細は Docker Compose 公式ドキュメント (外部サイト) をチェック。
ターミナルで以下を実行して、バージョンが出れば準備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 環境で、自動化の世界を楽しんでください!