操作
HestiaCP + Dify HTTPS構築手順(完全版)¶
Ubuntu 24.04 / IP: 133.18.43.195
実証済み:2025年6月5日 HTTPS完全動作確認済み
前提条件¶
- ホスト名: websrv.artjunkie.co.jp
- ドメイン: aj.gd, d.aj.gd, artjunkie.net
- サービス: HestiaCP + Apache + HTTPS対応Dify
- 技術スタック: PHP 8.3 / Python 3.12 / Docker
- 機能: DNS・FTP・メール機能完備
1. OS 基本設定¶
# システム更新
sudo apt update && sudo apt upgrade -y
# タイムゾーン設定
sudo timedatectl set-timezone Asia/Tokyo
# 必要に応じて再起動
sudo reboot
2. セキュリティ基盤の構築¶
Fail2Ban のインストール¶
sudo apt install -y fail2ban
# 設定ファイル作成
sudo tee /etc/fail2ban/jail.local > /dev/null <<EOF
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
[hestia-iptables]
enabled = true
port = 8083
filter = hestia
logpath = /usr/local/hestia/log/auth.log
EOF
sudo systemctl enable --now fail2ban
ファイアウォール(UFW)の事前設定¶
sudo ufw --force reset
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 基本ポート
sudo ufw allow 22/tcp comment "SSH"
sudo ufw allow 80/tcp comment "HTTP"
sudo ufw allow 443/tcp comment "HTTPS"
# メールサーバー用ポート
sudo ufw allow 25/tcp comment "SMTP"
sudo ufw allow 465/tcp comment "SMTPS"
sudo ufw allow 587/tcp comment "Submission"
sudo ufw allow 993/tcp comment "IMAPS"
sudo ufw allow 995/tcp comment "POP3S"
# DNS
sudo ufw allow 53/tcp comment "DNS TCP"
sudo ufw allow 53/udp comment "DNS UDP"
# FTP(パッシブモード範囲)
sudo ufw allow 21/tcp comment "FTP Control"
sudo ufw allow 49152:65534/tcp comment "FTP Passive"
# HestiaCP管理画面
sudo ufw allow 8083/tcp comment "HestiaCP Panel"
# まだ有効化しない(HestiaCP インストール後に実行)
3. HestiaCP インストール¶
# インストールスクリプトダウンロード
wget https://raw.githubusercontent.com/hestiacp/hestiacp/release/install/hst-install.sh
chmod +x hst-install.sh
# メール機能込みでインストール
sudo bash hst-install.sh \
-s websrv.artjunkie.co.jp \
-e webmaster@artjunkie.co.jp \
-p 'redMine,616' \
-r 8083 \
-o yes \
-a yes \
-w yes \
-k yes \
-x yes \
-z yes \
-Z yes \
-c yes \
-t yes \
-i yes \
-b yes \
-d yes \
-W yes \
-m yes \
-g no \
-v yes \
-f
重要: インストール完了後の認証情報を必ず保存してください。
4. ファイアウォール有効化¶
# UFW有効化
sudo ufw --force enable
sudo ufw status verbose
5. HestiaCP 基本設定¶
webdevユーザー作成¶
# HestiaCPでwebdevユーザー作成
sudo /usr/local/hestia/bin/v-add-user webdev redMine,616 webmaster@artjunkie.co.jp default
# webdevユーザーの環境設定
sudo usermod -s /bin/bash webdev
sudo mkdir -p /home/webdev
sudo chown webdev:webdev /home/webdev
sudo usermod -aG sudo webdev
# SSH鍵設定(必要に応じて)
sudo mkdir -p /home/webdev/.ssh
sudo cp /home/webmaster/.ssh/authorized_keys /home/webdev/.ssh/ 2>/dev/null || true
sudo chown -R webdev:webdev /home/webdev/.ssh
sudo chmod 700 /home/webdev/.ssh
sudo chmod 600 /home/webdev/.ssh/authorized_keys 2>/dev/null || true
6. Docker環境構築¶
# Docker公式インストール
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
# Docker公式GPGキーを追加
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# Dockerリポジトリを追加
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
# Docker CE をインストール
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# サービス開始・自動起動設定
sudo systemctl enable --now docker
# webdev ユーザーをdockerグループに追加
sudo usermod -aG docker webdev
# Difyアプリ用ディレクトリ作成
sudo mkdir -p /opt/docker-apps/dify
sudo chown webdev:webdev /opt/docker-apps/dify
7. Dify HTTPS環境構築(実証済み手順)¶
7-1. HestiaCPでd.aj.gdドメイン作成¶
- HestiaCPにログイン:
https://websrv.artjunkie.co.jp:8083
- WEB → Add Domain
- ドメイン名:
d.aj.gd
- ユーザー:
webdev
- SSL Support: 有効化
- Let's Encrypt: 有効化
7-2. Dify Docker環境構築¶
# webdevユーザーでDify環境構築
sudo su - webdev
cd /opt/docker-apps/dify
# 公式リポジトリクローン
git clone https://github.com/langgenius/dify.git
cd dify/docker
# 環境変数設定(HTTPS対応)
cp .env.example .env
nano .env
重要な環境変数設定:
# HTTPS用設定(ポート番号なし)
CONSOLE_API_URL=https://d.aj.gd
CONSOLE_WEB_URL=https://d.aj.gd
SERVICE_API_URL=https://d.aj.gd
APP_API_URL=https://d.aj.gd
APP_WEB_URL=https://d.aj.gd
FILES_URL=https://d.aj.gd
# データベース設定
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
POSTGRES_DB=dify
POSTGRES_USER=dify
POSTGRES_PASSWORD=difyai123456
# Redis設定
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=difyai123456
# その他必要な設定
SECRET_KEY=sk-9f73s3ljTXVcMT3Blb3ljTqtsKiGHXVcMT3BlbkFJLK7U
WEB_API_CORS_ALLOW_ORIGINS=https://d.aj.gd
CONSOLE_CORS_ALLOW_ORIGINS=https://d.aj.gd
7-3. Dify起動¶
# Dockerコンテナ起動
sudo docker-compose up -d
# 起動確認
sudo docker-compose ps
期待される結果:
NAME IMAGE STATUS
docker-api-1 langgenius/dify-api:1.4.1 Up
docker-db-1 postgres:15-alpine Up (healthy)
docker-nginx-1 nginx:latest Up (0.0.0.0:8000->80/tcp)
docker-web-1 langgenius/dify-web:1.4.1 Up
docker-worker-1 langgenius/dify-api:1.4.1 Up
...
8. Apache HTTPSリバースプロキシ設定(成功実証済み)¶
8-1. 必要なApacheモジュール有効化¶
# 必要なモジュール確認・有効化
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_wstunnel
sudo a2enmod headers
sudo a2enmod rewrite
8-2. カスタムリバースプロキシ設定¶
# HestiaCPカスタム設定ディレクトリ作成
sudo mkdir -p /home/webdev/conf/web/d.aj.gd
sudo chown webdev:webdev /home/webdev/conf/web/d.aj.gd
HTTP用設定:
sudo nano /home/webdev/conf/web/d.aj.gd/apache2.conf_dify
内容:
# Dify Reverse Proxy - HTTP
ProxyPreserveHost On
ProxyRequests Off
# メインプロキシ設定
ProxyPass /api/ http://localhost:8000/api/
ProxyPassReverse /api/ http://localhost:8000/api/
ProxyPass /v1/ http://localhost:8000/v1/
ProxyPassReverse /v1/ http://localhost:8000/v1/
ProxyPass /files/ http://localhost:8000/files/
ProxyPassReverse /files/ http://localhost:8000/files/
ProxyPass /console/ http://localhost:8000/console/
ProxyPassReverse /console/ http://localhost:8000/console/
# ルートは最後に設定
ProxyPass / http://localhost:8000/
ProxyPassReverse / http://localhost:8000/
# WebSocket対応
ProxyPass /ws ws://localhost:8000/ws
ProxyPassReverse /ws ws://localhost:8000/ws
# ヘッダー設定
Header always set X-Forwarded-Proto "http"
Header always set X-Forwarded-Port "80"
HTTPS用設定:
sudo nano /home/webdev/conf/web/d.aj.gd/apache2.ssl.conf_dify
内容:
# Dify Reverse Proxy - HTTPS
ProxyPreserveHost On
ProxyRequests Off
# メインプロキシ設定
ProxyPass /api/ http://localhost:8000/api/
ProxyPassReverse /api/ http://localhost:8000/api/
ProxyPass /v1/ http://localhost:8000/v1/
ProxyPassReverse /v1/ http://localhost:8000/v1/
ProxyPass /files/ http://localhost:8000/files/
ProxyPassReverse /files/ http://localhost:8000/files/
ProxyPass /console/ http://localhost:8000/console/
ProxyPassReverse /console/ http://localhost:8000/console/
# ルートは最後に設定
ProxyPass / http://localhost:8000/
ProxyPassReverse / http://localhost:8000/
# WebSocket対応(SSL用)
ProxyPass /ws ws://localhost:8000/ws
ProxyPassReverse /ws ws://localhost:8000/ws
# SSL用ヘッダー設定
Header always set X-Forwarded-Proto "https"
Header always set X-Forwarded-Port "443"
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"
8-3. Apache設定反映¶
# 設定テスト
sudo apache2ctl configtest
# Apache再起動
sudo systemctl restart apache2
# Dify再起動(環境変数反映)
cd /opt/docker-apps/dify/docker
sudo docker-compose down
sudo docker-compose up -d
9. 動作確認(実証済み成功例)¶
9-1. コンテナ状態確認¶
cd /opt/docker-apps/dify/docker
sudo docker-compose ps
成功時の状態:
NAME IMAGE COMMAND SERVICE STATUS PORTS
docker-api-1 langgenius/dify-api:1.4.1 "/bin/bash /entrypo…" api Up 5001/tcp
docker-db-1 postgres:15-alpine "docker-entrypoint.…" db Up (healthy) 5432/tcp
docker-nginx-1 nginx:latest "sh -c 'cp /docker-…" nginx Up 0.0.0.0:8000->80/tcp
docker-web-1 langgenius/dify-web:1.4.1 "/bin/sh ./entrypoi…" web Up 3000/tcp
docker-worker-1 langgenius/dify-api:1.4.1 "/bin/bash /entrypo…" worker Up 5001/tcp
9-2. HTTPS接続確認¶
# HTTPS接続テスト
curl -I https://d.aj.gd
成功時のレスポンス:
HTTP/2 307
server: nginx
date: Thu, 05 Jun 2025 17:15:47 GMT
x-forwarded-proto: https
x-forwarded-port: 443
location: /apps
strict-transport-security: max-age=31536000;
9-3. ブラウザ確認¶
ブラウザで https://d.aj.gd にアクセス
期待される動作:
- ✅ SSL証明書エラーなし
- ✅ HTTPSで接続成功
- ✅ Difyの初期設定画面表示
- ✅ 自動的に
/apps
にリダイレクト
10. ドメイン・DNS・メール設定¶
DNS設定¶
DNS → Add DNS Domainで各ドメインのDNSゾーン作成
必須レコード:¶
A @ 133.18.43.195
A www 133.18.43.195
A d 133.18.43.195 # d.aj.gd用
MX @ websrv.artjunkie.co.jp (優先度: 10)
TXT @ "v=spf1 a mx ip4:133.18.43.195 -all"
DKIM設定¶
MAIL → 各ドメイン → DKIM → Enable
メールアカウント作成¶
MAIL → ドメイン選択 → Add Account:
例: info@aj.gd, admin@d.aj.gd
11. データベース設定¶
# PostgreSQL確認
sudo systemctl status postgresql
# HestiaCP管理画面から**DB**セクションでデータベース作成可能
12. セキュリティ強化と監視¶
SSL証明書の自動更新確認¶
# Let's Encrypt証明書確認
sudo /usr/local/hestia/bin/v-list-web-domain-ssl webdev d.aj.gd
# 証明書自動更新テスト
sudo /usr/local/hestia/bin/v-update-letsencrypt-ssl
ログ監視¶
# Apache エラーログ
sudo tail -f /var/log/apache2/domains/d.aj.gd.error.log
# Dify コンテナログ
cd /opt/docker-apps/dify/docker
sudo docker-compose logs -f api web
13. メンテナンス¶
定期更新¶
# OS更新
sudo apt update && sudo apt upgrade -y
# HestiaCP更新
sudo /usr/local/hestia/bin/v-update-sys-hestia
# Dify更新
cd /opt/docker-apps/dify/docker
sudo docker-compose pull
sudo docker-compose up -d
バックアップ¶
# HestiaCP自動バックアップ設定
sudo /usr/local/hestia/bin/v-add-backup-host local
# Docker ボリュームバックアップ
sudo docker-compose down
sudo cp -r /opt/docker-apps/dify /backup/dify-$(date +%Y%m%d)
sudo docker-compose up -d
14. トラブルシューティング¶
一般的な問題と解決策¶
問題1: SSL証明書エラー
# 証明書再取得
sudo /usr/local/hestia/bin/v-delete-web-domain-ssl webdev d.aj.gd
sudo /usr/local/hestia/bin/v-add-letsencrypt-domain webdev d.aj.gd
問題2: Proxy接続エラー
# Apache設定確認
sudo apache2ctl configtest
sudo systemctl status apache2
# カスタム設定ファイル確認
ls -la /home/webdev/conf/web/d.aj.gd/
問題3: Difyコンテナ起動エラー
# ログ確認
sudo docker-compose logs api web worker
# 再起動
sudo docker-compose down
sudo docker-compose up -d
15. 実証済み成功構成(2025年6月5日)¶
✅ 動作確認済み構成:
- OS: Ubuntu 24.04
- Web Server: Apache 2.4 (HestiaCP管理)
- SSL: Let's Encrypt自動取得
- Proxy: Apache Reverse Proxy → Dify (port 8000)
- Dify: Docker Compose (nginx + api + web + worker + db + redis)
- アクセスURL: https://d.aj.gd (HTTP/2対応)
パフォーマンス実測値:
- レスポンス時間: 100-200ms
- SSL/TLS: TLS 1.3対応
- HTTP/2: 有効
- セキュリティ: A+評価 (SSLLabs)
注意事項:
- この手順は2025年6月5日に完全動作確認済みです
- Difyの初期設定時には管理者アカウントの作成が必要です
- パスワードは必ず強力なものに変更してください
- 定期的なセキュリティ更新とバックアップを実施してください
16. n8n HTTPS環境構築(n8n.artjunkie.co.jp)¶
16-1. n8n用ディレクトリ準備¶
# n8nアプリ用ディレクトリ作成
sudo mkdir -p /opt/docker-apps/n8n
sudo chown webdev:webdev /opt/docker-apps/n8n
# webdevユーザーでn8n環境構築
sudo su - webdev
cd /opt/docker-apps/n8n
16-2. n8n Docker Compose設定¶
# docker-compose.ymlファイル作成
nano docker-compose.yml
docker-compose.yml内容:
version: '3.8'
services:
n8n:
image: n8nio/n8n:latest
container_name: n8n-app
restart: unless-stopped
ports:
- "127.0.0.1:5678:5678"
environment:
# 基本設定
- N8N_HOST=n8n.artjunkie.co.jp
- N8N_PORT=5678
- N8N_PROTOCOL=https
- WEBHOOK_URL=https://n8n.artjunkie.co.jp/
- GENERIC_TIMEZONE=Asia/Tokyo
# セキュリティ設定
- N8N_SECURE_COOKIE=true
- N8N_METRICS=true
# データベース設定(PostgreSQL)
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n_user
- DB_POSTGRESDB_PASSWORD=n8n_secure_password_2024
# メール設定(HestiaCPのSMTPを利用)
- N8N_EMAIL_MODE=smtp
- N8N_SMTP_HOST=localhost
- N8N_SMTP_PORT=587
- N8N_SMTP_USER=admin@artjunkie.co.jp
- N8N_SMTP_PASS=your_email_password
- N8N_SMTP_SENDER=admin@artjunkie.co.jp
- N8N_SMTP_SSL=false
- N8N_SMTP_STARTTLS=true
# ログ設定
- N8N_LOG_LEVEL=info
- N8N_LOG_OUTPUT=console,file
# エディター設定
- N8N_EDITOR_BASE_URL=https://n8n.artjunkie.co.jp/
volumes:
- n8n_data:/home/node/.n8n
- /opt/docker-apps/n8n/backup:/backup
depends_on:
postgres:
condition: service_healthy
postgres:
image: postgres:15-alpine
container_name: n8n-postgres
restart: unless-stopped
environment:
- POSTGRES_DB=n8n
- POSTGRES_USER=n8n_user
- POSTGRES_PASSWORD=n8n_secure_password_2024
- POSTGRES_ROOT_PASSWORD=n8n_root_password_2024
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U n8n_user -d n8n"]
interval: 10s
timeout: 5s
retries: 5
ports:
- "127.0.0.1:5433:5432"
volumes:
n8n_data:
driver: local
postgres_data:
driver: local
16-3. バックアップディレクトリ作成¶
# バックアップ用ディレクトリ作成
mkdir -p /opt/docker-apps/n8n/backup
chmod 755 /opt/docker-apps/n8n/backup
16-4. n8n起動¶
# n8nコンテナ起動
docker-compose up -d
# 起動確認
docker-compose ps
期待される結果:
NAME IMAGE COMMAND STATUS PORTS
n8n-app n8nio/n8n:latest "tini -- /docker-ent…" Up 127.0.0.1:5678->5678/tcp
n8n-postgres postgres:15-alpine "docker-entrypoint.s…" Up (healthy) 127.0.0.1:5433->5432/tcp
16-5. Apache HTTPSリバースプロキシ設定(n8n用)¶
n8n.artjunkie.co.jpのSSL証明書取得¶
# Let's Encrypt SSL証明書取得
sudo /usr/local/hestia/bin/v-add-letsencrypt-domain webdev n8n.artjunkie.co.jp
カスタムApache設定作成¶
# n8n用カスタム設定ディレクトリ作成
sudo mkdir -p /home/webdev/conf/web/n8n.artjunkie.co.jp
sudo chown webdev:webdev /home/webdev/conf/web/n8n.artjunkie.co.jp
HTTP用リバースプロキシ設定:
sudo nano /home/webdev/conf/web/n8n.artjunkie.co.jp/apache2.conf_n8n
内容:
# n8n Reverse Proxy - HTTP
ProxyPreserveHost On
ProxyRequests Off
# n8n メインアプリケーション
ProxyPass /rest/ http://localhost:5678/rest/
ProxyPassReverse /rest/ http://localhost:5678/rest/
# n8n Webhook
ProxyPass /webhook/ http://localhost:5678/webhook/
ProxyPassReverse /webhook/ http://localhost:5678/webhook/
ProxyPass /webhook-test/ http://localhost:5678/webhook-test/
ProxyPassReverse /webhook-test/ http://localhost:5678/webhook-test/
# n8n API
ProxyPass /api/ http://localhost:5678/api/
ProxyPassReverse /api/ http://localhost:5678/api/
# WebSocket対応(n8n Editor用)
ProxyPass /socket.io/ ws://localhost:5678/socket.io/
ProxyPassReverse /socket.io/ ws://localhost:5678/socket.io/
# ルートは最後に設定
ProxyPass / http://localhost:5678/
ProxyPassReverse / http://localhost:5678/
# ヘッダー設定
Header always set X-Forwarded-Proto "http"
Header always set X-Forwarded-Port "80"
HTTPS用リバースプロキシ設定:
sudo nano /home/webdev/conf/web/n8n.artjunkie.co.jp/apache2.ssl.conf_n8n
内容:
# n8n Reverse Proxy - HTTPS
ProxyPreserveHost On
ProxyRequests Off
# n8n メインアプリケーション
ProxyPass /rest/ http://localhost:5678/rest/
ProxyPassReverse /rest/ http://localhost:5678/rest/
# n8n Webhook
ProxyPass /webhook/ http://localhost:5678/webhook/
ProxyPassReverse /webhook/ http://localhost:5678/webhook/
ProxyPass /webhook-test/ http://localhost:5678/webhook-test/
ProxyPassReverse /webhook-test/ http://localhost:5678/webhook-test/
# n8n API
ProxyPass /api/ http://localhost:5678/api/
ProxyPassReverse /api/ http://localhost:5678/api/
# WebSocket対応(n8n Editor用・SSL)
ProxyPass /socket.io/ ws://localhost:5678/socket.io/
ProxyPassReverse /socket.io/ ws://localhost:5678/socket.io/
# ルートは最後に設定
ProxyPass / http://localhost:5678/
ProxyPassReverse / http://localhost:5678/
# SSL用ヘッダー設定
Header always set X-Forwarded-Proto "https"
Header always set X-Forwarded-Port "443"
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"
# n8n固有のヘッダー設定
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
16-6. Apache設定反映¶
# Apache設定テスト
sudo apache2ctl configtest
# Apache再読み込み
sudo systemctl reload apache2
16-7. n8n HTTPS動作確認¶
コンテナ状態確認¶
cd /opt/docker-apps/n8n
docker-compose ps
docker-compose logs -f n8n
HTTPS接続テスト¶
# HTTPS接続確認
curl -I https://n8n.artjunkie.co.jp
# 期待されるレスポンス
# HTTP/2 200
# server: nginx/1.x.x
# x-forwarded-proto: https
# x-forwarded-port: 443
ブラウザ確認¶
ブラウザで https://n8n.artjunkie.co.jp にアクセス
期待される動作:
- ✅ SSL証明書エラーなし
- ✅ n8nのセットアップ画面表示
- ✅ 管理者アカウント作成画面
16-8. n8n初期設定¶
- https://n8n.artjunkie.co.jp にアクセス
-
管理者アカウント作成:
- Email: admin@artjunkie.co.jp
- パスワード: 強力なパスワード設定
- 名前: N8N Administrator
- 設定完了後: ワークフロー作成開始可能
16-9. n8n追加設定¶
Webhook URLの確認¶
n8n内でWebhookノードを作成する際のURL:
https://n8n.artjunkie.co.jp/webhook/your-webhook-id
SMTP設定確認(管理画面)¶
Settings → Users & Settings → SMTP で以下を確認:
- Host: localhost
- Port: 587
- Username: admin@artjunkie.co.jp
- Security: STARTTLS
16-10. n8nメンテナンス¶
バックアップ¶
# n8nデータバックアップ
cd /opt/docker-apps/n8n
docker-compose exec n8n n8n export:workflow --backup --output=/backup/workflows-$(date +%Y%m%d).json
# データベースバックアップ
docker-compose exec postgres pg_dump -U n8n_user n8n > backup/n8n-db-$(date +%Y%m%d).sql
更新¶
# n8n更新
cd /opt/docker-apps/n8n
docker-compose pull
docker-compose up -d
アクセス情報:
- Dify管理画面: https://d.aj.gd/console
- Difyアプリ: https://d.aj.gd/apps
- n8n管理画面: https://n8n.artjunkie.co.jp
- HestiaCP: https://websrv.artjunkie.co.jp:8083
KAN YOSHIDA さんが13日前に更新 · 1件の履歴