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

正常工作。

相关推荐
楚国的小隐士2 小时前
“你用AI,那我也会用AI,我还要你干什么?”
ai·大模型·编程·ai编程·哲学·氛围编程·辩证唯物主义·马列主义·唯物论
香吧香3 小时前
Dify大模型应用开发平台实战:从Prompt工程到生产级AI工作流
ai
智算菩萨3 小时前
元认知AI素养:来自交互式AI展览的发现——文献精读
论文阅读·人工智能·深度学习·ai
兰.lan3 小时前
【黑马ai测试】Day01课堂笔记+课后作业
软件测试·笔记·python·ai·单元测试
大树884 小时前
国产液冷产业链的突破:应对龙虾大模型等终端算力需求激增的倒逼效应
科技·ai·云计算
AI英德西牛仔7 小时前
deepseek导出word排版
人工智能·ai·chatgpt·deepseek·ds随心转
金刚猿7 小时前
AI -- 实现多轮对话且将消息数据基于ChatMemory持久化到 Redis 示例
ai·deepseek·ai多轮对话·持久化到redis
zhensherlock7 小时前
Protocol Launcher 系列:Trae AI 编辑器的深度集成
javascript·人工智能·vscode·ai·typescript·编辑器·ai编程
Zender Han7 小时前
从 0 到 1:如何设计与编写高质量 Skills(AI Agent 技能开发指南)
人工智能·ai