Dify をAWS EC2にインスコ→諦め→MacOSにインスコ

<iframe src="https://www.youtube.com/embed/aPYTVs3QalM" title="[Qiita記事] Dify をAWS EC2にインスコ→諦め→MacOSにインスコ" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

# Dify楽しそう

すぐ飛びつくw
何それ？って方は[こちら](https://www.youtube.com/results?search_query=dify)へどうぞ。
- ラズパイのdocker imageは無さそう（そもそもスペック怪しい）
- PCは余ってるのがあるけど、常時通電をどこかに置いておくのはちと面倒
- というかAPI化したらインターネット経由でも使いたくないか？

**そうだ、AWS EC2にインストールしよう** （判断ミス） ※私に限って、ですけどね。

## レシピ

- 大前提:
    - OpenAIに課金していること。
    - というか使いたいモデルのAPI keyが取得できる状態であること。

1. [AWS EC2インスタンスにdockerとdocker-composeをインストール...(後略)](https://qiita.com/y-dobashi/items/e127211b32296d65803a)
    - composeのバージョンは[v2.27.0](https://github.com/docker/compose/releases)にしてみました
1. [Difyインストール(Docker篇)](https://qiita.com/24Century/items/181730f7f17b5381b6b8)
    - gitのCLIは使える状態でした。使えない方はこちら(未検証): `sudo yum install -y git`
    - `docker-compose` ではダメでしたので `docker compose` に変えました

これだけみたいです。
現場からは以上です。

## トラブルシュート

### まさかのEBS容量足りない事件が勃発ww

2.xGBあったんですけど、 `docker compose up -d` して（おそらくimageの)pullが実行されるんですけど
apiってやつを処理している最中に以下のエラーが発生しました。

```
failed to register layer: Error processing tar file(exit status 1): write /usr/local/lib/python3.10/site-packages/readabilipy/javascript/node_modules/acorn/dist/acorn.js.map: no space left on device
```

いろいろ調べた結果、単純な容量不足っぽかったので容量追加しておきました。

[AWS EC2インスタンスのディスク容量（EBSボリュームサイズ）を増やす方法](https://zenn.dev/magavel/articles/aws-ebs-increase-volume)

ちなみに上記手順の中で「デバイス名」はAWSコンソールと `df -hT` の表示結果が異なっていたので
そこはよしなに処理してます。
- AWSコンソール表示： `/dev/xvda`
- terminal表示： `/dev/nvme0n1p1` なので→ `sudo growpart /dev/nvme0n1 1` と実行

### nginxだけコケる

```
Error response from daemon: driver failed programming external connectivity on endpoint docker-nginx-1 (74***************7e): Error starting userland proxy: listen tcp4 0.0.0.0:80: bind: address already in use
```
無事compose upできましたが、nginxのコンテナだけ立ち上がりません。
「さて、こいつもトラブルシュートしよう」

と思ったら・・・・
　はて？
自前のサイトが見れなくなってる。
　はてはて？
sshに繋がらなくなった。
　まずい。

・・・・・・・。

・・・・・・・。

・・・t3a.microじゃスペック全然足りない！！www
[2コアでメモリは4GB必要です！！](https://github.com/langgenius/dify/blob/main/README_JA.md#%E3%82%AF%E3%82%A4%E3%83%83%E3%82%AF%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88)
くそっ！！www
ストレージは容量増やしたのに！！くそっ！！www
（AWSコンソールからインスタンスを再起動しました、とさ）

## 結末

まずはローカルに環境を作ることにします:sob:

# AWSがダメならMacがあるじゃない

と、かのマリーアントワネット姫が言ったとか言わないとか。

## レシピ（再挑戦）

1. [dockerとdocker-composeのインストール(mac編)](https://qiita.com/tomokei5634/items/7b1e7a121d5d7bc12116)
    - 余談ですがIntel復活してほしいのは私だけでしょうか？
2. インストール後、起動するとAcceptとかSign up(or Sign in)とかやる
    - 余談ですがフリーランスはfull-stack engineerでしょうか？
3. デスクトップアプリを入れたら `docker-compose` 使えるようになってました。
    - なのでcurlで取ってきてbinの中に収める、という手順は不要のはず
4. [Difyインストール(Docker篇)](https://qiita.com/24Century/items/181730f7f17b5381b6b8)
    - gitのCLIは(以下同文
5. http://localhost/install にアクセスして無事起動できました
    - くるくる終わらなかったので http://localhost にアクセスし直したら初期化画面になりました
    - メアド、ユーザ名、パスワードを入れたらできあがり！

## (おまけ) OpenAIだけ接続しておく

1. 画面右上のユーザー名をクリック
1. 表示されるメニューから「設定」を選択
1. 左のメニューから「モデルプロバイダー」を選択
1. OpenAIの「セットアップ」をクリック
1. ダイアログ左下の「Get your API Key from OpenAI」をクリック
1. 別タブで開いたOpenAIにログイン
1. ログイン後はAPI keysの画面なので「Create secret key」をクリック
1. 任意の値を入力して「Create secret key」をクリック
1. API keyが表示されるので「Copy」をクリック
1. Difyのタブに戻ってAPI Keyを入力し、「保存」をクリック

# 最後に

また新しいオモチャを手に入れて満足です。
（作るのを断念した「My秘書」を作りたい）