【完全ガイド】ConoHa VPSでn8nをDocker+TraefikでHTTPS公開する方法
n8n(ノーコード自動化ツール)をConoHa VPS上で安全に運用するための、Docker+Traefik構成によるHTTPS化ガイドです。
HTTP公開だけではブラウザの制限によりアクセスできないため、Let's Encrypt証明書を使ったHTTPS対応まで解説します。
1. SSHでサーバに接続
まず、ローカル端末(Windowsのコマンドプロンプトなど)からサーバへSSH接続します。
ssh root@example.ip.address
2. Dockerのインストール
サーバにログインしたら、DockerとComposeをインストールします。
dnf -y update
dnf -y install docker
systemctl enable --now docker
Dockerが動作しているか確認します。
docker version
Docker Composeのインストール
curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose version
Docker Compose v2以降では、docker compose コマンドとして統合されています。
docker compose version
3. ファイアウォール設定(ポート開放)
n8nが使用するポート(例:5678)を開放します。
firewall-cmd --add-port=5678/tcp --permanent
firewall-cmd --reload
さらに、ConoHaの管理画面(セキュリティ設定/ACL)でも同ポートを許可しておきましょう。
4. n8n用ディレクトリとComposeファイルの作成
mkdir -p /opt/n8n/data
cd /opt/n8n
docker-compose.ymlを作成します。
version: "3.9"
services:
n8n:
image: n8nio/n8n:latest
environment:
N8N_ENCRYPTION_KEY: "your-long-random-string"
N8N_BASIC_AUTH_ACTIVE: "true"
N8N_BASIC_AUTH_USER: "admin"
N8N_BASIC_AUTH_PASSWORD: "change-this-password"
GENERIC_TIMEZONE: "Asia/Tokyo"
ports:
- "5678:5678"
volumes:
- "./data:/home/node/.n8n"
restart: unless-stopped
起動します。
docker compose pull
docker compose up -d
docker ps
これでHTTPではアクセス可能ですが、HTTPSが未設定のためブラウザではエラー表示になります。
5. DNS設定(ドメインとIPの紐付け)
DNSでサブドメインをVPSのIPアドレスに向けます。
例:n8n.example.com → 123.45.67.89
ConoHaのコントロールパネルで以下のように設定:
| 項目 | 値 |
|---|---|
| ホスト名 | n8n |
| 種別 | A |
| 値(IPアドレス) | example.ip.address |
| TTL | 3600(デフォルト設定可) |
反映確認:
dig +short n8n.example.com
→ 正しくIPが返れば成功です。
6. Traefikを使ったHTTPS構成
Traefikを利用してLet’s Encrypt証明書を自動取得・更新します。
ディレクトリ構成
mkdir -p /opt/n8n/{data,db,traefik}
cd /opt/n8n
.env ファイル
DOMAIN=n8n.example.com
N8N_HOST=${DOMAIN}
N8N_PORT=5678
N8N_PROTOCOL=https
N8N_EDITOR_BASE_URL=https://${DOMAIN}/
N8N_ENCRYPTION_KEY=your-random-key
N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=change-this-password
POSTGRES_USER=n8n
POSTGRES_PASSWORD=strong-db-password
POSTGRES_DB=n8n
traefik/traefik.yml
entryPoints:
web:
address: ":80"
websecure:
address: ":443"
providers:
docker:
exposedByDefault: false
certificatesResolvers:
letsencrypt:
acme:
email: "you@example.com"
storage: "/letsencrypt/acme.json"
httpChallenge:
entryPoint: web
docker-compose.yml
version: "3.9"
services:
traefik:
image: traefik:v3.1
command:
- --providers.docker=true
- --entrypoints.web.address=:80
- --entrypoints.websecure.address=:443
ports:
- "80:80"
- "443:443"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "./traefik:/letsencrypt"
restart: unless-stopped
postgres:
image: postgres:16-alpine
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
volumes:
- "./db:/var/lib/postgresql/data"
restart: unless-stopped
n8n:
image: n8nio/n8n:latest
environment:
N8N_HOST: ${N8N_HOST}
N8N_PORT: ${N8N_PORT}
N8N_PROTOCOL: ${N8N_PROTOCOL}
N8N_EDITOR_BASE_URL: ${N8N_EDITOR_BASE_URL}
N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY}
N8N_BASIC_AUTH_ACTIVE: ${N8N_BASIC_AUTH_ACTIVE}
N8N_BASIC_AUTH_USER: ${N8N_BASIC_AUTH_USER}
N8N_BASIC_AUTH_PASSWORD: ${N8N_BASIC_AUTH_PASSWORD}
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: postgres
DB_POSTGRESDB_PORT: 5432
DB_POSTGRESDB_DATABASE: ${POSTGRES_DB}
DB_POSTGRESDB_USER: ${POSTGRES_USER}
DB_POSTGRESDB_PASSWORD: ${POSTGRES_PASSWORD}
GENERIC_TIMEZONE: Asia/Tokyo
volumes:
- "./data:/home/node/.n8n"
labels:
- "traefik.enable=true"
- "traefik.http.routers.n8n.rule=Host(`${DOMAIN}`)"
- "traefik.http.routers.n8n.entrypoints=websecure"
- "traefik.http.routers.n8n.tls.certresolver=letsencrypt"
- "traefik.http.services.n8n.loadbalancer.server.port=5678"
depends_on:
- postgres
- traefik
restart: unless-stopped
7. サービス起動と確認
cd /opt/n8n
docker compose pull
docker compose up -d
アクセス確認:
- https://n8n.example.com
- Traefikログで証明書発行確認:
docker compose logs traefik | grep "certificate"
8. バックアップと更新
バックアップ(データベース・設定含む):
tar czf n8n-backup-$(date +%F).tar.gz data db traefik
アップデート:
docker compose pull && docker compose up -d
9. 運用コマンドまとめ
| 内容 | コマンド |
|---|---|
| サービス状態確認 | docker compose ps |
| n8nログ | docker compose logs -f n8n |
| Traefikログ | docker compose logs -f traefik |
| バックアップ | tar czf ~/n8n-backup-$(date +%F).tar.gz /opt/n8n/data |
10. トラブル時のチェック項目
-
dig +short n8n.example.comが正しいIPを返しているか - ファイアウォールとACLでポート80・443が開放されているか
- Traefikのログに「certificate successfully issued」が出ているか
まとめ
この手順により、ConoHa VPS上でn8nをHTTPS対応の安定運用環境として構築できます。
Traefikを使えば証明書の自動更新も行われ、長期的なメンテナンスも容易になります。
次は、n8nにWebhookフローを作って、自作WebアプリやSlackなどと連携してみましょう。
Discussion