千问伴我部署Dify

我想要部署Dify,问了千问,似乎安装Dify比吃饭还简单。

开始用sqlite数据库部署,确实很简单,千文没有骗人,但是我后来改成了使用PostgreSQL数据库,事情就变了。

一.env中的密码

Dify 后端配置

SECRET_KEY=your_secret_key_here

ENCRYPTION_KEY=your_encryption_key_here_32_chars # 必须是 32 字符长

这个密码要避免 shell 特殊字符,我的密码设置为:SECRET_KEY=Kj8#mN!pQ2$vLx@wR5&zX9*bE7%yH1

因为我在密码用中了$符号,然后一直报错:

WARN[0000] The "vLx" variable is not set. Defaulting to a blank string.

WARN[0000] The "vLx" variable is not set. Defaulting to a blank string.

二.启动后,Dify无法登录
localhost:/home/dify #docker log Api

app.config.from_object(Config())

File "/app/api/config.py", line 213, in init

self.BROKER_USE_SSL = self.CELERY_BROKER_URL.startswith('rediss://')

AttributeError: 'NoneType' object has no attribute 'startswith'

None of PyTorch, TensorFlow >= 2.0, or Flax have been found. Models won't be available and only tokenizers, configuration and file/data utilities can be used.

Traceback (most recent call last):

CELERY_BROKER_URL 环境变量未被正确设置,值为 None,而 Dify 的配置代码试图对它调用 .startswith() 方法,导致崩溃
一问千问,说要在.env中设置。

.env

REDIS_HOST=redis

REDIS_PORT=6379

REDIS_PASSWORD=

