Docker Composeで展開した場合、次のコマンドを使用してパスワードをリセットできます:
docker exec -it docker-api-1 flask reset-password
メールアドレスと新しいパスワードを2回入力してください。
ERROR:root:Unknown Error in completion
Traceback (most recent call last):
File "/www/wwwroot/dify/dify/api/libs/rsa.py", line 45, in decrypt
private_key = storage.load(filepath)
File "/www/wwwroot/dify/dify/api/extensions/ext_storage.py", line 65, in load
raise FileNotFoundError("File not found")
FileNotFoundError: File not found
このエラーは、展開方法の変更や api/storage/privkeys
ディレクトリの削除によって発生する可能性があります。このファイルは大規模モデルキーの暗号化に使用されるため、損失は不可逆です。次のコマンドを使用して暗号化キーペアをリセットできます:
-
Docker Compose デプロイ
docker exec -it docker-api-1 flask reset-encrypt-key-pair
-
ソースコードの起動
apiディレクトリに移動し、次のコマンドを実行します:
flask reset-encrypt-key-pair
プロンプトに従ってリセットしてください。
これは、ドメイン/URLを変更したため、フロントエンドとバックエンドの間でクロスドメインの問題が発生している可能性があります。クロスドメインとアイデンティティの問題には、次の構成が関係しています:
-
CORS クロスドメイン構成
CONSOLE_CORS_ALLOW_ORIGINS
コンソールCORSポリシー。デフォルトは*で、すべてのドメインがアクセス可能です。 2.
WEB_API_CORS_ALLOW_ORIGINS
WebAPP CORSポリシー。デフォルトは*で、すべてのドメインがアクセス可能です。
これは、ドメイン/URLを変更したため、フロントエンドとバックエンドの間でクロスドメインの問題が発生している可能性があります。docker-compose.yml
内の次の構成項目を新しいドメインに更新してください:
CONSOLE_API_URL
: コンソールAPIのバックエンドURL
CONSOLE_WEB_URL
: コンソールWebのフロントエンドURL
SERVICE_API_URL
: サービスAPIのURL
APP_API_URL
: WebApp APIのバックエンドURL
APP_WEB_URL
: WebAppのURL
詳細については、環境変数を参照してください。
イメージから開始した場合は、最新のイメージを取得し、アップグレードを完了させてください。ソースコードから開始した場合は、最新のコードを取得してから始め、アップグレードを完了させます。
ソースコードの更新については、apiディレクトリに移動し、次のコマンドを実行してデータベース構造を最新バージョンにマイグレートします:
flask db upgrade
Notion 統合構成アドレス**。**プライベート展開を行う場合は、次の構成を設定してください:
NOTION_INTEGRATION_TYPE
:この値は(public/internal)に設定する必要があります。Notion の OAuth リダイレクトアドレスは https のみをサポートするため、ローカル展開には Notion の内部統合を使用してください。NOTION_CLIENT_SECRET
: Notion OAuth クライアントシークレット(パブリック統合タイプ用)。NOTION_CLIENT_ID
: OAuth クライアントID(パブリック統合タイプ用)。NOTION_INTERNAL_SECRET
: Notion内部統合シークレット。NOTION_INTEGRATION_TYPE
が internalの場合、この変数を設定してください。
データベースのtenants
テーブルを直接修正してください。
docker_compose.yaml
内のAPP_WEB_URL
構成項目を見つけて、新しいドメインに変更してください。
データベース、構成されたストレージ、ベクトルデータベースのデータをバックアップしてください。Docker Composeを使用して展開した場合は、dify/docker/volumes
ディレクトリ内のすべてのデータを直接バックアップします。
127.0.0.1はコンテナ内のアドレスです。Difyの構成されたサーバーアドレスは、ホストのローカルネットワークIPアドレスである必要があります。
公式Webサイトの環境変数を参照してください。
ローカル展開バージョンでは、メールを通じてメンバーを招待できます。メールアドレスを入力し、招待を送信すると、ページに招待リンクが表示されます。招待リンクをコピーしてユーザーに転送してください。ユーザーはそのリンクを開き、メール経由でログインし、パスワードを設定してスペースにアクセスできます。
Can't load tokenizer for 'gpt2'. If you were trying to load it from 'https://huggingface.co/models', make sure you don't have a local directory with the same name. Otherwise, make sure 'gpt2' is the correct path to a directory containing all relevant files for a GPT2TokenizerFast tokenizer.
設定に関しては、公式Webサイトの環境変数や関連するIssueを参照してください。
ポート80が使用中の場合、ポート80を占有しているサービスを停止するか、docker-compose.yamlでポートマッピングを変更し、ポート80を別のポートにマッピングしてください。通常、ApacheやNginxがこのポートを占有しているため、これらのサービスを停止することで解決できます。
[openai] Error: ffmpeg is not installed
OpenAI TTSはオーディオストリームの分割を実装しているため、ソースコード展開にはffmpegのインストールが必要です。詳細な手順は以下の通りです:
Windows:
- FFmpeg公式Webサイトを訪れ、事前にコンパイルされたWindows用の共有ライブラリをダウンロードします。
- FFmpegフォルダをダウンロードして展開し、"ffmpeg-20200715-51db0a4-win64-static"のようなフォルダが生成されます。
- 展開したフォルダを任意の場所に移動します。例:C:\Program Files\。
- FFmpegのbinディレクトリの絶対パスをシステムの環境変数に追加します。
- コマンドプロンプトを開き、"ffmpeg -version"と入力します。FFmpegのバージョン情報が表示されれば、インストールが成功しています。
Ubuntu:
- ターミナルを開きます。
- 次のコマンドを入力してFFmpegをインストールします:
sudo apt-get update
、次にsudo apt-get install ffmpeg
を入力します。 - インストールが成功したかどうかを確認するために、"ffmpeg -version"と入力します。
CentOS:
- まず、EPELリポジトリを有効にします。ターミナルで次を入力します:
sudo yum install epel-release
- 次に、次のコマンドを入力します:
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
- yumパッケージを更新します。入力:
sudo yum update
- 最後に、FFmpegをインストールします。入力:
sudo yum install ffmpeg ffmpeg-devel
- インストールが成功したかどうかを確認するために、"ffmpeg -version"と入力します。
Mac OS X:
- ターミナルを開きます。
- Homebrewをまだインストールしていない場合は、次のコマンドを入力してインストールできます:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- Homebrew を使用して FFmpeg をインストールします。入力:
brew install ffmpeg
- インストールが成功したかどうかを確認するために、"ffmpeg -version"と入力します。
Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error mounting "/run/desktop/mnt/host/d/Documents/docker/nginx/nginx.conf" to rootfs at "/etc/nginx/nginx.conf": mount /run/desktop/mnt/host/d/Documents/docker/nginx/nginx.conf:/etc/nginx/nginx.conf (via /proc/self/fd/9), flags: 0x5000: 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
完全なプロジェクトをダウンロードし、dockerに移動し、docker-compose up -d
を実行してください。
git clone https://github.com/langgenius/dify.git
cd dify/docker
docker compose up -d
Weaviate から他のベクトルデータベースにベクトルデータベースを移行する場合、データを移行する必要があります。以下はその手順です:
- ローカルソースコードから始める場合は、.envファイル内の環境変数を移行したいベクトルデータベースに変更してください。例:
VECTOR_STORE=qdrant
- docker-composeから始める場合は、
docker-compose.yaml
ファイル内の環境変数を移行したいベクトルデータベースに変更し、apiとworkerの両方を修正する必要があります。例:
# The type of vector store to use. Supported values are `weaviate`, `qdrant`, `milvus`, `analyticdb``.
VECTOR_STORE: weaviate
- 以下のコマンドを実行してください
flask vdb-migrate # or docker exec -it docker-api-1 flask vdb-migrate
テスト済みのターゲット データベース:
- qdrant
- milvus
- analyticdb
コミュニティエディションの docker-compose.yaml
では、一部のサービスに SSRF_PROXY
と HTTP_PROXY
環境変数が設定されています。これらは全て、ssrf_proxy
コンテナを指しており、SSRF攻撃を防ぐために利用されています。SSRF攻撃について詳しく学びたい方は、こちらの記事をご覧ください。
不必要なリスクを避けるために、SSRF攻撃の可能性があるすべてのサービスにプロキシを設定し、Sandboxのようなサービスがプロキシを通じてのみ外部ネットワークにアクセスできるようにしています。これにより、データとサービスのセキュリティが強化されます。デフォルトでは、このプロキシはローカルリクエストをインターセプトしませんが、squid
構成ファイルを変更することで、プロキシの動作をカスタマイズできます。
プロキシの動作は docker/volumes/ssrf_proxy/squid.conf
にある squid
構成ファイルを編集することでカスタマイズできます。例えば、ローカルネットワークが 192.168.101.0/24
セグメントにアクセスできる場合でも、192.168.101.19
にある機密データには、ローカル展開のDifyユーザーがアクセスしてほしくない場合、以下のように squid.conf
にルールを追加できます。
acl restricted_ip dst 192.168.101.19
acl localnet src 192.168.101.0/24
http_access deny restricted_ip
http_access allow localnet
http_access deny all
これは一例に過ぎません。必要に応じてプロキシの動作を自由にカスタマイズできます。アップストリームプロキシやキャッシュの設定が必要な場合は、詳細については squid構成ドキュメント をご覧ください。
現時点では、作成したアプリをテンプレートとして設定する機能はサポートされていません。既存のテンプレートは、Difyの公式がクラウドバージョンユーザー向けに提供しているもので、参考用となっています。クラウドバージョンをご利用の場合は、アプリをワークスペースに追加したり、変更後にカスタマイズして独自のアプリを作成できます。コミュニティバージョンを使用していて、チーム向けにさらに多くのアプリテンプレートが必要な場合は、有料の技術サポートを受けるために弊社ビジネスチームにお問い合わせください:[email protected]
このエラーは、Nginxがサービスを誤った場所に転送しているために発生します。まず、対象のコンテナが実行中であることを確認し、以下のコマンドを管理者権限で実行してください:
docker ps -q | xargs -n 1 docker inspect --format '{{ .Name }}: {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'
出力の中から以下の2行を見つけてください:
/docker-web-1: 172.19.0.5
/docker-api-1: 172.19.0.7
これらのIPアドレスをメモしておきます。次に、Difyソースコードを保存しているディレクトリに移動し、dify/docker/nginx/conf.d
を開いて、http://api:5001
を http://172.19.0.7:5001
に、http://web:3000
を http://172.19.0.5:3000
に置き換え、Nginxコンテナを再起動するか、構成を再読み込みします。
なお、これらのIPアドレスは 例 ですので、独自のIPアドレスを取得するためにコマンドを実行する必要があります。また、関連するコンテナを再起動する際には、IPアドレスの再設定が必要になることがあります。
.env
構成ファイルでCSP_WHITELIST
パラメータを見つけて、製品の使用に関連するすべての URL や API リクエスト アドレスなど、許可できるドメイン名を入力します。
この動きは、潜在的な XSS 攻撃を減らすのに役立ちます。 CSP に関する推奨事項の詳細については、コンテンツ セキュリティ ポリシー を参照してください。
API サービスのポートは、Dify プラットフォームで使用されるポートと一致します。docker-compose.yaml
ファイルの nginx
設定を変更することで、実行中のポートを再指定することができます。
ファイルをローカルストレージからクラウドストレージ(例:Alibaba Cloud OSS)に移行するには、'upload_files'と'privkeys'ディレクトリからデータを移行する必要があります。以下の手順に従って操作してください:
-
ストレージ設定を構成する
ローカルソースコードデプロイメントの方法:
.env
ファイルでストレージ設定を更新しますSTORAGE_TYPE=aliyun-oss
を設定します- Alibaba Cloud OSSの認証情報を設定します
Docker Composeデプロイメントの方法:
docker-compose.yaml
ファイルでストレージ設定を更新しますSTORAGE_TYPE: aliyun-oss
を設定します- Alibaba Cloud OSSの認証情報を設定します
-
移行コマンドを実行する
ローカルソースコードの場合:
flask upload-private-key-file-to-cloud-storage flask upload-local-files-to-cloud-storage
Docker Composeの場合:
docker exec -it docker-api-1 flask upload-private-key-file-to-cloud-storage docker exec -it docker-api-1 flask upload-local-files-to-cloud-storage