目次
〜Redisが怒り、PostgreSQLが沈黙し、ついに私は神のinit_app()を見つけた〜

🎮 Dify?いいじゃん、Dockerで立てれば楽勝っしょ!
ある晴れた日の午後、私は思いついた。
「ChatGPTで遊ぶだけじゃなくて、自分専用のAIアプリ作れるらしい。しかも、Difyっていう神ツールがあるらしい!」
GitHub開いた。スター多い。公式サイト見た。かっこいい。
「よし、Dockerで docker compose up -d
すれば爆速起動だな!」」
そして、いつもの流れでこう打ったわけですよ
bashコピーする編集するgit clone https://github.com/langgenius/dify.git
cd dify/docker
cp .env.example .env
docker compose up -d
このときの私は思ってた。
「これで WebUI が http://localhost
で開いて、アカウント作って、あとはプロンプト書いて遊ぶだけやん!カンペキ!」
5分後——
“Internal Server Error”
“No such container: dify-backend”
“Redis client is not initialized”
……あれ?これ、Difyのはずが 紀州のDonfanになっとるやん…**😇
エラー達のカーニバル開幕 ~ どこで間違ったのか ~
🐛 dify-backend なんていない
Dockerの中を見たら「docker-api-1」という名前で立ち上がっていた。
Docker Compose v2 の作る名前は「<プロジェクト名>-<サービス名>-1」。 これを知らずに参考記事通りに動かしてたら、そら動かんわな。
javascriptコピーする編集するError response from daemon: No such container: dify-backend
↑まずこれで萎えた。
でもよく見たら、今時のDifyはコンテナ名が dify-backend
じゃなくてdocker-api-1
とか docker-web-1
になってる。
「ほほう、名前のトラップね?」と気を取り直す。
🧱 main.py
も manage.py
もない問題
DBマイグレーションしようとするとお決まりのコマンド
bashコピーする編集するdocker exec -it docker-api-1 python3 app/main.py db upgrade
が通らない。「そんなファイルはねえ!」って怒られる。
中を覗いてわかった。最近のDifyは構成がガラッと変わってて、commands.py
ってファイルに色々詰まってるらしい。
「よし、じゃあ from commands import migrate_database
っと……」
pgsqlコピーする編集するImportError: cannot import name 'migrate_database' from 'commands'
あぁん??😇
😤 やっと見つけたのは upgrade_db()
という救世主
grep "def "
で commands.py を洗い出すと、出てきた…
rubyコピーする編集するdef upgrade_db():
これや!と確信。さっそく実行。
でも……
vbnetコピーする編集するRuntimeError: Redis client is not initialized. Call init_app first.
Redisに怒られる。
🔍 最終奥義:create_app()
ついに /app/api/app_factory.py
の中で…
rubyコピーする編集するdef create_app():
という文字を発見!
もうこの時点でテンションが大谷翔平。
Pythonコンソールで実行
pythonコピーする編集するfrom app_factory import create_app
create_app()
from commands import upgrade_db
upgrade_db()
やっと、やっと、マイグレーション成功……!🎉🎉🎉
【結末】
👑 最後のボス:「テナント作成」にも罠がある
「さーて、管理者アカウント作るか」と思って
pythonコピーする編集するfrom commands import create_tenant
create_tenant(email="admin@example.com")
やったらまた怒られた:
cssコピーする編集するTypeError: Context.__init__() got an unexpected keyword argument 'email'
_人人人人人人人人_
> それCLIコマンドや <
 ̄Y^Y^Y^Y^Y^Y^Y ̄
というわけで最終正解:
bashコピーする編集するdocker exec -it docker-api-1 python3 /app/api/commands.py create-tenant --email admin@example.com --name 管理者 --language ja
これで Web UI も無事起動!
ついに http://localhost で Dify が立ち上がったのだった……✨
【まとめ】
🧭 DockerでDify立てる人へ、先人からのアドバイス
この地獄は、バージョン違い+構成進化+情報の古さが引き起こした
問題 | 原因 |
---|---|
dify-backend がない | Docker Compose v2 の名前仕様 |
main.py がない | 構成変更、commands.py へ移行 |
Redisエラー | create_app() 呼び出し必須 |
CLIコマンド形式に気づかない | clickでデコレートされている |
- 🔍 コンテナ名は
dify-backend
じゃない!docker-api-1
とか見よう - 📁
main.py
はもうない。commands.py
に頼れ - 🔑
create_app()
を実行しないと Redis にブチ切れられる - 🧑💻 テナント作成は Python じゃなく CLIでやれ!
【あなたにも聞きたい!】
💬 あなたはDifyインストールでどんなトラブルに遭遇した?
💥「これやらかした!」みたいな話、コメントで教えてください!