千问伴我部署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

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

WARN0000 The "vLx" variable is not set. Defaulting to a blank string.

WARN0000 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/

正常工作。

相关推荐
slacker-kian2 小时前
[实践]-本地大模型 + MCP + Agent 对接 SAP OData API 实现Web Chart APP
ai·llm·sap·agent·mcp·odata·chart bot
龙骑士baby2 小时前
重建 AI 认知第 6 篇:RAG——答案不在"检索 + 生成"这四个字里
ai·llm·rag
王红臣同学3 小时前
Microduck 强化学习源码拆解:一只 800g 的机器鸭怎么学会走路
人工智能·机器学习·ai
俊哥V3 小时前
AI 今日研究简报 · 2026-09-11
人工智能·ai
loser.with.m3 小时前
【AgentScope 2.0】05-从数据库配置到可运行 Agent:十个 Builder 开关怎么把一行 JSON 变成 HarnessAgent
人工智能·spring boot·ai
王红臣同学4 小时前
在 Windows 上复现 Microduck 机器鸭仿真
人工智能·ai
星辰AI6 小时前
前端性能优化实战:从首屏加载到交互响应的全链路调优
人工智能·ai·语言模型
敲代码的嘎仔6 小时前
从集群锁失效到异步领券:我用分布式锁 + Redisson + MQ 把领券接口 RT 从 200ms 压到 15ms
java·数据库·redis·分布式·缓存·ai·wpf
ChampaignWolf7 小时前
abapgit-agent:用 Git 当中介,让 Claude Code 自己完成 ABAP 闭环开发
git·ai·abap·claude·abapgit·mcp
全栈技术负责人7 小时前
AI 效能工具建设:Agent 可观测性技能技术方案与实践
前端·ai·ai编程