さくらのクラウドでDifyをホスティングしてみる①

# ✨ Difyとは？

最近注目を集めている **Dify** は、ChatGPTやClaudeなどの大規模言語モデル（LLM）を活用して、
**カスタムAIアプリケーション**や**チャットボット**を素早く構築できるオープンソースのプラットフォームです。

https://dify.ai/jp

Difyを使うことで、次のようなAIアプリやチャットサービスを、専門的なプログラミングなしでも構築できます：

#### 💬 質問応答ボット 
- 社内のよくある質問に答えるボット
- PDFマニュアルに基づくQ&Aボット

#### 💬 📄 **文章要約ツール**  
- ニュース記事を自動で要約するサービス
- 議事録の要点を抽出するツール

#### 🔗 外部データと連携したAIアプリの構築*
- 社内データベースとつなげた在庫問い合わせボット
- API経由で天気予報を取得して案内するAI」


#### 🧠 複数の大規模言語モデル（LLM）を簡単に切り替えて利用
- OpenAI（ChatGPT）、Anthropic（Claude）、Azure OpenAI、Mistral などを用途に応じて使い分け可能


#### 💬 🛠️ ユーザー管理やログ表示、APIキー発行など商用にも対応
- 社内メンバーごとにボットを使わせる
- API経由で社外システムに機能を組み込む


つまり、Difyを使えば、「AIチャットを作ってみたい」「業務に生成AIを導入してみたい」という場合に、  
Webインターフェースや少しの設定だけで実践的なAIツールを動かせるというわけです。

---

# ☁️ クラウド利用 vs セルフホスティング

Difyには大きく分けて2つの使い方があります：

| 利用方法 | 特徴 |
|----------|------|
| Dify Cloud（クラウド） | サインアップ後すぐに利用可能。OpenAIキーがあれば即実行。開発体験がスムーズ。 |
| セルフホスティング | OSS版をDockerで自前サーバーにデプロイ可能。API制限なし・データ完全管理・独自改造もOK。 |

今回は後者の「**セルフホスティング**」の方法を、さくらのクラウド上にUbuntuサーバーを立てて実践しました。

---

# ✅ 必要なシステム要件

DifyをDocker Composeでセルフホスティングするためには、以下の最小要件を満たす必要があります：


- CPU: 2コア以上
- メモリ: 4 GiB以上（推奨は8 GiB）
- OS: Linux（例：Ubuntu 20.04、AlmaLinux 9など）
- Docker: バージョン19.03以降
- Docker Compose: バージョン1.28以降

詳細はこちら
https://docs.dify.ai/ja-jp/getting-started/install-self-hosted/local-source-code?utm_source=chatgpt.com

# 📌 今回の目的と構成

この記事では、以下のことをゴールとしています：

- さくらのクラウドに仮想サーバー（Ubuntu）を作成
- DockerおよびDocker Composeを導入
- Difyの公式リポジトリからクローンして、ローカルで起動準備を整える

今後の記事では、`.env` の設定や、実際の初期起動、外部公開（nginxやSSL設定）についても扱う予定です。






# サーバーを作成

さくらのクラウドホーム画面から、「さくらのクラウド（Iaas）」を開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664191/ca28ca89-d27b-4ce3-a239-d80f20ec4801.png)

サイドバーから「サーバ」を選択し、右上の「追加」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664191/e9cb6ba0-9bdc-46bf-8cd7-d6d8fdd07527.png)


以下の設定値でサーバを作成する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664191/96e29bed-65d0-43d6-8f8e-1ba54cafa26c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664191/835300dd-e950-47a7-97fb-ecbc388d4639.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664191/4fd4aeac-7a9c-4b64-9826-1cffc7324af9.png)

公開鍵を「プロジェクトから選択」にするためには、予めさくらのクラウドに登録しておく必要があります。もちろん「入力」を選択して直接入力することも可能です。

（公開鍵を「なし」に設定した場合は、管理ユーザのパスワードでSSHログインできます。）
![スクリーンショット 2025-05-10 065537.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664191/8a510ed2-dd07-4b5f-84eb-6240f12abaf4.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664191/10211c9e-53d3-4ed7-95fd-dd540c825e7f.png)

作成されたサーバを開き、NICタブをクリックします。
「共有セグメント　インターネット」（つまりインターネット公開されているインターフェース）の、「IPv4アドレス」がサーバのSSHログインIPです。

![スクリーンショット 2025-05-10 070741.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664191/e2919aba-40d6-46b6-8dfe-8da9de5983e1.png)

```
ssh ubuntu@{共有セグメントのIPv4アドレス}
```

# サーバにDockerとDocker Composeをインストール

### 1. 依存パッケージのインストール
```
sudo apt update #サーバ作成時にapt updateしていたら不要
sudo apt install -y ca-certificates curl gnupg lsb-release
```

### 2. GPGキーとリポジトリの追加
DockerのAPTリポジトリの信頼性を確認するための「署名鍵（GPGキー）」を、ローカルにバイナリ形式で保存します。
```
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
  sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
```
```
ls -l /etc/apt/keyrings/docker.gpg
```

