AWSのEC2の環境（Amazon Linux 2）にDifyをインストールする手順

# はじめに

Dify便利ですね！いろんなことについて生成AIで自動化できます。ここでは、AWSのEC2の環境（Amazon Linux 2）にDifyをインストールする手順を示します。Difyのバージョンは、0.9.2です。どなたかの参考にしていただけると嬉しいです。

# Dockerのインストール

1. SSHを使ってAmazon Linux 2インスタンスに接続します。

2. 必要なパッケージをインストールします

   ```
   $ sudo yum update -y
   $ sudo yum install -y docker git
   ```

3. Dockerサービスを開始し、自動起動を有効にします

   ```
   $ sudo systemctl start docker
   $ sudo systemctl enable docker
   ```

4. 現在のユーザーをdockerグループに追加し、再ログインして変更を反映させます

   ```
   $ sudo usermod -aG docker $USER
   $ exit
   ```

5. SSHで再接続後に、Docker Composeをインストールします

   ```
   $ sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                    Dload  Upload   Total   Spent    Left  Speed
     0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
     0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
   100 60.8M  100 60.8M    0     0  51.8M      0  0:00:01  0:00:01 --:--:--  116M
   $ sudo chmod +x /usr/local/bin/docker-compose
   ```

# Difyのインストール

1. Difyリポジトリをクローンします

   ```
   $ git clone https://github.com/langgenius/dify.git
   Cloning into 'dify'...
   remote: Enumerating objects: 95135, done.
   remote: Counting objects: 100% (11824/11824), done.
   remote: Compressing objects: 100% (1425/1425), done.
   remote: Total 95135 (delta 11046), reused 10727 (delta 10391), pack-reused 83311 (from 1)
   Receiving objects: 100% (95135/95135), 51.29 MiB | 15.74 MiB/s, done.
   Resolving deltas: 100% (67723/67723), done.
   Updating files: 100% (5967/5967), done.
   $ cd dify/docker
   ```

2. 環境設定ファイルをコピーし、必要に応じて編集します

   ```
   $ cp .env.example .env
   $ vi .env
   ```

   httpのポートをコンテナの外からアクセスできるように設定を変更します。`.env`の以下の2か所について、ポート番号の8888番を設定しました。（未使用ポートを設定しましょう）

   ```
   # ------------------------------
   # Environment Variables for Nginx reverse proxy
   # ------------------------------
   # HTTP port
   NGINX_PORT=8888
   # ------------------------------
   # Docker Compose Service Expose Host Port Configurations
   # ------------------------------
   EXPOSE_NGINX_PORT=8888
   ```

3. docker-composeで、Difyを起動します

   ```
   $ docker-compose up -d
   [+] Running 11/11
    ✔ Network docker_ssrf_proxy_network  Created                                                                                                              0.1s 
    ✔ Network docker_default             Created                                                                                                              0.1s 
    ✔ Container docker-db-1              Started                                                                                                              5.1s 
    ✔ Container docker-weaviate-1        Started                                                                                                              4.9s 
    ✔ Container docker-sandbox-1         Started                                                                                                              4.8s 
    ✔ Container docker-redis-1           Started                                                                                                              4.9s 
    ✔ Container docker-ssrf_proxy-1      Started                                                                                                              5.2s 
    ✔ Container docker-web-1             Started                                                                                                              4.6s 
    ✔ Container docker-api-1             Started                                                                                                              7.8s 
    ✔ Container docker-worker-1          Started                                                                                                              7.4s 
    ✔ Container docker-nginx-1           Started
   ```

これで、8888番でDifyがアクセス可能になりました。

あとは、必要に応じてドメインとTLSの設定を行います。今回はAWS環境（ALB配下のEC2サーバー）で構築したため、他に

- Route53に、CNAMEレコードを設定し、
- インターネットからの443ポートへのTLSアクセスが、ALB経由でEC2の80番ポートにアクセスされるように設定をし、
- EC2内のApacheには、httpd.confのVirtualHostに設定を入れ、再起動しました

※[domain-name]にはあなたのドメイン名を設定してくださいね。

   ```
   <VirtualHost *:80>
     ServerName [domain-name]
   
     # 通常のリバースプロキシの設定
     ProxyPass "/" "http://127.0.0.1:8888/"
     ProxyPassReverse "/" "http://127.0.0.1:8888/"
   </VirtualHost>
   ```

# Difyのセットアップ

1. Difyの初期化プロセスを開始します。ブラウザで以下のURLにアクセスします

   ```
   http://[domain-name]/install
   ```

10. 画面の指示に従って初期設定を完了します。

以下は初期画面です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245400/4a7d899d-d2d5-83f4-ab5a-b9127bd9b652.png)

「管理者アカウントの設定」リンクをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245400/48e0968b-5e0f-db37-f0e5-0f4764af2a74.png)

3つの項目を入れてボタンを押下すると登録されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245400/9a6ea11a-1d19-7333-43b7-ecba9a46f18d.png)

上記画面でサインインをします。先ほど登録したメールアドレスとパスワードを入力しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245400/210b9bd6-8af1-c4c1-2915-e77016940fc6.png)

見事サインインに成功しました。おめでとうございます！

# 自動起動の設定方法

マシンを再起動してもDifyが自動的に起動するようにするには、追加の設定が必要です。以下に手順示します。

1. システムのsystemdサービスを作成します

   ```
   sudo vi /etc/systemd/system/dify.service
   ```

2. 以下の内容を`dify.service`に追加します

   ```
   [Unit]
   Description=Dify Docker Compose Application
   Requires=docker.service
   After=docker.service
   
   [Service]
   Type=oneshot
   RemainAfterExit=yes
   WorkingDirectory=/home/ec2-user/dify/docker
   ExecStart=/usr/local/bin/docker-compose up -d
   ExecStop=/usr/local/bin/docker-compose down
   
   [Install]
   WantedBy=multi-user.target
   ```

実際のDifyのdockerディレクトリのパス類に置き換えてくださいね。

3. ファイルを保存して閉じます。

4. システムにサービスを登録し、有効化します

   ```
   $ sudo systemctl daemon-reload
   $ sudo systemctl enable dify.service
   Created symlink from /etc/systemd/system/multi-user.target.wants/dify.service to /etc/systemd/system/dify.service.
   ```

5. サービスを開始します

   ```
   $ sudo systemctl start dify.service
   ```

これらの手順を実行することで、マシンの再起動時にDifyが自動的に起動するようになります。

# まとめ

Difyをインストールする手順をまとめました。簡単ですね。どうやらとあるコンサルの調査によると、生成AIの活用は、日本は面倒な事務作業の効率化に焦点が当たることに比べて、アメリカは顧客満足度の向上に重きを置くそうです。自分に役立てるだけでなく、周りの人に役立ててこそ本当の価値。実際に使いながらいろいろ役立てていきましょう！