操作
HestiaCP + n8n WebSocket HTTPS構築手順(完全版)¶
🎯 概要¶
成功事例: HestiaCP環境でn8nのWebSocket機能を含む完全なHTTPS対応を実現した手順書です。
環境情報¶
- OS: Ubuntu(HestiaCPインストール済み)
- Webサーバー: Nginx(フロントエンド) + Apache(バックエンド)
- n8n: Docker Compose構成
- SSL証明書: Let's Encrypt
- 併存サービス: Dify(競合なし)
最終構成¶
Internet → Nginx (Port 443) → n8n Docker (Port 5678)
→ Nginx (Port 443) → Dify Docker (Port 3000)
📋 前提条件¶
必要な環境¶
- HestiaCPがインストール済み
- Docker & Docker Composeが利用可能
- ドメイン(例:
n8n.artjunkie.co.jp
) - DNS設定済み
ディレクトリ構造¶
/opt/docker-apps/
├── n8n/
│ ├── docker-compose.yml
│ └── .env
└── dify/
├── docker-compose.yml
└── .env
🚀 Step 1: n8n Docker環境構築¶
1.1 ディレクトリ作成¶
sudo mkdir -p /opt/docker-apps/n8n
cd /opt/docker-apps/n8n
1.2 docker-compose.yml作成¶
version: '3.8'
services:
postgres:
image: postgres:15-alpine
container_name: n8n-postgres
restart: unless-stopped
environment:
- POSTGRES_USER=n8n
- POSTGRES_PASSWORD=n8n_password
- POSTGRES_DB=n8n
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- "127.0.0.1:5433:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U n8n"]
interval: 10s
timeout: 5s
retries: 5
n8n:
image: n8nio/n8n:latest
container_name: n8n-app
restart: unless-stopped
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=n8n_password
- N8N_PROTOCOL=https
- N8N_HOST=n8n.artjunkie.co.jp
- WEBHOOK_URL=https://n8n.artjunkie.co.jp/
- NODE_ENV=production
- N8N_TRUST_PROXY=true
ports:
- "127.0.0.1:5678:5678"
volumes:
- n8n_data:/home/node/.n8n
depends_on:
postgres:
condition: service_healthy
volumes:
postgres_data:
n8n_data:
1.3 n8n起動¶
sudo docker-compose up -d
sudo docker-compose ps
sudo docker-compose logs n8n
🔧 Step 2: HestiaCPドメイン設定¶
2.1 ドメイン追加¶
HestiaCPで新しいドメイン n8n.artjunkie.co.jp
を追加
2.2 SSL証明書生成¶
# HestiaCPでLet's Encrypt SSL証明書を生成
# または手動で:
sudo certbot certonly --webroot -w /home/webdev/web/n8n.artjunkie.co.jp/public_html -d n8n.artjunkie.co.jp
⚙️ Step 3: Nginx WebSocket設定¶
3.1 現在の設定確認¶
# 既存設定バックアップ
sudo cp /home/webdev/conf/web/n8n.artjunkie.co.jp/nginx.ssl.conf /home/webdev/conf/web/n8n.artjunkie.co.jp/nginx.ssl.conf.backup
# 設定確認
ls -la /home/webdev/conf/web/n8n.artjunkie.co.jp/
3.2 WebSocket対応Nginx設定¶
sudo nano /home/webdev/conf/web/n8n.artjunkie.co.jp/nginx.ssl.conf
設定内容:
#=========================================================================#
# n8n WebSocket SSL Configuration #
#=========================================================================#
server {
listen 133.18.43.195:443 ssl;
http2 on;
server_name n8n.artjunkie.co.jp;
# SSL設定
ssl_certificate /home/webdev/conf/web/n8n.artjunkie.co.jp/ssl/n8n.artjunkie.co.jp.pem;
ssl_certificate_key /home/webdev/conf/web/n8n.artjunkie.co.jp/ssl/n8n.artjunkie.co.jp.key;
# セキュリティヘッダー
add_header Strict-Transport-Security "max-age=31536000";
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
# ログ設定
error_log /var/log/nginx/domains/n8n.artjunkie.co.jp.error.log error;
access_log /var/log/nginx/domains/n8n.artjunkie.co.jp.log combined;
# WebSocket Push endpoint (最重要!)
location /rest/push {
proxy_pass http://127.0.0.1:5678;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Nginx-Proxy true;
proxy_redirect off;
proxy_read_timeout 86400;
proxy_connect_timeout 300;
proxy_send_timeout 300;
# WebSocket特別設定
proxy_buffering off;
proxy_cache off;
}
# Socket.io WebSocket
location /socket.io/ {
proxy_pass http://127.0.0.1:5678;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 86400;
proxy_buffering off;
}
# 通常のHTTP API
location / {
proxy_pass http://127.0.0.1:5678;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_redirect off;
}
# エラーページ
location /error/ {
alias /home/webdev/web/n8n.artjunkie.co.jp/document_errors/;
}
}
3.3 設定反映¶
# 設定テスト
sudo nginx -t
# 再読み込み
sudo nginx -s reload
🔍 Step 4: 動作確認¶
4.1 基本接続確認¶
# n8n内部接続
curl -I http://127.0.0.1:5678/
# HTTPS接続
curl -I https://n8n.artjunkie.co.jp/
# Docker状況
sudo docker-compose ps
4.2 WebSocket接続テスト¶
# WebSocket Upgrade テスト
curl -v -H "Upgrade: websocket" -H "Connection: upgrade" -H "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==" -H "Sec-WebSocket-Version: 13" https://n8n.artjunkie.co.jp/rest/push
期待結果: HTTP/2 401 {"status":"error","message":"Unauthorized"}
→ WebSocketは正常に機能(認証が必要なため401)
🎯 Step 5: 最終確認と最適化¶
5.1 ログディレクトリ作成¶
sudo mkdir -p /var/log/nginx/domains
sudo touch /var/log/nginx/domains/n8n.artjunkie.co.jp.access.log
sudo chown nginx:nginx /var/log/nginx/domains/n8n.artjunkie.co.jp.access.log
5.2 Apache設定無効化(オプション)¶
重要: 2重プロキシを避けるため、Apache経由ではなくNginx直接プロキシを使用
# Apache設定確認(使用しない)
ls -la /etc/apache2/conf.d/domains/n8n.artjunkie.co.jp*
✅ 成功確認¶
ブラウザテスト¶
-
URL:
https://n8n.artjunkie.co.jp/
- 期待結果: n8nログイン画面表示
- WebSocket: リアルタイム機能が正常動作
管理コマンド¶
# サービス状況確認
sudo docker-compose ps
# ログ確認
sudo docker-compose logs -f n8n
# 接続確認
sudo ss -tlnp | grep 5678
curl -I https://n8n.artjunkie.co.jp/
🔧 トラブルシューティング¶
よくある問題と解決策¶
1. 503 Service Unavailable¶
原因: n8nコンテナが停止中
cd /opt/docker-apps/n8n
sudo docker-compose restart
2. WebSocket接続エラー¶
原因: 2重プロキシ設定
解決: Nginx直接プロキシ設定に変更(上記設定を使用)
3. X-Forwarded-For警告¶
原因: プロキシ設定不備
解決: docker-compose.ymlに N8N_TRUST_PROXY=true
追加
4. SSL証明書エラー¶
確認:
ls -la /home/webdev/conf/web/n8n.artjunkie.co.jp/ssl/
sudo nginx -t
📊 最終構成情報¶
ポート使用状況¶
- 443: Nginx SSL(n8n、Dify、その他ドメイン)
- 5678: n8n Docker(内部のみ)
- 5433: PostgreSQL(内部のみ)
重要なファイル¶
/opt/docker-apps/n8n/docker-compose.yml
/home/webdev/conf/web/n8n.artjunkie.co.jp/nginx.ssl.conf
/var/log/nginx/domains/n8n.artjunkie.co.jp.error.log
環境変数¶
N8N_PROTOCOL=https
N8N_HOST=n8n.artjunkie.co.jp
WEBHOOK_URL=https://n8n.artjunkie.co.jp/
N8N_TRUST_PROXY=true
🎉 完了¶
成功事例: HestiaCPでn8nのWebSocket機能を含む完全なHTTPS構成が完了しました!
- ✅ HTTPS: Let's Encrypt SSL証明書
- ✅ WebSocket: リアルタイム通信対応
- ✅ Docker: コンテナ化による管理
- ✅ 併存: Difyとの競合なし
- ✅ パフォーマンス: Nginx直接プロキシによる最適化
KAN YOSHIDA さんが13日前に更新 · 1件の履歴