はじめに
この記事では、ConoHa VPS(Ubuntu 24.04 LTS)にDifyをセルフホストし、SSLを設定する方法をわかりやすく解説します。
AWS Route 53でDNSレコードを作成
まず、AWS Route 53で管理している geekoyaji.com に、ホスト名「dify」の Aレコードを追加しました。お名前.comなど、他のドメイン管理サービスを使っている場合は、それぞれの操作方法でレコードを追加してください。
設定項目 | 値 |
---|---|
レコード名 | dify (FQDNはdify.geekoyaji.com になる) |
レコードタイプ | A – IPv4アドレス |
値 | サーバーの パブリック IPv4アドレス |
TTL | 300 秒 (任意) |

Ubuntu に Docker / Docker Compose を導入
公式ガイドを参考に、まず Docker Engine をセットアップ。完了したら、そのまま Dify本体の導入へ進みます。
Difyのインストール
ホームディレクトリに git
フォルダを作り、その中へ Dify のソースコードをクローンします。
cd ~
mkdir git
cd git
git clone https://github.com/langgenius/dify.git
Dify のソースディレクトリに移動し、Docker の設定ファイルをコピーします。今回はまず SSL なしで起動するため、.env
ファイルの内容は変更せずそのまま使います。
cd dify/docker
cp .env.example .env
DockerでDifyを起動する前に、現在のユーザーをdockerグループに追加し、sudoなしで起動できるようにします。
sudo usermod -aG docker $USER
newgrp docker
Difyを起動します。
docker compose up -d
ConoHaのコントロールパネルでサーバーのセキュリティグループを編集し、Webアクセスを許可します。

http://dify.geekoyaji.com にアクセスすると、無事に初期画面が表示されました。これでDifyのインストールは完了ですが、まだSSL(https)ではアクセスできません。続いてSSLの設定を行います。

SSLの設定
秘密鍵と CSR を作成する
# 作業ディレクトリは dify/docker/nginx/ssl/ とする
mkdir -p nginx/ssl && cd nginx/ssl # 最初からディレクトリが存在すれば不要です
# ここでは、2048bit RSA の秘密鍵と CSR を同時生成
openssl req -new -newkey rsa:2048 -nodes \
-keyout dify.key \
-out dify.csr \
-subj "/C=JP/ST=Kanagawa/L=Kawasaki/O=GeekOyaji/OU=IT/CN=dify.geekoyaji.com"
CA に申請 → ドメイン所有を認証
ここでは、ConoHaの「まとめトク」契約で無料提供されるアルファSSLを使います。他のSSL証明書やLet’s Encryptでも大丈夫です。

SSLサーバー証明書の設定項目を入力します。
プラン: アルファSSL
取得形式: 新規取得
契約期間: 1年
デュアルアクセス*: 無効
認証方法: DNS認証(推奨)
*) デュアルアクセスは、ホスト名が「www」の場合のみ有効な設定で、「www.yourdomain.com」と「yourdomain.com」の両方でアクセスできるようにするものです。今回は dify.geekoyaji.com なので対象外となり、「無効」を選択します。

作成しておいたCSRを貼り付けて、「CSR内容確認」ボタンをクリックします。

問題がなければ、CSR作成時に入力した内容が表示されます。

申請担当者情報を入力し、「次へ」ボタンを押します。

④設定確認、⑤支払い確認ページはそのまま「次へ」で進み、⑥認証に進みます。
SSLを設定したいホスト名を選ぶと、認証IDが表示されます。表示された認証IDをDNSのゾーンファイルに追加します。

ドメインのゾーンファイルにTXTレコードを作成し、値に認証IDをペーストしてから保存します。

次に、ConoHaのコントロールパネルで「認証依頼」ボタンを押します。正常なら⑦の完了画面に進みます。DNSの反映には時間がかかる場合があるので、エラーが出た場合は少し待ってから再度実行すると成功しやすいです。
「SSL TOP」ボタンを押して、SSL一覧に戻ります。

作成したSSL証明書が利用可能になっていることが分かります。

次に、「証明書」リンクをクリックして、証明書のダウンロード画面を開きます。中間証明書(ICA)とサーバー証明書(PEM)の両方をダウンロードしてください。

証明書をdify.crtにまとめる
ダウンロードしたファイルをサーバーに転送し、~/git/dify/docker/nginx/ssl/ ディレクトリにコピーします。
# ディレクトリ内のファイル
dify.csr
'dify.geekoyaji.com(ICA).txt'
'dify.geekoyaji.com(PEM).txt'
dify.key
.gitkeep
PEM -> ICAの順に1つのcrtファイルにまとめます。
cat dify.geekoyaji.com\(PEM\).txt dify.geekoyaji.com\(ICA\).txt > dify.crt
ファイルの所有権と権限を適切に調整します。
chmod 600 dify.*
.env
ファイルを編集して HTTPS を有効化します。
NGINX_HTTPS_ENABLED=true
NGINX_SERVER_NAME=dify.geekoyaji.com
コンテナを再デプロイします。
docker compose down # 停止
docker compose up -d --build # 再起動
動作確認
Webブラウザからhttpsでアクセスしたところ、SSLが有効になっていることを確認できました。

認証がうまくいかない場合は、.envファイルの以下の項目を設定し、コンテナを再デプロイすると解決することがあります。
# Dify フロント/バックエンド共通 URL
CONSOLE_API_URL=https://dify.geekoyaji.com
CONSOLE_WEB_URL=https://dify.geekoyaji.com
SERVICE_API_URL=https://dify.geekoyaji.com
APP_API_URL=https://dify.geekoyaji.com
APP_WEB_URL=https://dify.geekoyaji.com
これでDifyのインストールとSSL設定が完了しました。次回は、Difyを使って資産運用シミュレーション用のチャットフローを作成してみます。
ところでOS再起動時にDifyを自動で起動するには?
特に何もしなくてもDifyが自動起動します。Docker Composeで立ち上げたDifyのコンテナ群には、公式 docker-compose.yaml
で restart: always
があらかじめ設定されています。
Dockerのrestart ポリシー always
/ unless-stopped
は、ホスト再起動やDockerデーモン再起動のたびにコンテナを自動で再立ち上げます。これはDockerの標準仕様で、systemdやcronを別途設定しなくても有効です。
コメント