DifyをConoHa VPSにインストールしてSSLを有効化する

テクノロジー

はじめに

この記事では、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アドレス
TTL300 秒 (任意)

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.yamlrestart: always があらかじめ設定されています。

Dockerのrestart ポリシー always / unless-stoppedは、ホスト再起動やDockerデーモン再起動のたびにコンテナを自動で再立ち上げます。これはDockerの標準仕様で、systemdやcronを別途設定しなくても有効です。

コメント

タイトルとURLをコピーしました