概要
- Difyをプロキシ利用環境構築時に、モデル(OpenAIやAzure Open AI(AOAI))の設定を試みた場合に、設定できないことがあります。
- ログを見ると、SSL証明書の検証に失敗するというエラー
SSL: CERTIFICATE_VERIFY_FAILED
が表示されている場合の対策になります。 - プロキシで独自のSSL証明書を設定する必要がある場合に発生します。
- ログを見ると、SSL証明書の検証に失敗するというエラー
- 対策を何通りか示します。
別途投稿した別手順の方がより確実かと思いますので、ご参照をお勧めします。
現象
モデルの追加時にエラーが表示され、ログを確認すると次が表示されている。
httpcore.ConnectError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1000)
前提
- Dockerに対する「証明書以外」のプロキシの設定(プロキシのURL)は設定済みとします。
- ホスト環境(Windows)でもプロキシURLに加え証明書を設定する必要がある環境が対象です。
原因
- APIを呼び出すコンテナ(NAMESに
docker-api-1
およびdocker-worker-1
が設定されているコンテナ)のPython環境の証明書に、独自のSSL証明書が含まれていないため、外部API呼び出し時にSSL証明書の検証に失敗することが原因です。
対処
- 対処概要としては、プロキシを実行しているDocker内のPython環境(venv)に独自証明書を追加すれば良いということになります
対処1
上記手順に従い、docker-compose.yaml
の編集と独自証明書の配置を行い、コンテナ作成時に自動的に証明書が追加されるようにします。
対処2
既に構築済みの環境に手作業で配置します。
ただしこの方法はdocker起動時に毎回設定する必要があるので対処1が最終的な対処方法です
原因調査としての利用に限ります。
dockerのIMAGEがlanggenius/dify-api:0.15.0
のものが対象です。
- docker psでNAMESが
docker-api-1
およびdocker-worker-1
のCONTAINER IDを調べます。 - 前項で調べたDockerの中に入ります(bashを起動)。
docker container exec -it <CONTAINER ID> bash
- venvの証明書のフォルダーに移動します(Pythonのバージョンは変わることがあります)
cd /app/api/.venv/lib/python3.12/site-packages/certifi/
- viがインストールされていない場合はインストールします
apt-get update apt-get install -y vim
- viで証明書の内容を最後に追記します(貼り付けます)。
vi cacert.pem
-
SHIFT+G
で最後に移動 -
i
で編集モード - 最後に改行を入れてから貼り付け
-
ESC
キーでコマンドモードに戻ってから、:wq
で保存して閉じる
-
- 証明書の反映に再起動などは不要です。