Dify 部署指南
一、环境准备与清理
确保系统环境干净,避免旧配置干扰:
# 1. 清理旧的Dify目录(如存在) cd ~ rm -rf dify # 2. 检查Docker环境 docker --version二、配置国内镜像加速
2.1 Docker镜像加速设置
# 配置Docker镜像加速器 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": [ "https://docker.xuanyuan.me", "https://docker.1ms.run", "https://docker.mirrors.ustc.edu.cn" ] } EOF # 重启Docker服务 sudo systemctl daemon-reload sudo systemctl restart docker # 验证配置 docker info | grep -A 5 "Registry Mirrors"2.2 使用Gitee镜像克隆代码
git clone https://gitee.com/dify_ai/dify.git cd dify/docker三、环境变量配置
# 复制并编辑环境变量文件 cp .env.example .env vim .env关键配置项修改建议:
# 端口配置(避免冲突) EXPOSE_NGINX_PORT=8080 EXPOSE_NGINX_SSL_PORT=8443 # 服务URL配置(替换实际IP) CONSOLE_API_URL=http://服务器IP:8080/api CONSOLE_WEB_URL=http://服务器IP:8080 APP_API_URL=http://服务器IP:8080/api APP_WEB_URL=http://服务器IP:8080 FILES_URL=http://服务器IP:8080 # 加速配置 PIP_MIRROR_URL=https://pypi.tuna.tsinghua.edu.cn/simple PLUGIN_PYTHON_ENV_INIT_TIMEOUT=360四、启动服务
# 启动容器 docker compose up -d # 等待初始化完成 sleep 30 # 检查服务状态 docker compose ps正常状态应显示:
- api/web/nginx/redis/db_postgres等容器状态为"Up"
- init_permissions-1容器状态为"Exited"(正常初始化状态)
五、服务验证
# 1. 检查web服务日志 docker compose logs web --tail 50 # 2. 测试web服务连通性 docker exec docker-web-1 wget -q -O- http://localhost:3000 || echo "web服务异常" # 3. 测试nginx到web的连通性 docker exec docker-nginx-1 curl -s http://web:3000 || echo "nginx连接web失败" # 4. 检查nginx日志 docker compose logs nginx --tail 20六、常见问题处理
问题1:web服务启动失败
# 重建web服务 docker compose stop web docker compose rm -f web docker compose up -d --build web docker compose logs -f web问题2:nginx 502错误
# 检查后端服务状态 docker compose ps api web # 查看api日志 docker compose logs api --tail 20 # 重启nginx docker compose restart nginx问题3:端口冲突
# 检查端口占用情况 sudo lsof -i :80 sudo lsof -i :8080 # 修改.env中的端口配置 vim .env七、访问平台
- 访问地址:http://服务器IP:8080(端口需与配置一致)
- 首次访问将引导创建管理员账号
- 登录后可开始配置模型和创建应用
八、运维命令
# 查看服务状态 docker compose ps # 查看实时日志 docker compose logs -f [服务名] # 停止服务 docker compose down # 重启服务 docker compose restart # 更新版本 git pull docker compose up -d --build九、避坑
全部执行完之后,浏览器打开dify会发现页面无法正常打开;
原因:
通过docker-compose ps 执行后发现这里面 docker-plugin_daemon-1 一直在重启,如下图:
执行如下命令查看日志
cd dify/docker docker compose logs plugin_daemon --tail 50日志如下图:
这时我们发现这个服务连接不上内置数据库;
[error] failed to initialize database, got error failed to connect to `host=db_postgres user=postgres database=dify_plugin`: server error (FATAL: database "dify_plugin" does not exist (SQLSTATE 3D000))
这个错误信息显示plugin_daemon仍然在尝试连接host=db_postgres,但我们的数据库容器实际名称是docker-db_postgres-1。这是配置问题!
快速修复脚本
cd ~/dify/docker echo "=== 步骤1: 停止所有服务 ===" docker compose down echo "=== 步骤2: 确保 .env 配置正确 ===" cat > .env.tmp << 'EOF' PLUGIN_DB_HOST=db_postgres PLUGIN_DB_PORT=5432 PLUGIN_DB_USER=postgres PLUGIN_DB_PASSWORD=postgres PLUGIN_DB_NAME=dify_plugin EOF # 合并到现有 .env cat .env.tmp >> .env rm .env.tmp echo "=== 步骤3: 启动所有服务 ===" docker compose up -d echo "=== 步骤4: 等待数据库启动 ===" sleep 20 echo "=== 步骤5: 创建数据库 ===" docker exec -it docker-db_postgres-1 psql -U postgres -c "CREATE DATABASE dify_plugin;" 2>/dev/null || echo "数据库可能已存在" echo "=== 步骤6: 查看最终状态 ===" docker compose ps echo "=== 步骤7: 查看 plugin_daemon 日志 ===" docker compose logs plugin_daemon --tail 30 echo "✅ 现在访问 http://你的IP/"现在打开后就可以正常访问了!!!!
部署要点总结
- 使用国内镜像加速下载
- 正确配置端口避免冲突
- 首次启动需耐心等待初始化
- 通过日志快速定位问题
如遇其他问题,请提供具体错误日志以便分析解决。