Ubuntu 服務(wù)器 Dify 無法訪問排查指南

背景

在 Ubuntu 服務(wù)器上,Dify(一個開源 AI 應(yīng)用平臺)無法通過 Web 訪問,服務(wù)器重啟后 SSH 和基本網(wǎng)絡(luò)恢復,但 Dify 服務(wù)不可用。日志顯示 Docker 服務(wù)配置錯誤(docker.service 有多個 ExecStart= 設(shè)置)、qwen3-32b.servicevllm.service 失敗、內(nèi)核 split lock detection 和 ACPI 錯誤等。本文檔整理了排查和修復步驟,并包括 Docker 安裝及 Dify 部署方法。

問題癥狀

  • Dify 無法通過 Web 訪問:瀏覽器訪問 http://<server_ip>:3000http://<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-settingService has more than one ExecStart= setting
    • docker.socket 失敗,日志顯示 Socket service docker.service not loaded, refusing。
  • 其他問題

    • qwen3-32b.servicevllm.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-apidify-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>:3000http://<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-32bvllm,檢查日志:

    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 未安裝或需重新安裝,按照以下步驟操作:

  1. 更新系統(tǒng)

    sudo apt update
    sudo apt upgrade
    
    
  2. 安裝 Docker

    sudo apt install docker.io
    
    
  3. 啟用并啟動 Docker

    sudo systemctl enable docker
    sudo systemctl start docker
    
    
  4. 安裝 Docker Compose

    sudo apt install docker-compose-plugin
    
    
    • 驗證:

      docker compose version
      
      
  5. 驗證安裝

    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-apidify-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 端口。

下一步

如果問題未解決,提供以下信息:

  1. sudo journalctl -u docker 的完整輸出。
  2. /root/dify/docker/docker-compose.yml.env 的內(nèi)容(隱藏敏感信息)。
  3. docker logs <container_name> 的輸出。
  4. 瀏覽器訪問 Dify 的錯誤信息(如 502、504)。
  5. nvidia-smifree -m 的輸出。

備注

  • 定期備份 /var/log 和 Dify 配置,以防重啟丟失日志。
  • 監(jiān)控系統(tǒng)資源,優(yōu)化 qwen3-32bvllm 服務(wù)配置,避免資源競爭。
  • 更新 BIOS 和 NVIDIA 驅(qū)動以解決 ACPI 和 GPU 問題。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容