背景
在 Ubuntu 服务器上,Dify(一个开源 AI 应用平台)无法通过 Web 访问,服务器重启后 SSH 和基本网络恢复,但 Dify 服务不可用。日志显示 Docker 服务配置错误(docker.service 有多个 ExecStart= 设置)、qwen3-32b.service 和 vllm.service 失败、内核 split lock detection 和 ACPI 错误等。本文档整理了排查和修复步骤,并包括 Docker 安装及 Dify 部署方法。
问题症状
Dify 无法通过 Web 访问:浏览器访问
http://<server_ip>:3000或http://<server_ip>失败。-
Docker 服务未运行:
-
docker ps -a报错:Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? -
systemctl status docker显示bad-setting和Service has more than one ExecStart= setting。 -
docker.socket失败,日志显示Socket service docker.service not loaded, refusing。
-
-
其他问题:
-
qwen3-32b.service和vllm.service多次失败,可能与 Dify 的 AI 模型推理相关。 - 内核
split lock detection导致系统崩溃,影响稳定性。 - ACPI 错误可能影响 GPU 初始化。
-
排查步骤
1. 修复 Docker 服务配置
Docker 服务未运行是 Dify 无法启动的主要原因,需修复 docker.service 配置。
a. 检查 Docker 服务文件
-
查看默认服务文件:
cat /lib/systemd/system/docker.service-
确认
ExecStart=设置,通常为:ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
-
-
查看自定义配置:
cat /etc/systemd/system/docker.service.d/override.conf-
示例错误配置:
[Service] ExecStart=/usr/bin/dockerd --config-file=/etc/docker/daemon.json -D -H fd:// 问题:未清除默认
ExecStart=,导致冲突。
-
b. 修复 override.conf
-
编辑
override.conf:sudo nano /etc/systemd/system/docker.service.d/override.conf-
更新为:
[Service] ExecStart= ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock 移除不必要的
--config-file或-D参数。
-
-
或者删除自定义配置:
sudo rm -rf /etc/systemd/system/docker.service.d/override.conf
c. 重新加载并启动 Docker
sudo systemctl daemon-reload
sudo systemctl restart docker.socket
sudo systemctl restart docker
sudo systemctl status docker
-
验证 Docker 运行:
docker ps -a -
如果失败,查看详细日志:
sudo journalctl -u docker
d. 检查 Docker 配置文件
-
查看
/etc/docker/daemon.json:cat /etc/docker/daemon.json-
示例正确配置:
{ "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" } } -
如果文件有错误,备份并删除:
sudo mv /etc/docker/daemon.json /etc/docker/daemon.json.bak sudo systemctl restart docker
-
e. 重新安装 Docker(如果必要)
-
卸载现有 Docker:
sudo apt purge docker.io docker-ce docker-ce-cli containerd sudo rm -rf /var/lib/docker -
安装 Docker:
sudo apt update sudo apt install docker.io sudo systemctl enable docker sudo systemctl start docker -
验证:
docker --version docker ps -a
2. 启动 Dify
Dify 通常通过 Docker Compose 部署,需确保 Docker 正常后启动。
a. 确认 Docker Compose 文件
-
检查目录:
ls /root/dify/docker/ cat /root/dify/docker/docker-compose.yml- 确保包含
dify-api、dify-web、dify-worker等服务。
- 确保包含
-
检查
.env文件:cat /root/dify/docker/.env-
确认数据库、Redis 和端口配置正确,例如:
DB_HOST=postgres REDIS_HOST=redis WEB_PORT=3000
-
b. 启动 Dify
cd /root/dify/docker
docker compose up -d
-
检查容器状态:
docker ps -a -
如果容器退出,查看日志:
docker logs <container_name>
c. 检查 Web 访问
-
确认端口监听:
sudo netstat -tuln | grep '80\|3000' -
本地测试:
curl http://localhost:3000 -
检查防火墙:
sudo ufw status sudo ufw allow 80 sudo ufw allow 3000 -
远程访问:
- 浏览器访问
http://<server_ip>:3000或http://<server_ip>。 - 云服务器需检查安全组规则,允许 80/3000 端口。
- 浏览器访问
3. 检查 Dify 依赖
Dify 依赖数据库、Redis 和可能的 AI 模型服务。
a. 检查数据库和 Redis
docker ps -a | grep -E 'postgres|redis'
docker logs <postgres_container_name>
docker logs <redis_container_name>
b. 检查 AI 服务
-
如果 Dify 使用
qwen3-32b或vllm,检查日志:sudo journalctl -u qwen3-32b.service sudo journalctl -u vllm.service -
检查 GPU:
nvidia-smi-
更新 NVIDIA 驱动:
sudo apt install nvidia-driver-<latest> nvidia-dkms-<latest>
-
4. 处理系统稳定性问题
-
Split Lock 检测:
sudo nano /etc/default/grub # 添加 split_lock_detect=warn 到 GRUB_CMDLINE_LINUX_DEFAULT sudo update-grub sudo reboot -
ACPI 错误:
更新 BIOS/固件。
-
临时禁用 ACPI(测试用):
sudo nano /etc/default/grub # 添加 acpi=off sudo update-grub sudo reboot
5. 检查资源
-
内存:
free -m-
增加 swap(如果不足):
sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
-
-
磁盘:
df -h sudo smartctl -a /dev/nvme0n1
6. 安装 Docker
如果 Docker 未安装或需重新安装,按照以下步骤操作:
-
更新系统:
sudo apt update sudo apt upgrade -
安装 Docker:
sudo apt install docker.io -
启用并启动 Docker:
sudo systemctl enable docker sudo systemctl start docker -
安装 Docker Compose:
sudo apt install docker-compose-plugin-
验证:
docker compose version
-
-
验证安装:
docker --version docker compose version docker ps -a
7. 下载并安装 Dify
Dify 可通过 Git 克隆并使用 Docker Compose 部署。
a. 下载 Dify
cd /root
git clone https://github.com/langgenius/dify.git
cd dify/docker
b. 配置 Dify
-
复制示例配置文件:
cp .env.example .env -
编辑
.env:nano .env-
配置数据库、Redis 和端口,例如:
DB_HOST=postgres DB_PORT=5432 REDIS_HOST=redis REDIS_PORT=6379 WEB_PORT=3000
-
确保
docker-compose.yml包含必要服务(dify-api、dify-web、postgres、redis等)。
c. 启动 Dify
cd /root/dify/docker
docker compose up -d
等待容器启动(可能需要几分钟)。
-
检查状态:
docker ps -a
d. 验证 Dify
-
本地访问:
curl http://localhost:3000 -
远程访问:
- 浏览器访问
http://<server_ip>:3000。 - 确保防火墙和安全组允许 80/3000 端口。
- 浏览器访问
下一步
如果问题未解决,提供以下信息:
-
sudo journalctl -u docker的完整输出。 -
/root/dify/docker/docker-compose.yml和.env的内容(隐藏敏感信息)。 -
docker logs <container_name>的输出。 - 浏览器访问 Dify 的错误信息(如 502、504)。
-
nvidia-smi和free -m的输出。
备注
- 定期备份
/var/log和 Dify 配置,以防重启丢失日志。 - 监控系统资源,优化
qwen3-32b和vllm服务配置,避免资源竞争。 - 更新 BIOS 和 NVIDIA 驱动以解决 ACPI 和 GPU 问题。