通过vLLM 搭建自己的API服务(内置国内top模型)

OnethingAI

发布于:2025-06-12

一,创建vLLM 实例

二,选择需要启动的内置模型(模型文件已内置,需要补充meta)启动服务

目前已经内置两套模型:deepseek 系列蒸馏模型,Qwen QwQ和VL的模型

Deepseek的模型路径在(/app/deepseek)

Qwen的模型路径在(/root/.cache/modelscope/hub/models/Qwen)

选中需要的模型,补全meta信息,以Qwen/QwQ-32B为例

cd /root/.cache/modelscope/hub/models/Qwen modelscope download --model Qwen/QwQ-32B --exclude *.safetensors \ --local_dir ./QwQ-32B 

deepseek 模型操作如下:

cd /app/deepseek; modelscope download --model deepseek-ai/DeepSeek-R1-Distill-Qwen-14B \ --exclude *.safetensors --local_dir ./DeepSeek-R1-Distill-Qwen-14B 

补全信息如图

启动模型

vllm serve /root/.cache/modelscope/hub/models/Qwen/QwQ-32B \ --host 0.0.0.0 --port 6006 --served-model-name Qwen/QwQ-32B

加载过程如图

三,配置公网访问的能力

验证是否可以访问

curl -v http://your_url_here/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen/QwQ-32B",
  "messages": [
    {"role": "user", "content": "C++ 写一个快排"}
  ],
  "stream": true
}'

启动成功后运行如图所示

四,增加nginx简单的鉴权

apt update
apt install nginx -y

安装完成如下

配置nginx 反向代理到6006:

vim /etc/nginx/sites-available/default

修改内容如下:

# 定义反向代理的上游服务
upstream local_service {
    server 127.0.0.1:6006;
}

# 默认服务器配置
server {
    listen 80 default_server;
    listen [::]:80 default_server;

    server_name _;  # 匹配所有未定义的域名

    # 反向代理到本地 6006 端口
    location / {
        proxy_pass http://local_service;  # 或直接使用 http://127.0.0.1:6006
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # 可选:记录访问日志
    access_log /var/log/nginx/default_access.log;
    error_log /var/log/nginx/default_error.log;
}

配置后启动shell 上执行nginx,启动nginx进程

nginx

新增一个公网配置80端口,配置方法参见第三章节

让nginx 支持简单的权限校验:

server {
    listen 80 default_server;
    server_name _;

    location / {
        # 检查 Authorization 头是否存在且格式正确
        if ($http_authorization = "") {
            return 401 "Unauthorized: Missing Token";
        }

        # 验证 Bearer Token(替换 YOUR_EXPECTED_TOKEN 为实际值)
        if ($http_authorization !~* "Bearer YOUR_EXPECTED_TOKEN") {
            return 403 "Forbidden: Invalid Token";
        }

        # 反向代理到本地服务
        proxy_pass http://127.0.0.1:6006;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Authorization $http_authorization;  # 传递 Token 到后端
    }

其他更复杂的使用场景(比如和自己的后台打通,支持动态的token),参考nginx 官方文档

核心架构:

提交反馈