n8n は、アプリ、API、AI モデルをビジュアルエディターでつなぐワークフローツールです。セルフホストすれば、ワークフロー、認証情報、データが自分の管理するサーバーに残り、実行回数に応じた課金もありません。このガイドでは、Docker Compose、Postgres データベース、HTTPS を使って n8n をデプロイし、AI エージェントを 24 時間稼働できる状態にします。
エージェントに VPS を使う理由
エージェントはスケジュールで動いたり、Webhook に反応したりすることが多いため、常時稼働して到達可能なサーバーが必要です。VPS なら、Webhook 用の固定アドレスと、ワークフローの応答性を保つ十分な RAM が得られます。2 vCPU、4 GB のプランは小規模な構成に適しています。サイズの目安は AI エージェントホスティングをご覧ください。ローカルモデルを使いたい場合は、GPU サーバーを追加してください。
始める前に
- Docker を備えた VPS。Docker のインストールをご覧ください。
- サーバーを指すドメイン。DNS レコードをご覧ください。
ステップ 1:Compose ファイル
mkdir -p ~/n8n && cd ~/n8n
cat > compose.yaml <<'YAML'
services:
db:
image: postgres:16
restart: unless-stopped
environment:
POSTGRES_USER: n8n
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: n8n
volumes:
- db:/var/lib/postgresql/data
n8n:
image: n8nio/n8n:latest
restart: unless-stopped
depends_on: [db]
environment:
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: db
DB_POSTGRESDB_USER: n8n
DB_POSTGRESDB_PASSWORD: ${DB_PASSWORD}
N8N_HOST: n8n.example.com
N8N_PROTOCOL: https
WEBHOOK_URL: https://n8n.example.com/
N8N_ENCRYPTION_KEY: ${ENCRYPTION_KEY}
GENERIC_TIMEZONE: UTC
ports:
- "127.0.0.1:5678:5678"
volumes:
- n8n:/home/node/.n8n
volumes:
db:
n8n:
YAML
ステップ 2:シークレット
cat > .env <<ENV
DB_PASSWORD=$(openssl rand -hex 24)
ENCRYPTION_KEY=$(openssl rand -hex 32)
ENV
chmod 600 .env
ENCRYPTION_KEY をバックアップしてください。これがないと、n8n は保存した認証情報を復号できません。
ステップ 3:n8n を起動する
docker compose up -d
docker compose logs -f n8n
ステップ 4:HTTPS
n8n.example.com {
reverse_proxy 127.0.0.1:5678
}
Caddy をリロードし、サイトを開いて、オーナーアカウントを作成します。
ステップ 5:エージェントのワークフローを構築する
- Webhook または Schedule トリガーを追加します。
- AI Agent ノードを追加し、チャットモデル(たとえばホスト型 API や、自分の GPU サーバー上の Ollama)を接続します。
- HTTP リクエスト、データベース、メッセージングノードなどのツールをエージェントに与えます。
- 手動実行でテストしてから、ワークフローを有効化します。
安全に保つ
- n8n を 127.0.0.1 にバインドし、HTTPS プロキシだけを公開します。
- 可能な限り、シークレットヘッダーまたはパスで Webhook を保護します。
- Postgres ボリュームと n8n ボリュームをバックアップします。restic や borg によるバックアップをご覧ください。
- リリースノートを読んだうえで、
docker compose pull && docker compose up -dで更新します。