🤔 なぜこんなことをするの？

::: note info
APT（パッケージ管理システム）は、公式以外のソースからソフトウェアをインストールするとき、その出所を検証するために「署名キー」を必要とします。Dockerのソフトウェアをインストールするためには、Dockerの署名付きパッケージが本物であることを確認するための鍵が必要なんです。
:::

### 3. Dockerリポジトリの設定

次に DockerのAPTリポジトリの追加 を行います。
```
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
```
```
cat  /etc/apt/sources.list.d/docker.list
```
/etc/apt/sources.list.d/docker.listに以下のような情報が入っていればOK。

```
deb [arch=amd64   signed-by=/etc/apt/keyrings/docker.gpg]   https://download.docker.com/linux/ubuntu   jammy stable
```

### 4. APTキャッシュを更新
```
sudo apt update
```

### 5. DockerとDocker Composeをインストール

```
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
```
この画面が途中で表示されます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664191/33d622e3-dd9f-4f91-a79d-37f550458e1e.png" width="300">

::: note info
これは、APTによるパッケージ更新後に表示される「古いライブラリを使っているデーモン（サービス）を再起動するか？」という確認です。
セキュリティや安定性のために、再起動しておくのが推奨されます。
:::

Tab キーを押すと <OK> にカーソルが移動します
Enter キーで確定→　インストールが進みます。

### 6. Dockerの動作確認

```
sudo docker run hello-world
```


以下のような文章が表示されたら成功！
```
Hello from Docker!
This message shows that your installation appears to be working correctly.
```


# Difyのインストール

Difyをインストールする前に、専用のユーザを作成しておきます。（セキュリティ上、管理ユーザとわけるため。この手順飛ばしてもDifyのインストールはできます。）

### 1. difyhost ユーザーの作成

 ```
 # 1. ユーザー作成（パスワードも設定されます）
sudo adduser difyhost

# 2. Dockerグループに追加（sudoなしで docker コマンドを使えるように）
sudo usermod -aG docker difyhost

# 3. difyhostユーザに切り替え
su - difyhost

# 4. ホームディレクトリが/home/difyhost/担っていることを確認
pwd
```

以後の手順で、/home/difyhost/配下にDify Composeがデプロイされます。

### 2. Difyのリポジトリをクローン

```
git clone https://github.com/langgenius/dify.git
cd dify/docker
```

※特定のDifyバージョンを選択してクローンしたい場合は上記ではなく下記手順を実施します。
(例として1.0.0-beta.1を使用する場合)

```
git clone https://github.com/langgenius/dify.git .
git tag
git fetch --tags
git checkout tags/1.0.0-beta.1 -b dify-1.0.0-beta.1
cd dify/docker
```

## 3. 環境設定ファイルをコピー
```
cp .env.example .env
```


### 4. Docker コンテナを起動する

```
docker compose up -d
```

下記のような画面が１分ほど続きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664191/beae6b71-4387-4679-9d5c-eaf818770765.png)

下記画面のようにContainerが表示され、すべて起動されたらOK！！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664191/a0cbbd7d-cbe6-4d39-84f4-19b644d3cf6e.png)



### 5. Difyへアクセス

Google Chromeなどのブラウザで、下記のアドレスにアクセスしてみましょう。
IPは作成したサーバのNICの共有セグメントのIPです。
```
http://｛サーバのIP｝/install
```

![スクリーンショット 2025-05-10 070741.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664191/926c7f5f-a65a-4593-ae80-1838a43d572f.png)


下記のような画面が表示されたら成功です！

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664191/f3e23967-0a28-4194-9f1d-54da68746d8a.png" width="500">


メールアドレスなど必要事項を入力して、「セットアップ」をクリックします。

その後、特にメール認証などはなく、ログイン画面に遷移するので、
先ほど入力したメールアドレスとPWを入力します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664191/d4d32bde-63ed-4e23-bb87-5997d5a90a18.png" width="500">

Difyの管理画面が表示されます。
![スクリーンショット 2025-05-10 083300.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664191/e52bbca9-8dda-4dfc-ac64-133c7e54f622.png)

一旦ここまで。

# 📝 まとめ：セルフホスティングでDifyを動かすまで

今回は、さくらのクラウド上にUbuntuサーバーを用意し、Dockerを使ってDifyをセルフホストするところまでを実践しました。


クラウド版と違い、自前のサーバーで運用することで以下のようなメリットがあります：

- API利用制限なしで開発・検証できる
- データがすべて自分の管理下にある
- 独自の改造や社内システムとの統合がしやすい

---

# 🔧 今後予定していること

次回以降は、以下のような「実運用に向けた環境整備」を進めていきます：

- Let's Encrypt を使った SSL/TLS 対応
- ベーシック認証やファイアウォール等のセキュリティ強化
- Difyのアプリケーション開発

---

DifyはLLMを活用した開発をグッと身近にしてくれる強力なツールです。  
引き続き、自分だけのAIアプリ基盤を一緒に育てていきましょう！