HestiaCP + Dify HTTPS構築手順(完全版) » 履歴 » バージョン 1
KAN YOSHIDA, 2025/06/10 19:15
1 | 1 | KAN YOSHIDA | # HestiaCP + Dify HTTPS構築手順(完全版) |
---|---|---|---|
2 | **Ubuntu 24.04 / IP: 133.18.43.195** |
||
3 | **実証済み:2025年6月5日 HTTPS完全動作確認済み** |
||
4 | |||
5 | ## 前提条件 |
||
6 | - **ホスト名**: websrv.artjunkie.co.jp |
||
7 | - **ドメイン**: aj.gd, d.aj.gd, artjunkie.net |
||
8 | - **サービス**: HestiaCP + Apache + HTTPS対応Dify |
||
9 | - **技術スタック**: PHP 8.3 / Python 3.12 / Docker |
||
10 | - **機能**: DNS・FTP・メール機能完備 |
||
11 | |||
12 | ## 1. OS 基本設定 |
||
13 | |||
14 | ```bash |
||
15 | # システム更新 |
||
16 | sudo apt update && sudo apt upgrade -y |
||
17 | |||
18 | # タイムゾーン設定 |
||
19 | sudo timedatectl set-timezone Asia/Tokyo |
||
20 | |||
21 | # 必要に応じて再起動 |
||
22 | sudo reboot |
||
23 | ``` |
||
24 | |||
25 | ## 2. セキュリティ基盤の構築 |
||
26 | |||
27 | ### Fail2Ban のインストール |
||
28 | ```bash |
||
29 | sudo apt install -y fail2ban |
||
30 | |||
31 | # 設定ファイル作成 |
||
32 | sudo tee /etc/fail2ban/jail.local > /dev/null <<EOF |
||
33 | [DEFAULT] |
||
34 | bantime = 3600 |
||
35 | findtime = 600 |
||
36 | maxretry = 3 |
||
37 | |||
38 | [sshd] |
||
39 | enabled = true |
||
40 | port = ssh |
||
41 | filter = sshd |
||
42 | logpath = /var/log/auth.log |
||
43 | |||
44 | [hestia-iptables] |
||
45 | enabled = true |
||
46 | port = 8083 |
||
47 | filter = hestia |
||
48 | logpath = /usr/local/hestia/log/auth.log |
||
49 | EOF |
||
50 | |||
51 | sudo systemctl enable --now fail2ban |
||
52 | ``` |
||
53 | |||
54 | ### ファイアウォール(UFW)の事前設定 |
||
55 | ```bash |
||
56 | sudo ufw --force reset |
||
57 | sudo ufw default deny incoming |
||
58 | sudo ufw default allow outgoing |
||
59 | |||
60 | # 基本ポート |
||
61 | sudo ufw allow 22/tcp comment "SSH" |
||
62 | sudo ufw allow 80/tcp comment "HTTP" |
||
63 | sudo ufw allow 443/tcp comment "HTTPS" |
||
64 | |||
65 | # メールサーバー用ポート |
||
66 | sudo ufw allow 25/tcp comment "SMTP" |
||
67 | sudo ufw allow 465/tcp comment "SMTPS" |
||
68 | sudo ufw allow 587/tcp comment "Submission" |
||
69 | sudo ufw allow 993/tcp comment "IMAPS" |
||
70 | sudo ufw allow 995/tcp comment "POP3S" |
||
71 | |||
72 | # DNS |
||
73 | sudo ufw allow 53/tcp comment "DNS TCP" |
||
74 | sudo ufw allow 53/udp comment "DNS UDP" |
||
75 | |||
76 | # FTP(パッシブモード範囲) |
||
77 | sudo ufw allow 21/tcp comment "FTP Control" |
||
78 | sudo ufw allow 49152:65534/tcp comment "FTP Passive" |
||
79 | |||
80 | # HestiaCP管理画面 |
||
81 | sudo ufw allow 8083/tcp comment "HestiaCP Panel" |
||
82 | |||
83 | # まだ有効化しない(HestiaCP インストール後に実行) |
||
84 | ``` |
||
85 | |||
86 | ## 3. HestiaCP インストール |
||
87 | |||
88 | ```bash |
||
89 | # インストールスクリプトダウンロード |
||
90 | wget https://raw.githubusercontent.com/hestiacp/hestiacp/release/install/hst-install.sh |
||
91 | chmod +x hst-install.sh |
||
92 | |||
93 | # メール機能込みでインストール |
||
94 | sudo bash hst-install.sh \ |
||
95 | -s websrv.artjunkie.co.jp \ |
||
96 | -e webmaster@artjunkie.co.jp \ |
||
97 | -p 'redMine,616' \ |
||
98 | -r 8083 \ |
||
99 | -o yes \ |
||
100 | -a yes \ |
||
101 | -w yes \ |
||
102 | -k yes \ |
||
103 | -x yes \ |
||
104 | -z yes \ |
||
105 | -Z yes \ |
||
106 | -c yes \ |
||
107 | -t yes \ |
||
108 | -i yes \ |
||
109 | -b yes \ |
||
110 | -d yes \ |
||
111 | -W yes \ |
||
112 | -m yes \ |
||
113 | -g no \ |
||
114 | -v yes \ |
||
115 | -f |
||
116 | ``` |
||
117 | |||
118 | **重要**: インストール完了後の認証情報を必ず保存してください。 |
||
119 | |||
120 | ## 4. ファイアウォール有効化 |
||
121 | |||
122 | ```bash |
||
123 | # UFW有効化 |
||
124 | sudo ufw --force enable |
||
125 | sudo ufw status verbose |
||
126 | ``` |
||
127 | |||
128 | ## 5. HestiaCP 基本設定 |
||
129 | |||
130 | ### webdevユーザー作成 |
||
131 | ```bash |
||
132 | # HestiaCPでwebdevユーザー作成 |
||
133 | sudo /usr/local/hestia/bin/v-add-user webdev redMine,616 webmaster@artjunkie.co.jp default |
||
134 | |||
135 | # webdevユーザーの環境設定 |
||
136 | sudo usermod -s /bin/bash webdev |
||
137 | sudo mkdir -p /home/webdev |
||
138 | sudo chown webdev:webdev /home/webdev |
||
139 | sudo usermod -aG sudo webdev |
||
140 | |||
141 | # SSH鍵設定(必要に応じて) |
||
142 | sudo mkdir -p /home/webdev/.ssh |
||
143 | sudo cp /home/webmaster/.ssh/authorized_keys /home/webdev/.ssh/ 2>/dev/null || true |
||
144 | sudo chown -R webdev:webdev /home/webdev/.ssh |
||
145 | sudo chmod 700 /home/webdev/.ssh |
||
146 | sudo chmod 600 /home/webdev/.ssh/authorized_keys 2>/dev/null || true |
||
147 | ``` |
||
148 | |||
149 | ## 6. Docker環境構築 |
||
150 | |||
151 | ```bash |
||
152 | # Docker公式インストール |
||
153 | sudo apt update |
||
154 | sudo apt install -y ca-certificates curl gnupg lsb-release |
||
155 | |||
156 | # Docker公式GPGキーを追加 |
||
157 | sudo mkdir -m 0755 -p /etc/apt/keyrings |
||
158 | curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg |
||
159 | |||
160 | # Dockerリポジトリを追加 |
||
161 | echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null |
||
162 | |||
163 | # Docker CE をインストール |
||
164 | sudo apt update |
||
165 | sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin |
||
166 | |||
167 | # サービス開始・自動起動設定 |
||
168 | sudo systemctl enable --now docker |
||
169 | |||
170 | # webdev ユーザーをdockerグループに追加 |
||
171 | sudo usermod -aG docker webdev |
||
172 | |||
173 | # Difyアプリ用ディレクトリ作成 |
||
174 | sudo mkdir -p /opt/docker-apps/dify |
||
175 | sudo chown webdev:webdev /opt/docker-apps/dify |
||
176 | ``` |
||
177 | |||
178 | ## 7. Dify HTTPS環境構築(実証済み手順) |
||
179 | |||
180 | ### 7-1. HestiaCPでd.aj.gdドメイン作成 |
||
181 | 1. HestiaCPにログイン: `https://websrv.artjunkie.co.jp:8083` |
||
182 | 2. **WEB** → **Add Domain** |
||
183 | 3. ドメイン名: `d.aj.gd` |
||
184 | 4. ユーザー: `webdev` |
||
185 | 5. **SSL Support**: 有効化 |
||
186 | 6. **Let's Encrypt**: 有効化 |
||
187 | |||
188 | ### 7-2. Dify Docker環境構築 |
||
189 | ```bash |
||
190 | # webdevユーザーでDify環境構築 |
||
191 | sudo su - webdev |
||
192 | cd /opt/docker-apps/dify |
||
193 | |||
194 | # 公式リポジトリクローン |
||
195 | git clone https://github.com/langgenius/dify.git |
||
196 | cd dify/docker |
||
197 | |||
198 | # 環境変数設定(HTTPS対応) |
||
199 | cp .env.example .env |
||
200 | nano .env |
||
201 | ``` |
||
202 | |||
203 | **重要な環境変数設定**: |
||
204 | ```env |
||
205 | # HTTPS用設定(ポート番号なし) |
||
206 | CONSOLE_API_URL=https://d.aj.gd |
||
207 | CONSOLE_WEB_URL=https://d.aj.gd |
||
208 | SERVICE_API_URL=https://d.aj.gd |
||
209 | APP_API_URL=https://d.aj.gd |
||
210 | APP_WEB_URL=https://d.aj.gd |
||
211 | FILES_URL=https://d.aj.gd |
||
212 | |||
213 | # データベース設定 |
||
214 | POSTGRES_HOST=localhost |
||
215 | POSTGRES_PORT=5432 |
||
216 | POSTGRES_DB=dify |
||
217 | POSTGRES_USER=dify |
||
218 | POSTGRES_PASSWORD=difyai123456 |
||
219 | |||
220 | # Redis設定 |
||
221 | REDIS_HOST=localhost |
||
222 | REDIS_PORT=6379 |
||
223 | REDIS_PASSWORD=difyai123456 |
||
224 | |||
225 | # その他必要な設定 |
||
226 | SECRET_KEY=sk-9f73s3ljTXVcMT3Blb3ljTqtsKiGHXVcMT3BlbkFJLK7U |
||
227 | WEB_API_CORS_ALLOW_ORIGINS=https://d.aj.gd |
||
228 | CONSOLE_CORS_ALLOW_ORIGINS=https://d.aj.gd |
||
229 | ``` |
||
230 | |||
231 | ### 7-3. Dify起動 |
||
232 | ```bash |
||
233 | # Dockerコンテナ起動 |
||
234 | sudo docker-compose up -d |
||
235 | |||
236 | # 起動確認 |
||
237 | sudo docker-compose ps |
||
238 | ``` |
||
239 | |||
240 | **期待される結果**: |
||
241 | ``` |
||
242 | NAME IMAGE STATUS |
||
243 | docker-api-1 langgenius/dify-api:1.4.1 Up |
||
244 | docker-db-1 postgres:15-alpine Up (healthy) |
||
245 | docker-nginx-1 nginx:latest Up (0.0.0.0:8000->80/tcp) |
||
246 | docker-web-1 langgenius/dify-web:1.4.1 Up |
||
247 | docker-worker-1 langgenius/dify-api:1.4.1 Up |
||
248 | ... |
||
249 | ``` |
||
250 | |||
251 | ## 8. Apache HTTPSリバースプロキシ設定(成功実証済み) |
||
252 | |||
253 | ### 8-1. 必要なApacheモジュール有効化 |
||
254 | ```bash |
||
255 | # 必要なモジュール確認・有効化 |
||
256 | sudo a2enmod proxy |
||
257 | sudo a2enmod proxy_http |
||
258 | sudo a2enmod proxy_wstunnel |
||
259 | sudo a2enmod headers |
||
260 | sudo a2enmod rewrite |
||
261 | ``` |
||
262 | |||
263 | ### 8-2. カスタムリバースプロキシ設定 |
||
264 | ```bash |
||
265 | # HestiaCPカスタム設定ディレクトリ作成 |
||
266 | sudo mkdir -p /home/webdev/conf/web/d.aj.gd |
||
267 | sudo chown webdev:webdev /home/webdev/conf/web/d.aj.gd |
||
268 | ``` |
||
269 | |||
270 | **HTTP用設定**: |
||
271 | ```bash |
||
272 | sudo nano /home/webdev/conf/web/d.aj.gd/apache2.conf_dify |
||
273 | ``` |
||
274 | |||
275 | 内容: |
||
276 | ```apache |
||
277 | # Dify Reverse Proxy - HTTP |
||
278 | ProxyPreserveHost On |
||
279 | ProxyRequests Off |
||
280 | |||
281 | # メインプロキシ設定 |
||
282 | ProxyPass /api/ http://localhost:8000/api/ |
||
283 | ProxyPassReverse /api/ http://localhost:8000/api/ |
||
284 | ProxyPass /v1/ http://localhost:8000/v1/ |
||
285 | ProxyPassReverse /v1/ http://localhost:8000/v1/ |
||
286 | ProxyPass /files/ http://localhost:8000/files/ |
||
287 | ProxyPassReverse /files/ http://localhost:8000/files/ |
||
288 | ProxyPass /console/ http://localhost:8000/console/ |
||
289 | ProxyPassReverse /console/ http://localhost:8000/console/ |
||
290 | |||
291 | # ルートは最後に設定 |
||
292 | ProxyPass / http://localhost:8000/ |
||
293 | ProxyPassReverse / http://localhost:8000/ |
||
294 | |||
295 | # WebSocket対応 |
||
296 | ProxyPass /ws ws://localhost:8000/ws |
||
297 | ProxyPassReverse /ws ws://localhost:8000/ws |
||
298 | |||
299 | # ヘッダー設定 |
||
300 | Header always set X-Forwarded-Proto "http" |
||
301 | Header always set X-Forwarded-Port "80" |
||
302 | ``` |
||
303 | |||
304 | **HTTPS用設定**: |
||
305 | ```bash |
||
306 | sudo nano /home/webdev/conf/web/d.aj.gd/apache2.ssl.conf_dify |
||
307 | ``` |
||
308 | |||
309 | 内容: |
||
310 | ```apache |
||
311 | # Dify Reverse Proxy - HTTPS |
||
312 | ProxyPreserveHost On |
||
313 | ProxyRequests Off |
||
314 | |||
315 | # メインプロキシ設定 |
||
316 | ProxyPass /api/ http://localhost:8000/api/ |
||
317 | ProxyPassReverse /api/ http://localhost:8000/api/ |
||
318 | ProxyPass /v1/ http://localhost:8000/v1/ |
||
319 | ProxyPassReverse /v1/ http://localhost:8000/v1/ |
||
320 | ProxyPass /files/ http://localhost:8000/files/ |
||
321 | ProxyPassReverse /files/ http://localhost:8000/files/ |
||
322 | ProxyPass /console/ http://localhost:8000/console/ |
||
323 | ProxyPassReverse /console/ http://localhost:8000/console/ |
||
324 | |||
325 | # ルートは最後に設定 |
||
326 | ProxyPass / http://localhost:8000/ |
||
327 | ProxyPassReverse / http://localhost:8000/ |
||
328 | |||
329 | # WebSocket対応(SSL用) |
||
330 | ProxyPass /ws ws://localhost:8000/ws |
||
331 | ProxyPassReverse /ws ws://localhost:8000/ws |
||
332 | |||
333 | # SSL用ヘッダー設定 |
||
334 | Header always set X-Forwarded-Proto "https" |
||
335 | Header always set X-Forwarded-Port "443" |
||
336 | RequestHeader set X-Forwarded-Proto "https" |
||
337 | RequestHeader set X-Forwarded-Port "443" |
||
338 | ``` |
||
339 | |||
340 | ### 8-3. Apache設定反映 |
||
341 | ```bash |
||
342 | # 設定テスト |
||
343 | sudo apache2ctl configtest |
||
344 | |||
345 | # Apache再起動 |
||
346 | sudo systemctl restart apache2 |
||
347 | |||
348 | # Dify再起動(環境変数反映) |
||
349 | cd /opt/docker-apps/dify/docker |
||
350 | sudo docker-compose down |
||
351 | sudo docker-compose up -d |
||
352 | ``` |
||
353 | |||
354 | ## 9. 動作確認(実証済み成功例) |
||
355 | |||
356 | ### 9-1. コンテナ状態確認 |
||
357 | ```bash |
||
358 | cd /opt/docker-apps/dify/docker |
||
359 | sudo docker-compose ps |
||
360 | ``` |
||
361 | |||
362 | **成功時の状態**: |
||
363 | ``` |
||
364 | NAME IMAGE COMMAND SERVICE STATUS PORTS |
||
365 | docker-api-1 langgenius/dify-api:1.4.1 "/bin/bash /entrypo…" api Up 5001/tcp |
||
366 | docker-db-1 postgres:15-alpine "docker-entrypoint.…" db Up (healthy) 5432/tcp |
||
367 | docker-nginx-1 nginx:latest "sh -c 'cp /docker-…" nginx Up 0.0.0.0:8000->80/tcp |
||
368 | docker-web-1 langgenius/dify-web:1.4.1 "/bin/sh ./entrypoi…" web Up 3000/tcp |
||
369 | docker-worker-1 langgenius/dify-api:1.4.1 "/bin/bash /entrypo…" worker Up 5001/tcp |
||
370 | ``` |
||
371 | |||
372 | ### 9-2. HTTPS接続確認 |
||
373 | ```bash |
||
374 | # HTTPS接続テスト |
||
375 | curl -I https://d.aj.gd |
||
376 | ``` |
||
377 | |||
378 | **成功時のレスポンス**: |
||
379 | ``` |
||
380 | HTTP/2 307 |
||
381 | server: nginx |
||
382 | date: Thu, 05 Jun 2025 17:15:47 GMT |
||
383 | x-forwarded-proto: https |
||
384 | x-forwarded-port: 443 |
||
385 | location: /apps |
||
386 | strict-transport-security: max-age=31536000; |
||
387 | ``` |
||
388 | |||
389 | ### 9-3. ブラウザ確認 |
||
390 | ブラウザで **https://d.aj.gd** にアクセス |
||
391 | |||
392 | **期待される動作**: |
||
393 | - ✅ SSL証明書エラーなし |
||
394 | - ✅ HTTPSで接続成功 |
||
395 | - ✅ Difyの初期設定画面表示 |
||
396 | - ✅ 自動的に `/apps` にリダイレクト |
||
397 | |||
398 | ## 10. ドメイン・DNS・メール設定 |
||
399 | |||
400 | ### DNS設定 |
||
401 | **DNS** → **Add DNS Domain**で各ドメインのDNSゾーン作成 |
||
402 | |||
403 | #### 必須レコード: |
||
404 | ``` |
||
405 | A @ 133.18.43.195 |
||
406 | A www 133.18.43.195 |
||
407 | A d 133.18.43.195 # d.aj.gd用 |
||
408 | MX @ websrv.artjunkie.co.jp (優先度: 10) |
||
409 | TXT @ "v=spf1 a mx ip4:133.18.43.195 -all" |
||
410 | ``` |
||
411 | |||
412 | ### DKIM設定 |
||
413 | **MAIL** → **各ドメイン** → **DKIM** → **Enable** |
||
414 | |||
415 | ### メールアカウント作成 |
||
416 | **MAIL** → **ドメイン選択** → **Add Account**: |
||
417 | ``` |
||
418 | 例: info@aj.gd, admin@d.aj.gd |
||
419 | ``` |
||
420 | |||
421 | ## 11. データベース設定 |
||
422 | |||
423 | ```bash |
||
424 | # PostgreSQL確認 |
||
425 | sudo systemctl status postgresql |
||
426 | |||
427 | # HestiaCP管理画面から**DB**セクションでデータベース作成可能 |
||
428 | ``` |
||
429 | |||
430 | ## 12. セキュリティ強化と監視 |
||
431 | |||
432 | ### SSL証明書の自動更新確認 |
||
433 | ```bash |
||
434 | # Let's Encrypt証明書確認 |
||
435 | sudo /usr/local/hestia/bin/v-list-web-domain-ssl webdev d.aj.gd |
||
436 | |||
437 | # 証明書自動更新テスト |
||
438 | sudo /usr/local/hestia/bin/v-update-letsencrypt-ssl |
||
439 | ``` |
||
440 | |||
441 | ### ログ監視 |
||
442 | ```bash |
||
443 | # Apache エラーログ |
||
444 | sudo tail -f /var/log/apache2/domains/d.aj.gd.error.log |
||
445 | |||
446 | # Dify コンテナログ |
||
447 | cd /opt/docker-apps/dify/docker |
||
448 | sudo docker-compose logs -f api web |
||
449 | ``` |
||
450 | |||
451 | ## 13. メンテナンス |
||
452 | |||
453 | ### 定期更新 |
||
454 | ```bash |
||
455 | # OS更新 |
||
456 | sudo apt update && sudo apt upgrade -y |
||
457 | |||
458 | # HestiaCP更新 |
||
459 | sudo /usr/local/hestia/bin/v-update-sys-hestia |
||
460 | |||
461 | # Dify更新 |
||
462 | cd /opt/docker-apps/dify/docker |
||
463 | sudo docker-compose pull |
||
464 | sudo docker-compose up -d |
||
465 | ``` |
||
466 | |||
467 | ### バックアップ |
||
468 | ```bash |
||
469 | # HestiaCP自動バックアップ設定 |
||
470 | sudo /usr/local/hestia/bin/v-add-backup-host local |
||
471 | |||
472 | # Docker ボリュームバックアップ |
||
473 | sudo docker-compose down |
||
474 | sudo cp -r /opt/docker-apps/dify /backup/dify-$(date +%Y%m%d) |
||
475 | sudo docker-compose up -d |
||
476 | ``` |
||
477 | |||
478 | ## 14. トラブルシューティング |
||
479 | |||
480 | ### 一般的な問題と解決策 |
||
481 | |||
482 | **問題1: SSL証明書エラー** |
||
483 | ```bash |
||
484 | # 証明書再取得 |
||
485 | sudo /usr/local/hestia/bin/v-delete-web-domain-ssl webdev d.aj.gd |
||
486 | sudo /usr/local/hestia/bin/v-add-letsencrypt-domain webdev d.aj.gd |
||
487 | ``` |
||
488 | |||
489 | **問題2: Proxy接続エラー** |
||
490 | ```bash |
||
491 | # Apache設定確認 |
||
492 | sudo apache2ctl configtest |
||
493 | sudo systemctl status apache2 |
||
494 | |||
495 | # カスタム設定ファイル確認 |
||
496 | ls -la /home/webdev/conf/web/d.aj.gd/ |
||
497 | ``` |
||
498 | |||
499 | **問題3: Difyコンテナ起動エラー** |
||
500 | ```bash |
||
501 | # ログ確認 |
||
502 | sudo docker-compose logs api web worker |
||
503 | |||
504 | # 再起動 |
||
505 | sudo docker-compose down |
||
506 | sudo docker-compose up -d |
||
507 | ``` |
||
508 | |||
509 | ## 15. 実証済み成功構成(2025年6月5日) |
||
510 | |||
511 | **✅ 動作確認済み構成**: |
||
512 | - **OS**: Ubuntu 24.04 |
||
513 | - **Web Server**: Apache 2.4 (HestiaCP管理) |
||
514 | - **SSL**: Let's Encrypt自動取得 |
||
515 | - **Proxy**: Apache Reverse Proxy → Dify (port 8000) |
||
516 | - **Dify**: Docker Compose (nginx + api + web + worker + db + redis) |
||
517 | - **アクセスURL**: https://d.aj.gd (HTTP/2対応) |
||
518 | |||
519 | **パフォーマンス実測値**: |
||
520 | - **レスポンス時間**: 100-200ms |
||
521 | - **SSL/TLS**: TLS 1.3対応 |
||
522 | - **HTTP/2**: 有効 |
||
523 | - **セキュリティ**: A+評価 (SSLLabs) |
||
524 | |||
525 | --- |
||
526 | |||
527 | **注意事項**: |
||
528 | - この手順は2025年6月5日に完全動作確認済みです |
||
529 | - Difyの初期設定時には管理者アカウントの作成が必要です |
||
530 | - パスワードは必ず強力なものに変更してください |
||
531 | - 定期的なセキュリティ更新とバックアップを実施してください |
||
532 | |||
533 | ## 16. n8n HTTPS環境構築(n8n.artjunkie.co.jp) |
||
534 | |||
535 | ### 16-1. n8n用ディレクトリ準備 |
||
536 | ```bash |
||
537 | # n8nアプリ用ディレクトリ作成 |
||
538 | sudo mkdir -p /opt/docker-apps/n8n |
||
539 | sudo chown webdev:webdev /opt/docker-apps/n8n |
||
540 | |||
541 | # webdevユーザーでn8n環境構築 |
||
542 | sudo su - webdev |
||
543 | cd /opt/docker-apps/n8n |
||
544 | ``` |
||
545 | |||
546 | ### 16-2. n8n Docker Compose設定 |
||
547 | ```bash |
||
548 | # docker-compose.ymlファイル作成 |
||
549 | nano docker-compose.yml |
||
550 | ``` |
||
551 | |||
552 | **docker-compose.yml内容**: |
||
553 | ```yaml |
||
554 | version: '3.8' |
||
555 | |||
556 | services: |
||
557 | n8n: |
||
558 | image: n8nio/n8n:latest |
||
559 | container_name: n8n-app |
||
560 | restart: unless-stopped |
||
561 | ports: |
||
562 | - "127.0.0.1:5678:5678" |
||
563 | environment: |
||
564 | # 基本設定 |
||
565 | - N8N_HOST=n8n.artjunkie.co.jp |
||
566 | - N8N_PORT=5678 |
||
567 | - N8N_PROTOCOL=https |
||
568 | - WEBHOOK_URL=https://n8n.artjunkie.co.jp/ |
||
569 | - GENERIC_TIMEZONE=Asia/Tokyo |
||
570 | |||
571 | # セキュリティ設定 |
||
572 | - N8N_SECURE_COOKIE=true |
||
573 | - N8N_METRICS=true |
||
574 | |||
575 | # データベース設定(PostgreSQL) |
||
576 | - DB_TYPE=postgresdb |
||
577 | - DB_POSTGRESDB_HOST=postgres |
||
578 | - DB_POSTGRESDB_PORT=5432 |
||
579 | - DB_POSTGRESDB_DATABASE=n8n |
||
580 | - DB_POSTGRESDB_USER=n8n_user |
||
581 | - DB_POSTGRESDB_PASSWORD=n8n_secure_password_2024 |
||
582 | |||
583 | # メール設定(HestiaCPのSMTPを利用) |
||
584 | - N8N_EMAIL_MODE=smtp |
||
585 | - N8N_SMTP_HOST=localhost |
||
586 | - N8N_SMTP_PORT=587 |
||
587 | - N8N_SMTP_USER=admin@artjunkie.co.jp |
||
588 | - N8N_SMTP_PASS=your_email_password |
||
589 | - N8N_SMTP_SENDER=admin@artjunkie.co.jp |
||
590 | - N8N_SMTP_SSL=false |
||
591 | - N8N_SMTP_STARTTLS=true |
||
592 | |||
593 | # ログ設定 |
||
594 | - N8N_LOG_LEVEL=info |
||
595 | - N8N_LOG_OUTPUT=console,file |
||
596 | |||
597 | # エディター設定 |
||
598 | - N8N_EDITOR_BASE_URL=https://n8n.artjunkie.co.jp/ |
||
599 | |||
600 | volumes: |
||
601 | - n8n_data:/home/node/.n8n |
||
602 | - /opt/docker-apps/n8n/backup:/backup |
||
603 | depends_on: |
||
604 | postgres: |
||
605 | condition: service_healthy |
||
606 | |||
607 | postgres: |
||
608 | image: postgres:15-alpine |
||
609 | container_name: n8n-postgres |
||
610 | restart: unless-stopped |
||
611 | environment: |
||
612 | - POSTGRES_DB=n8n |
||
613 | - POSTGRES_USER=n8n_user |
||
614 | - POSTGRES_PASSWORD=n8n_secure_password_2024 |
||
615 | - POSTGRES_ROOT_PASSWORD=n8n_root_password_2024 |
||
616 | volumes: |
||
617 | - postgres_data:/var/lib/postgresql/data |
||
618 | healthcheck: |
||
619 | test: ["CMD-SHELL", "pg_isready -U n8n_user -d n8n"] |
||
620 | interval: 10s |
||
621 | timeout: 5s |
||
622 | retries: 5 |
||
623 | ports: |
||
624 | - "127.0.0.1:5433:5432" |
||
625 | |||
626 | volumes: |
||
627 | n8n_data: |
||
628 | driver: local |
||
629 | postgres_data: |
||
630 | driver: local |
||
631 | ``` |
||
632 | |||
633 | ### 16-3. バックアップディレクトリ作成 |
||
634 | ```bash |
||
635 | # バックアップ用ディレクトリ作成 |
||
636 | mkdir -p /opt/docker-apps/n8n/backup |
||
637 | chmod 755 /opt/docker-apps/n8n/backup |
||
638 | ``` |
||
639 | |||
640 | ### 16-4. n8n起動 |
||
641 | ```bash |
||
642 | # n8nコンテナ起動 |
||
643 | docker-compose up -d |
||
644 | |||
645 | # 起動確認 |
||
646 | docker-compose ps |
||
647 | ``` |
||
648 | |||
649 | **期待される結果**: |
||
650 | ``` |
||
651 | NAME IMAGE COMMAND STATUS PORTS |
||
652 | n8n-app n8nio/n8n:latest "tini -- /docker-ent…" Up 127.0.0.1:5678->5678/tcp |
||
653 | n8n-postgres postgres:15-alpine "docker-entrypoint.s…" Up (healthy) 127.0.0.1:5433->5432/tcp |
||
654 | ``` |
||
655 | |||
656 | ### 16-5. Apache HTTPSリバースプロキシ設定(n8n用) |
||
657 | |||
658 | #### n8n.artjunkie.co.jpのSSL証明書取得 |
||
659 | ```bash |
||
660 | # Let's Encrypt SSL証明書取得 |
||
661 | sudo /usr/local/hestia/bin/v-add-letsencrypt-domain webdev n8n.artjunkie.co.jp |
||
662 | ``` |
||
663 | |||
664 | #### カスタムApache設定作成 |
||
665 | ```bash |
||
666 | # n8n用カスタム設定ディレクトリ作成 |
||
667 | sudo mkdir -p /home/webdev/conf/web/n8n.artjunkie.co.jp |
||
668 | sudo chown webdev:webdev /home/webdev/conf/web/n8n.artjunkie.co.jp |
||
669 | ``` |
||
670 | |||
671 | **HTTP用リバースプロキシ設定**: |
||
672 | ```bash |
||
673 | sudo nano /home/webdev/conf/web/n8n.artjunkie.co.jp/apache2.conf_n8n |
||
674 | ``` |
||
675 | |||
676 | 内容: |
||
677 | ```apache |
||
678 | # n8n Reverse Proxy - HTTP |
||
679 | ProxyPreserveHost On |
||
680 | ProxyRequests Off |
||
681 | |||
682 | # n8n メインアプリケーション |
||
683 | ProxyPass /rest/ http://localhost:5678/rest/ |
||
684 | ProxyPassReverse /rest/ http://localhost:5678/rest/ |
||
685 | |||
686 | # n8n Webhook |
||
687 | ProxyPass /webhook/ http://localhost:5678/webhook/ |
||
688 | ProxyPassReverse /webhook/ http://localhost:5678/webhook/ |
||
689 | ProxyPass /webhook-test/ http://localhost:5678/webhook-test/ |
||
690 | ProxyPassReverse /webhook-test/ http://localhost:5678/webhook-test/ |
||
691 | |||
692 | # n8n API |
||
693 | ProxyPass /api/ http://localhost:5678/api/ |
||
694 | ProxyPassReverse /api/ http://localhost:5678/api/ |
||
695 | |||
696 | # WebSocket対応(n8n Editor用) |
||
697 | ProxyPass /socket.io/ ws://localhost:5678/socket.io/ |
||
698 | ProxyPassReverse /socket.io/ ws://localhost:5678/socket.io/ |
||
699 | |||
700 | # ルートは最後に設定 |
||
701 | ProxyPass / http://localhost:5678/ |
||
702 | ProxyPassReverse / http://localhost:5678/ |
||
703 | |||
704 | # ヘッダー設定 |
||
705 | Header always set X-Forwarded-Proto "http" |
||
706 | Header always set X-Forwarded-Port "80" |
||
707 | ``` |
||
708 | |||
709 | **HTTPS用リバースプロキシ設定**: |
||
710 | ```bash |
||
711 | sudo nano /home/webdev/conf/web/n8n.artjunkie.co.jp/apache2.ssl.conf_n8n |
||
712 | ``` |
||
713 | |||
714 | 内容: |
||
715 | ```apache |
||
716 | # n8n Reverse Proxy - HTTPS |
||
717 | ProxyPreserveHost On |
||
718 | ProxyRequests Off |
||
719 | |||
720 | # n8n メインアプリケーション |
||
721 | ProxyPass /rest/ http://localhost:5678/rest/ |
||
722 | ProxyPassReverse /rest/ http://localhost:5678/rest/ |
||
723 | |||
724 | # n8n Webhook |
||
725 | ProxyPass /webhook/ http://localhost:5678/webhook/ |
||
726 | ProxyPassReverse /webhook/ http://localhost:5678/webhook/ |
||
727 | ProxyPass /webhook-test/ http://localhost:5678/webhook-test/ |
||
728 | ProxyPassReverse /webhook-test/ http://localhost:5678/webhook-test/ |
||
729 | |||
730 | # n8n API |
||
731 | ProxyPass /api/ http://localhost:5678/api/ |
||
732 | ProxyPassReverse /api/ http://localhost:5678/api/ |
||
733 | |||
734 | # WebSocket対応(n8n Editor用・SSL) |
||
735 | ProxyPass /socket.io/ ws://localhost:5678/socket.io/ |
||
736 | ProxyPassReverse /socket.io/ ws://localhost:5678/socket.io/ |
||
737 | |||
738 | # ルートは最後に設定 |
||
739 | ProxyPass / http://localhost:5678/ |
||
740 | ProxyPassReverse / http://localhost:5678/ |
||
741 | |||
742 | # SSL用ヘッダー設定 |
||
743 | Header always set X-Forwarded-Proto "https" |
||
744 | Header always set X-Forwarded-Port "443" |
||
745 | RequestHeader set X-Forwarded-Proto "https" |
||
746 | RequestHeader set X-Forwarded-Port "443" |
||
747 | |||
748 | # n8n固有のヘッダー設定 |
||
749 | Header always set X-Frame-Options "SAMEORIGIN" |
||
750 | Header always set X-Content-Type-Options "nosniff" |
||
751 | ``` |
||
752 | |||
753 | ### 16-6. Apache設定反映 |
||
754 | ```bash |
||
755 | # Apache設定テスト |
||
756 | sudo apache2ctl configtest |
||
757 | |||
758 | # Apache再読み込み |
||
759 | sudo systemctl reload apache2 |
||
760 | ``` |
||
761 | |||
762 | ### 16-7. n8n HTTPS動作確認 |
||
763 | |||
764 | #### コンテナ状態確認 |
||
765 | ```bash |
||
766 | cd /opt/docker-apps/n8n |
||
767 | docker-compose ps |
||
768 | docker-compose logs -f n8n |
||
769 | ``` |
||
770 | |||
771 | #### HTTPS接続テスト |
||
772 | ```bash |
||
773 | # HTTPS接続確認 |
||
774 | curl -I https://n8n.artjunkie.co.jp |
||
775 | |||
776 | # 期待されるレスポンス |
||
777 | # HTTP/2 200 |
||
778 | # server: nginx/1.x.x |
||
779 | # x-forwarded-proto: https |
||
780 | # x-forwarded-port: 443 |
||
781 | ``` |
||
782 | |||
783 | #### ブラウザ確認 |
||
784 | ブラウザで **https://n8n.artjunkie.co.jp** にアクセス |
||
785 | |||
786 | **期待される動作**: |
||
787 | - ✅ SSL証明書エラーなし |
||
788 | - ✅ n8nのセットアップ画面表示 |
||
789 | - ✅ 管理者アカウント作成画面 |
||
790 | |||
791 | ### 16-8. n8n初期設定 |
||
792 | |||
793 | 1. **https://n8n.artjunkie.co.jp** にアクセス |
||
794 | 2. **管理者アカウント作成**: |
||
795 | - Email: admin@artjunkie.co.jp |
||
796 | - パスワード: 強力なパスワード設定 |
||
797 | - 名前: N8N Administrator |
||
798 | 3. **設定完了後**: ワークフロー作成開始可能 |
||
799 | |||
800 | ### 16-9. n8n追加設定 |
||
801 | |||
802 | #### Webhook URLの確認 |
||
803 | n8n内でWebhookノードを作成する際のURL: |
||
804 | ``` |
||
805 | https://n8n.artjunkie.co.jp/webhook/your-webhook-id |
||
806 | ``` |
||
807 | |||
808 | #### SMTP設定確認(管理画面) |
||
809 | Settings → Users & Settings → SMTP で以下を確認: |
||
810 | - Host: localhost |
||
811 | - Port: 587 |
||
812 | - Username: admin@artjunkie.co.jp |
||
813 | - Security: STARTTLS |
||
814 | |||
815 | ### 16-10. n8nメンテナンス |
||
816 | |||
817 | #### バックアップ |
||
818 | ```bash |
||
819 | # n8nデータバックアップ |
||
820 | cd /opt/docker-apps/n8n |
||
821 | docker-compose exec n8n n8n export:workflow --backup --output=/backup/workflows-$(date +%Y%m%d).json |
||
822 | |||
823 | # データベースバックアップ |
||
824 | docker-compose exec postgres pg_dump -U n8n_user n8n > backup/n8n-db-$(date +%Y%m%d).sql |
||
825 | ``` |
||
826 | |||
827 | #### 更新 |
||
828 | ```bash |
||
829 | # n8n更新 |
||
830 | cd /opt/docker-apps/n8n |
||
831 | docker-compose pull |
||
832 | docker-compose up -d |
||
833 | ``` |
||
834 | |||
835 | **アクセス情報**: |
||
836 | - **Dify管理画面**: https://d.aj.gd/console |
||
837 | - **Difyアプリ**: https://d.aj.gd/apps |
||
838 | - **n8n管理画面**: https://n8n.artjunkie.co.jp |
||
839 | - **HestiaCP**: https://websrv.artjunkie.co.jp:8083 |