去年在帮一个初创团队搭建AI应用开发环境时,第一次接触到Dify这个开源项目。作为一个面向开发者的AI工作流编排平台,它能够大幅降低LLM应用开发门槛。但在Windows环境下部署时,我们遇到了Python版本冲突、依赖项缺失等一系列典型问题。经过多次尝试,最终通过Docker方案完美解决。这套方法后来成为我们团队的标准化部署流程,今天就把完整实现过程拆解给大家。
Dify的核心优势在于将AI模型接入、工作流设计、API管理等复杂功能可视化。对于中小团队来说,不用从零搭建基础设施就能快速验证AI应用创意。而Docker部署方案真正实现了"一次配置,到处运行",特别适合需要快速迭代的研发场景。
实测发现Dify在资源占用上比较友好,建议配置:
系统版本选择:
重要提示:家庭版Windows需手动安装WSL2内核更新包,建议直接使用专业版避免兼容性问题
Docker Desktop for Windows:
WSL2后端:
powershell复制wsl --install -d Ubuntu-22.04
wsl --set-default-version 2
推荐使用SSH方式克隆以保证后续更新方便:
bash复制git clone git@github.com:langgenius/dify.git
cd dify/docker
如果网络受限,可以使用HTTPS方式并配置Git代理:
bash复制git config --global http.proxy http://127.0.0.1:1080
关键配置文件docker-compose.yml需要修改三处:
yaml复制ports:
- "8080:8080" # 原9000端口改为8080
yaml复制volumes:
- ./data/mysql:/var/lib/mysql
yaml复制environment:
- TZ=Asia/Shanghai
首次运行需要构建基础镜像,这个过程较耗时:
bash复制docker-compose build --no-cache
启动服务的正确姿势:
bash复制docker-compose up -d
验证服务状态:
bash复制docker ps -a
正常应该看到3个容器:web、worker和mysql
错误现象:Bind for 0.0.0.0:8080 failed: port is already allocated
排查步骤:
powershell复制netstat -ano | findstr :8080
典型报错:MySQL exited with code 137
优化方案:
yaml复制environment:
- MYSQL_INNODB_BUFFER_POOL_SIZE=256M
临时解决方案:
bash复制docker pull registry.cn-hangzhou.aliyuncs.com/dify/dify-web:latest
bash复制docker tag registry.cn-hangzhou.aliyuncs.com/dify/dify-web:latest dify-web:latest
容器启动后,执行:
bash复制docker exec -it dify-web python manage.py create_admin
按提示输入邮箱和密码(建议密码≥12位含特殊字符)
bash复制curl http://localhost:8080/api/health
正常返回:{"status": "ok"}
http://localhost:8080应看到登录界面yaml复制environment:
- CELERY_WORKER_CONCURRENCY=4
nginx复制gzip on;
gzip_types text/plain application/json;
yaml复制environment:
- MYSQL_ROOT_PASSWORD=YourStrongPassword123!
bash复制openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ./nginx/ssl.key -out ./nginx/ssl.crt
bash复制docker exec dify-mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > backup.sql
powershell复制wsl --export docker-desktop-data D:\wsl-backup\docker-data.tar
推荐使用cAdvisor+Prometheus方案:
yaml复制services:
cadvisor:
image: gcr.io/cadvisor/cadvisor
ports:
- "8088:8080"
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
通过tag切换不同版本:
bash复制git checkout v0.3.5
docker-compose down && docker-compose up -d --build
挂载本地目录实现热更新:
yaml复制volumes:
- ./plugins:/app/plugins
GitLab流水线配置片段:
yaml复制deploy:
stage: deploy
script:
- scp docker-compose.prod.yml user@server:/opt/dify
- ssh user@server "cd /opt/dify && docker-compose pull && docker-compose up -d"
在ThinkPad P15v(i7-11800H/32GB)上的测试结果:
| 场景 | 响应时间 | 内存占用 |
|---|---|---|
| 空载状态 | 23ms | 1.2GB |
| 10并发请求 | 89ms | 2.8GB |
| 工作流执行 | 156ms | 3.5GB |
优化建议:
配置VS Code远程开发:
json复制{
"docker.host": "http://localhost:8080",
"python.pythonPath": "/app/venv/bin/python"
}
以ChatGLM为例的配置示例:
yaml复制environment:
- OPENAI_API_TYPE=chatglm
- OPENAI_API_BASE=http://localhost:8000/v1
修改config.py添加:
python复制WECOM_BOT_KEY = "your-webhook-key"
查看实时日志:
bash复制docker-compose logs -f --tail=100
清理无用镜像:
bash复制docker system prune -f
bash复制git pull origin main
bash复制docker-compose down && docker-compose up -d --build
bash复制docker exec -it dify-web python manage.py migrate
bash复制docker images --filter=reference='dify-web' --format "{{.ID}}"
bash复制docker-compose down
docker tag <old-image-id> dify-web:latest
docker-compose up -d