Ubuntu 服务器 Dify 无法访问排查指南

背景

在 Ubuntu 服务器上,Dify(一个开源 AI 应用平台)无法通过 Web 访问,服务器重启后 SSH 和基本网络恢复,但 Dify 服务不可用。日志显示 Docker 服务配置错误(docker.service 有多个 ExecStart= 设置)、qwen3-32b.servicevllm.service 失败、内核 split lock detection 和 ACPI 错误等。本文档整理了排查和修复步骤,并包括 Docker 安装及 Dify 部署方法。

问题症状

  • Dify 无法通过 Web 访问:浏览器访问 http://<server_ip>:3000http://<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-settingService has more than one ExecStart= setting
    • docker.socket 失败,日志显示 Socket service docker.service not loaded, refusing
  • 其他问题

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

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

  1. 更新系统

    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
    
    
    • 配置数据库、Redis 和端口,例如:

      DB_HOST=postgres
      DB_PORT=5432
      REDIS_HOST=redis
      REDIS_PORT=6379
      WEB_PORT=3000
      
      
  • 确保 docker-compose.yml 包含必要服务(dify-apidify-webpostgresredis 等)。

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

下一步

如果问题未解决,提供以下信息:

  1. sudo journalctl -u docker 的完整输出。
  2. /root/dify/docker/docker-compose.yml.env 的内容(隐藏敏感信息)。
  3. docker logs <container_name> 的输出。
  4. 浏览器访问 Dify 的错误信息(如 502、504)。
  5. nvidia-smifree -m 的输出。

备注

  • 定期备份 /var/log 和 Dify 配置,以防重启丢失日志。
  • 监控系统资源,优化 qwen3-32bvllm 服务配置,避免资源竞争。
  • 更新 BIOS 和 NVIDIA 驱动以解决 ACPI 和 GPU 问题。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容