プロジェクト

全般

プロフィール

HestiaCP + n8n WebSocket HTTPS構築手順(完全版) » 履歴 » バージョン 1

KAN YOSHIDA, 2025/06/10 19:21

1 1 KAN YOSHIDA
# HestiaCP + n8n WebSocket HTTPS構築手順(完全版)
2
3
## 🎯 概要
4
5
**成功事例**: HestiaCP環境でn8nのWebSocket機能を含む完全なHTTPS対応を実現した手順書です。
6
7
### 環境情報
8
- **OS**: Ubuntu(HestiaCPインストール済み)
9
- **Webサーバー**: Nginx(フロントエンド) + Apache(バックエンド)
10
- **n8n**: Docker Compose構成
11
- **SSL証明書**: Let's Encrypt
12
- **併存サービス**: Dify(競合なし)
13
14
### 最終構成
15
```
16
Internet → Nginx (Port 443) → n8n Docker (Port 5678)
17
         → Nginx (Port 443) → Dify Docker (Port 3000)
18
```
19
20
## 📋 前提条件
21
22
### 必要な環境
23
- HestiaCPがインストール済み
24
- Docker & Docker Composeが利用可能
25
- ドメイン(例:`n8n.artjunkie.co.jp`)
26
- DNS設定済み
27
28
### ディレクトリ構造
29
```
30
/opt/docker-apps/
31
├── n8n/
32
│   ├── docker-compose.yml
33
│   └── .env
34
└── dify/
35
    ├── docker-compose.yml
36
    └── .env
37
```
38
39
## 🚀 Step 1: n8n Docker環境構築
40
41
### 1.1 ディレクトリ作成
42
```bash
43
sudo mkdir -p /opt/docker-apps/n8n
44
cd /opt/docker-apps/n8n
45
```
46
47
### 1.2 docker-compose.yml作成
48
```yaml
49
version: '3.8'
50
51
services:
52
  postgres:
53
    image: postgres:15-alpine
54
    container_name: n8n-postgres
55
    restart: unless-stopped
56
    environment:
57
      - POSTGRES_USER=n8n
58
      - POSTGRES_PASSWORD=n8n_password
59
      - POSTGRES_DB=n8n
60
    volumes:
61
      - postgres_data:/var/lib/postgresql/data
62
    ports:
63
      - "127.0.0.1:5433:5432"
64
    healthcheck:
65
      test: ["CMD-SHELL", "pg_isready -U n8n"]
66
      interval: 10s
67
      timeout: 5s
68
      retries: 5
69
70
  n8n:
71
    image: n8nio/n8n:latest
72
    container_name: n8n-app
73
    restart: unless-stopped
74
    environment:
75
      - DB_TYPE=postgresdb
76
      - DB_POSTGRESDB_HOST=postgres
77
      - DB_POSTGRESDB_PORT=5432
78
      - DB_POSTGRESDB_DATABASE=n8n
79
      - DB_POSTGRESDB_USER=n8n
80
      - DB_POSTGRESDB_PASSWORD=n8n_password
81
      - N8N_PROTOCOL=https
82
      - N8N_HOST=n8n.artjunkie.co.jp
83
      - WEBHOOK_URL=https://n8n.artjunkie.co.jp/
84
      - NODE_ENV=production
85
      - N8N_TRUST_PROXY=true
86
    ports:
87
      - "127.0.0.1:5678:5678"
88
    volumes:
89
      - n8n_data:/home/node/.n8n
90
    depends_on:
91
      postgres:
92
        condition: service_healthy
93
94
volumes:
95
  postgres_data:
96
  n8n_data:
97
```
98
99
### 1.3 n8n起動
100
```bash
101
sudo docker-compose up -d
102
sudo docker-compose ps
103
sudo docker-compose logs n8n
104
```
105
106
## 🔧 Step 2: HestiaCPドメイン設定
107
108
### 2.1 ドメイン追加
109
HestiaCPで新しいドメイン `n8n.artjunkie.co.jp` を追加
110
111
### 2.2 SSL証明書生成
112
```bash
113
# HestiaCPでLet's Encrypt SSL証明書を生成
114
# または手動で:
115
sudo certbot certonly --webroot -w /home/webdev/web/n8n.artjunkie.co.jp/public_html -d n8n.artjunkie.co.jp
116
```
117
118
## ⚙️ Step 3: Nginx WebSocket設定
119
120
### 3.1 現在の設定確認
121
```bash
122
# 既存設定バックアップ
123
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
124
125
# 設定確認
126
ls -la /home/webdev/conf/web/n8n.artjunkie.co.jp/
127
```
128
129
### 3.2 WebSocket対応Nginx設定
130
```bash
131
sudo nano /home/webdev/conf/web/n8n.artjunkie.co.jp/nginx.ssl.conf
132
```
133
134
**設定内容**:
135
```nginx
136
#=========================================================================#
137
# n8n WebSocket SSL Configuration                                         #
138
#=========================================================================#
139
server {
140
    listen      133.18.43.195:443 ssl;
141
    http2 on;
142
    server_name n8n.artjunkie.co.jp;
143
    
144
    # SSL設定
145
    ssl_certificate      /home/webdev/conf/web/n8n.artjunkie.co.jp/ssl/n8n.artjunkie.co.jp.pem;
146
    ssl_certificate_key  /home/webdev/conf/web/n8n.artjunkie.co.jp/ssl/n8n.artjunkie.co.jp.key;
147
    
148
    # セキュリティヘッダー
149
    add_header Strict-Transport-Security "max-age=31536000";
150
    add_header X-Frame-Options SAMEORIGIN;
151
    add_header X-Content-Type-Options nosniff;
152
    
153
    # ログ設定
154
    error_log   /var/log/nginx/domains/n8n.artjunkie.co.jp.error.log error;
155
    access_log  /var/log/nginx/domains/n8n.artjunkie.co.jp.log combined;
156
157
    # WebSocket Push endpoint (最重要!)
158
    location /rest/push {
159
        proxy_pass http://127.0.0.1:5678;
160
        proxy_http_version 1.1;
161
        proxy_set_header Upgrade $http_upgrade;
162
        proxy_set_header Connection "upgrade";
163
        proxy_set_header Host $http_host;
164
        proxy_set_header X-Real-IP $remote_addr;
165
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
166
        proxy_set_header X-Forwarded-Proto $scheme;
167
        proxy_set_header X-Nginx-Proxy true;
168
        proxy_redirect off;
169
        proxy_read_timeout 86400;
170
        proxy_connect_timeout 300;
171
        proxy_send_timeout 300;
172
        
173
        # WebSocket特別設定
174
        proxy_buffering off;
175
        proxy_cache off;
176
    }
177
178
    # Socket.io WebSocket
179
    location /socket.io/ {
180
        proxy_pass http://127.0.0.1:5678;
181
        proxy_http_version 1.1;
182
        proxy_set_header Upgrade $http_upgrade;
183
        proxy_set_header Connection "upgrade";
184
        proxy_set_header Host $http_host;
185
        proxy_set_header X-Real-IP $remote_addr;
186
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
187
        proxy_set_header X-Forwarded-Proto $scheme;
188
        proxy_read_timeout 86400;
189
        proxy_buffering off;
190
    }
191
192
    # 通常のHTTP API
193
    location / {
194
        proxy_pass http://127.0.0.1:5678;
195
        proxy_set_header Host $http_host;
196
        proxy_set_header X-Real-IP $remote_addr;
197
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
198
        proxy_set_header X-Forwarded-Proto $scheme;
199
        proxy_read_timeout 300;
200
        proxy_connect_timeout 300;
201
        proxy_redirect off;
202
    }
203
    
204
    # エラーページ
205
    location /error/ {
206
        alias /home/webdev/web/n8n.artjunkie.co.jp/document_errors/;
207
    }
208
}
209
```
210
211
### 3.3 設定反映
212
```bash
213
# 設定テスト
214
sudo nginx -t
215
216
# 再読み込み
217
sudo nginx -s reload
218
```
219
220
## 🔍 Step 4: 動作確認
221
222
### 4.1 基本接続確認
223
```bash
224
# n8n内部接続
225
curl -I http://127.0.0.1:5678/
226
227
# HTTPS接続
228
curl -I https://n8n.artjunkie.co.jp/
229
230
# Docker状況
231
sudo docker-compose ps
232
```
233
234
### 4.2 WebSocket接続テスト
235
```bash
236
# WebSocket Upgrade テスト
237
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
238
```
239
240
**期待結果**: `HTTP/2 401 {"status":"error","message":"Unauthorized"}` 
241
→ WebSocketは正常に機能(認証が必要なため401)
242
243
## 🎯 Step 5: 最終確認と最適化
244
245
### 5.1 ログディレクトリ作成
246
```bash
247
sudo mkdir -p /var/log/nginx/domains
248
sudo touch /var/log/nginx/domains/n8n.artjunkie.co.jp.access.log
249
sudo chown nginx:nginx /var/log/nginx/domains/n8n.artjunkie.co.jp.access.log
250
```
251
252
### 5.2 Apache設定無効化(オプション)
253
**重要**: 2重プロキシを避けるため、Apache経由ではなくNginx直接プロキシを使用
254
255
```bash
256
# Apache設定確認(使用しない)
257
ls -la /etc/apache2/conf.d/domains/n8n.artjunkie.co.jp*
258
```
259
260
## ✅ 成功確認
261
262
### ブラウザテスト
263
1. **URL**: `https://n8n.artjunkie.co.jp/`
264
2. **期待結果**: n8nログイン画面表示
265
3. **WebSocket**: リアルタイム機能が正常動作
266
267
### 管理コマンド
268
```bash
269
# サービス状況確認
270
sudo docker-compose ps
271
272
# ログ確認
273
sudo docker-compose logs -f n8n
274
275
# 接続確認
276
sudo ss -tlnp | grep 5678
277
curl -I https://n8n.artjunkie.co.jp/
278
```
279
280
## 🔧 トラブルシューティング
281
282
### よくある問題と解決策
283
284
#### 1. 503 Service Unavailable
285
**原因**: n8nコンテナが停止中
286
```bash
287
cd /opt/docker-apps/n8n
288
sudo docker-compose restart
289
```
290
291
#### 2. WebSocket接続エラー
292
**原因**: 2重プロキシ設定
293
**解決**: Nginx直接プロキシ設定に変更(上記設定を使用)
294
295
#### 3. X-Forwarded-For警告
296
**原因**: プロキシ設定不備
297
**解決**: docker-compose.ymlに `N8N_TRUST_PROXY=true` 追加
298
299
#### 4. SSL証明書エラー
300
**確認**:
301
```bash
302
ls -la /home/webdev/conf/web/n8n.artjunkie.co.jp/ssl/
303
sudo nginx -t
304
```
305
306
## 📊 最終構成情報
307
308
### ポート使用状況
309
- **443**: Nginx SSL(n8n、Dify、その他ドメイン)
310
- **5678**: n8n Docker(内部のみ)
311
- **5433**: PostgreSQL(内部のみ)
312
313
### 重要なファイル
314
- `/opt/docker-apps/n8n/docker-compose.yml`
315
- `/home/webdev/conf/web/n8n.artjunkie.co.jp/nginx.ssl.conf`
316
- `/var/log/nginx/domains/n8n.artjunkie.co.jp.error.log`
317
318
### 環境変数
319
```env
320
N8N_PROTOCOL=https
321
N8N_HOST=n8n.artjunkie.co.jp
322
WEBHOOK_URL=https://n8n.artjunkie.co.jp/
323
N8N_TRUST_PROXY=true
324
```
325
326
## 🎉 完了
327
328
**成功事例**: HestiaCPでn8nのWebSocket機能を含む完全なHTTPS構成が完了しました!
329
330
- ✅ **HTTPS**: Let's Encrypt SSL証明書
331
- ✅ **WebSocket**: リアルタイム通信対応  
332
- ✅ **Docker**: コンテナ化による管理
333
- ✅ **併存**: Difyとの競合なし
334
- ✅ **パフォーマンス**: Nginx直接プロキシによる最適化
335
336
**アクセス**: https://n8n.artjunkie.co.jp/