プロジェクト

全般

プロフィール

操作

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ドメイン作成

  1. HestiaCPにログイン: https://websrv.artjunkie.co.jp:8083
  2. WEBAdd Domain
  3. ドメイン名: d.aj.gd
  4. ユーザー: webdev
  5. SSL Support: 有効化
  6. 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設定

DNSAdd 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各ドメインDKIMEnable

メールアカウント作成

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初期設定

  1. https://n8n.artjunkie.co.jp にアクセス
  2. 管理者アカウント作成
  3. 設定完了後: ワークフロー作成開始可能

16-9. n8n追加設定

Webhook URLの確認

n8n内でWebhookノードを作成する際のURL:

https://n8n.artjunkie.co.jp/webhook/your-webhook-id

SMTP設定確認(管理画面)

Settings → Users & Settings → SMTP で以下を確認:

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

アクセス情報

KAN YOSHIDA さんが13日前に更新 · 1件の履歴