构造 Celery Broker URL(注意:无密码时用 redis://,有密码用 :password@)

CELERY_BROKER_URL=redis://:{REDIS_PASSWORD}@{REDIS_HOST}:${REDIS_PORT}/0

但是设置后页面还是过不去,输入用户名和密码没有反应,点初始化,就是图标转圈,没有结果。

docker ps -a查看所有容器都正常启动

docker logs dify-redis-1 也没有发现错误。

再问千问,说改改IP地址

替换成服务器的真实内网或公网 IP

CONSOLE_API_URL=http://192.168.10.5:3001

WEB_API_URL=http://192.168.10.5:3001

改完后重新启动

在 dify 目录下执行

docker-compose down

docker-compose up -d

启动后错误消息是变了,出现新错误:

signin:1 Access to fetch at 'http://192.168.10.5:3001/console/api/login' from origin 'http://192.168.10.5:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource
三.CORS问题

再次修改.env

允许来自 3000 端口的跨域请求(注意:必须带协议和端口)

WEB_API_CORS_ALLOW_ORIGINS=["http://192.168.10.5:3000"]

改为后再重启。重启后发现错误是一样的,修改好像无效。

Access to fetch at 'http://192.168.10.5:3001/console/api/system-features' from origin 'http://192.168.10.5:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

再问千问,给了建议修改docker-compose.yaml .

api:

image: langgenius/dify-api:0.6.10

environment:

... 其他环境变量 ...

WEB_API_CORS_ALLOW_ORIGINS: '["*"]' # ← 临时允许所有来源

...

重启后,错误并没有消失,还是一样的。

Access to fetch at 'http://192.168.10.5:3001/console/api/system-features' from origin 'http://192.168.10.5:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
千问也傻了,但是这不妨碍AI继续编

让继续执行:curl http://localhost:3001/console/api/version

{"code": "invalid_param", "message": "Missing required parameter in the query string", "params": "current_version"}

执行:curl -H "Origin: http://192.168.10.5:3000" \

-H "Access-Control-Request-Method: POST" \

-H "Access-Control-Request-Headers: Content-Type" \

-X OPTIONS \

http://localhost:3001/console/api/login -i

HTTP/1.1 200 OK

Server: gunicorn

Date: Thu, 13 Nov 2025 12:35:59 GMT

Connection: keep-alive

Content-Type: text/html; charset=utf-8

Allow: POST, OPTIONS

Set-Cookie: remember_token=; Expires=Thu, 01 Jan 1970 00:00:00 GMT; Path=/

X-Version: 0.6.10

X-Env: PRODUCTION

Content-Length: 0

千问发现:

没有 Access-Control-Allow-Origin

没有 Access-Control-Allow-Methods

没有 Access-Control-Allow-Headers

CORS 中间件未启用,因为 WEB_API_CORS_ALLOW_ORIGINS 没有被正确传入或解析。

继续执行:

docker exec -it dify-api-1 cat /app/api/app.py | grep -i cors

from flask_cors import CORS

CORS(service_api_bp,

CORS(web_bp,

r"/*": {"origins": app.config['WEB_API_CORS_ALLOW_ORIGINS']}},

CORS(console_app_bp,

r"/*": {"origins": app.config['CONSOLE_CORS_ALLOW_ORIGINS']}},

CORS(files_bp,

千问觉得这就是根本原因:Dify 对 /console/api/... 路由(即登录接口)使用的蓝图是 console_app_bp

而它读取的 CORS 配置是:

CONSOLE_CORS_ALLOW_ORIGINS

而不是 WEB_API_CORS_ALLOW_ORIGINS

再继续修改.env

CONSOLE_CORS_ALLOW_ORIGINS: '["*"]'

docker-compose down

docker-compose up -d

重启后,问题确实变了。

Failed to load resource: the server responded with a status of 500 (INTERNAL SERVER ERROR)
四.500错误

CORS问题已解,但是业务逻辑奔溃了,查看日志是在数据库初始化过程中。

File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 924, in do_execute

cursor.execute(statement, parameters)

sqlalchemy.exc.ProgrammingError: (psycopg2.errors.UndefinedTable) relation "dify_setups" does not exist

LINE 2: FROM dify_setups

这Dify这么流行,如果搭建这么复杂,怎么可能流行起来??我觉得按千问现在这么个状态搞下去肯定是搞不定,还是回到人工处理。

五.端口冲突

自己去dify网站,打开了https://docs.dify.ai/zh-hans/getting-started/install-self-hosted/docker-compose

这次按着官网的步骤进行部署:
git clone https://github.com/langgenius/dify.git --branch 0.15.3
cd dify/docker
cp .env.example .env
docker-compose up -d

Error response from daemon: driver failed programming external connectivity on endpoint docker-nginx-1 (e42c993228422269deecca5c23d1d2bd4ba486eba0098c2f8b3cdf27a97a12c2): Error starting userland proxy: listen tcp4 0.0.0.0:80: bind: address already in use

原因是我已经安装过了nginx,80端口已经使用掉了。

修改.env中 nginx端口80为8080,再重启,很顺利。

六.配置LLM

正常登录Dify,开始配置Dify调用本地部署的deepseek模型。

1.右上角找到设置

2.在模型供应商中找到添加 OpenAI-API-compatible,选择LLM,特别要注意:不要因为自己的模型使用ollama管理,就选择ollama。模型名称需要和你实际使用的模型名称要完全一致。

3.API key中随便输入。API endpoint URL 中输入deepseek服务器地址https://192.168.10.250/

正常工作。

相关推荐
xixixi7777712 小时前
通信领域的“中国速度”:从5G-A到6G,从地面到星空
人工智能·5g·安全·ai·fpga开发·多模态
信看12 小时前
树莓派 AI 模块测试 温度时间测试
ai·模块测试
数据知道14 小时前
claw-code 源码分析:从 TypeScript 心智到 Python/Rust——跨栈移植时类型、边界与错误模型怎么对齐?
python·ai·rust·typescript·claude code·claw code
Thomas.Sir14 小时前
AI 医疗之罕见病/疑难病辅助诊断系统从算法到实现【表型驱动与知识图谱推理】
人工智能·算法·ai·知识图谱
javaGHui15 小时前
QClaw_简单方便_一键部署-多角色共同工作
ai
后端开发基础免费分享16 小时前
Claude Code 最全使用指南:CLAUDE.md、rules、skills、memory 一次讲清
人工智能·ai·claude·claudecode
Thomas.Sir16 小时前
重构诊疗效率与精准度之【AI 赋能临床诊断与辅助决策从理论到实战】
人工智能·python·ai·医疗·诊断
m晴朗17 小时前
测试覆盖率从35%到80%:我用AI批量生成C++单元测试的完整方案
c++·gpt·ai
2501_9481142418 小时前
技术解码:Gemini交互式模拟API与高负载网关的选型逻辑
人工智能·python·ai