背景
在 Ubuntu 服務(wù)器上,Dify(一個開源 AI 應(yīng)用平臺)無法通過 Web 訪問,服務(wù)器重啟后 SSH 和基本網(wǎng)絡(luò)恢復,但 Dify 服務(wù)不可用。日志顯示 Docker 服務(wù)配置錯誤(docker.service 有多個 ExecStart= 設(shè)置)、qwen3-32b.service 和 vllm.service 失敗、內(nèi)核 split lock detection 和 ACPI 錯誤等。本文檔整理了排查和修復步驟,并包括 Docker 安裝及 Dify 部署方法。
問題癥狀
Dify 無法通過 Web 訪問:瀏覽器訪問
http://<server_ip>:3000或http://<server_ip>失敗。-
Docker 服務(wù)未運行:
-
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 模型推理相關(guān)。 - 內(nèi)核
split lock detection導致系統(tǒng)崩潰,影響穩(wěn)定性。 - ACPI 錯誤可能影響 GPU 初始化。
-
排查步驟
1. 修復 Docker 服務(wù)配置
Docker 服務(wù)未運行是 Dify 無法啟動的主要原因,需修復 docker.service 配置。
a. 檢查 Docker 服務(wù)文件
-
查看默認服務(wù)文件:
cat /lib/systemd/system/docker.service-
確認
ExecStart=設(shè)置,通常為: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參數(shù)。
-
-
或者刪除自定義配置:
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(如果必要)
-
卸載現(xiàn)有 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等服務(wù)。
- 確保包含
-
檢查
.env文件:cat /root/dify/docker/.env-
確認數(shù)據(jù)庫、Redis 和端口配置正確,例如:
DB_HOST=postgres REDIS_HOST=redis WEB_PORT=3000
-
b. 啟動 Dify
cd /root/dify/docker
docker compose up -d
-
檢查容器狀態(tài):
docker ps -a -
如果容器退出,查看日志:
docker logs <container_name>
c. 檢查 Web 訪問
-
確認端口監(jiān)聽:
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>。 - 云服務(wù)器需檢查安全組規(guī)則,允許 80/3000 端口。
- 瀏覽器訪問
3. 檢查 Dify 依賴
Dify 依賴數(shù)據(jù)庫、Redis 和可能的 AI 模型服務(wù)。
a. 檢查數(shù)據(jù)庫和 Redis
docker ps -a | grep -E 'postgres|redis'
docker logs <postgres_container_name>
docker logs <redis_container_name>
b. 檢查 AI 服務(wù)
-
如果 Dify 使用
qwen3-32b或vllm,檢查日志:sudo journalctl -u qwen3-32b.service sudo journalctl -u vllm.service -
檢查 GPU:
nvidia-smi-
更新 NVIDIA 驅(qū)動:
sudo apt install nvidia-driver-<latest> nvidia-dkms-<latest>
-
4. 處理系統(tǒng)穩(wěn)定性問題
-
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. 檢查資源
-
內(nèi)存:
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 未安裝或需重新安裝,按照以下步驟操作:
-
更新系統(tǒng):
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-
配置數(shù)據(jù)庫、Redis 和端口,例如:
DB_HOST=postgres DB_PORT=5432 REDIS_HOST=redis REDIS_PORT=6379 WEB_PORT=3000
-
確保
docker-compose.yml包含必要服務(wù)(dify-api、dify-web、postgres、redis等)。
c. 啟動 Dify
cd /root/dify/docker
docker compose up -d
等待容器啟動(可能需要幾分鐘)。
-
檢查狀態(tài):
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的內(nèi)容(隱藏敏感信息)。 -
docker logs <container_name>的輸出。 - 瀏覽器訪問 Dify 的錯誤信息(如 502、504)。
-
nvidia-smi和free -m的輸出。
備注
- 定期備份
/var/log和 Dify 配置,以防重啟丟失日志。 - 監(jiān)控系統(tǒng)資源,優(yōu)化
qwen3-32b和vllm服務(wù)配置,避免資源競爭。 - 更新 BIOS 和 NVIDIA 驅(qū)動以解決 ACPI 和 GPU 問題。