ここ、1週間ほどDifyで試行錯誤して遊んでいます。
0.6.7から0.6.8にバージョンアップすると、OpenAIのGTP-4oが利用できるようになりました。
早速、Dockerで起動しているDifyをdocker-compose down
して、アップデート
リポジトリを更新
git checkout main
git pull origin main
Dify起動
cd docker
docker compose up -d
これで更新されたDifyが起動するはずなのですが、docker-compose起動時に下記のエラーが発生
Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:545: container init caused: rootfs_linux.go:76: mounting "/home/user/docker/compose/dify/docker/volumes/ssrf_proxy/squid.conf" to rootfs at "/etc/squid/squid.conf" caused: mount through procfd: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type
squid.confのマウントが失敗している模様
調査
dify/docker/volumes/ssrf_proxy
内を見てみると、squid.confと言うディレクトリとしてマウントされてました。
原因
difi/docker/volumesディレクトリの所有者がrootとなっており、一般ユーザーでgit pullした際に、パーミッションエラーでリポジトリが取得できてなかったのが原因でした。
解決
sudo で git pullするか、Githubからsquid.confを持ってくるなどして、squid.confのファイルを置くことで、無事起動した。
0.6.8 → 0.6.9
- docker停止し、リポジトリ取得
$ docker-compose down
$ git checkout main
$ git pull origin main
…
Please move or remove them before you merge.
Aborting
いろいろ変更点や修正したファイルがあるので取得できない。
- スタッシュを利用する
$ git add docker/docker-compose.yaml
$ git commit -m "my customize"
$ git pull origin main
$ git stash
$ git pull --rebase
$ git stash pop
- 強制的に取得する場合
(カスタマイズや修正したファイルがあればバックアップを取っておきましょう)
$ git fetch origin
$ git reset --hard origin/main
error: unable to create file docker/volumes/sandbox/dependencies/python-requirements.txt: 許可がありません
error: unable to unlink old 'docker/volumes/ssrf_proxy/squid.conf': 許可がありません
fatal: Could not reset index file to revision 'origin/main'.
Linux上のdockerで起動していた場合、volumesがroot権限になっていたので、一般ユーザーで実行するとパーミッションエラーが出ます。
$ sudo git reset --hard origin/main
HEAD is now at e60350d95 version to 0.6.9 (#4692)
sudoで取得した場合は、ファイルやディレクトリがroot権限になるので、望まない方は、chownで適宜変更しましょう。(ただし、Difyが正常に起動しなくなる可能性もあるのでご注意を!)
$ cd docker
$ docker-compose up -d
無事、0.6.9へ更新できました。
0.6.11 → 0.6.12
公式でのマイグレーション
- Back up your customized docker-compose YAML file (optional)
cd docker cp docker-compose.yaml docker-compose.yaml.$(date +%s).bak
- Get the latest code from the main branch
git checkout tags/0.6.12
- Stop the service,Command, please execute in the docker directory
docker compose down
- Back up data
tar -cvf volumes-$(date +%s).tgz volumes
- Upgrade services
docker compose up -d
この通りに作業すると、下記のエラーとなった
$ git checkout tags/0.6.12 error: pathspec 'tags/0.6.12' did not match any file(s) known to git
2.の項目が修正されてました。
git checkout main git pull origin main
結局、いつものように下記のコマンドを実行
$ pwd Dify $ cd docker $ docker compose down $ git stash $ git pull --rebase $ git stash pop
0.6.12より、docker-compose.yaml内の環境変数が、.envに集約されたので、.envが必須となります。
(もしくは、非.env環境のDify/docker-legacy内のdocker-compose.yamlを利用する)
$ pwd Dify/docker $ cp .env.example .env
$ docker compose up -d
git stash pop
で変更があった場合は、docker-compose.yamlに下記のような変更箇所の記述が入るので、削除しないと起動時にエラーが出る<<<<<<< Updated upstream - "${NGINX_PORT:-80}:80" - "${NGINX_SSL_PORT:-443}:443"
- opensearch ======= - "80:80"
>>>>>>> Stashed changes
バックアップ
公式ではtarによるバックアップだけど、afio派なので、afioでバックアップ
find volumes -depth -print | afio -o -z -v volumes-$(date +%s).afio