Docker-compose 部署vllm-openai+deepseek+open-webui

services:

  vllm-server:
    container_name: vllm-server
    image: vllm/vllm-openai:latest
    restart: unless-stopped
    ports:
      - "8000:8000"
    volumes:
      - ./vllm/models:/models
    command: [
      "--model", "/models/DeepSeek-R1-Distill-Qwen-7B",
      "--served-model-name", "DeepSeek-R1-Distill-Qwen-7B",
      "--tensor-parallel-size", "1",
      "--dtype", "float16",
      "--max-model-len", "2048",
      "--max-num-seqs", "4",
      "--disable-log-stats",
      "--gpu-memory-utilization", "0.80",
      "--host", "0.0.0.0",
      "--port", "8000",
      "--api-key", "Pass@w0rd",
      "--trust-remote-code",
      "--enforce-eager"
    ]
    ipc: host
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
    networks:
      - ai-network

  openwebui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: openwebui
    restart: unless-stopped
    ports:
      - "8080:8080"
    volumes:
      - ./openwebui/data:/app/backend/data
    environment:
      - OLLAMA_BASE_URL=http://vllm-server:8000
      - OPENAI_API_BASE_URL=http://vllm-server:8000/v1
      - DEFAULT_MODEL=DeepSeek-R1-Distill-Qwen-7B
      - OPENAI_API_KEY=Pass@w0rd
      - WEBUI_SECRET_KEY=Pass@w0rd
      - DEFAULT_USER_ROLE=admin
      - ENABLE_SIGNUP=true
      - DISABLE_FOLLOW_UPS=true
      - DISABLE_TITLE_GENERATION=true
      - DISABLE_CHAT_TAGS=true
    depends_on:
      - vllm-server
    networks:
      - ai-network

networks:
   ai-network:
     driver: bridge

验证步骤

1. 检查 vLLM 服务

# 查看 vLLM 日志
docker-compose logs vllm-server

# 测试 vLLM API
curl -s http://localhost:8000/v1/models -H "Authorization: Bearer Pass@w0rd"

2. 检查 OpenWebUI 服务

# 查看 OpenWebUI 日志
docker-compose logs openwebui

# 访问 Web 界面
# http://localhost:8063

常见问题排查

问题1:模型文件不存在

症状: vLLM 启动失败,提示模型文件不存在
解决: 确保模型文件位于 ./vllm/models/DeepSeek-R1-Distill-Qwen-7B/ 目录下

问题2:网络连接失败

症状: OpenWebUI 无法连接到 vLLM 服务
解决: 检查容器网络,确保使用容器名称而非 IP 地址

问题3:API 密钥错误

症状: 认证失败
解决: 确保 API 密钥 Pass@w0rd 在两端配置一致

问题4:GPU 资源不足

症状: vLLM 启动失败或性能差
解决: 调整 --gpu-memory-utilization 参数

优化项:

1. 禁用后台任务

添加了以下环境变量来禁用导致 400 错误的后台任务:

- DISABLE_FOLLOW_UPS=true
- DISABLE_TITLE_GENERATION=true
- DISABLE_CHAT_TAGS=true

2. 优化 vLLM 配置

  • 增加 --max-model-len 到 2048
  • 增加 --max-num-seqs 到 4
  • 添加 --trust-remote-code--enforce-eager
  • 优化 GPU 使用率到 0.80

3. 添加 OpenWebUI 配置

  • 添加 WEBUI_SECRET_KEY
  • 设置 DEFAULT_USER_ROLE=admin
  • 启用 ENABLE_SIGNUP=true

验证修复结果

  1. 访问 OpenWebUI: http://localhost:8063
  2. 测试基本聊天功能
  3. 检查是否还有 400 错误

调试命令

# 进入 vLLM 容器
docker exec -it vllm-server bash

# 进入 OpenWebUI 容器
posted @ 2025-07-17 17:52  一毛丶丶  阅读(780)  评论(0)    收藏  举报