13、本地LLM运维方式

  1. 你的LLM服务核心固定信息
  2. 一、后台启动 LLM 服务(推荐唯一方式)
  3. 二、查看日志(3种用法,覆盖所有场景)
    1. 1. 实时滚动查看(看模型加载进度、报错、运行状态)
    2. 2. 查看最后50行日志(快速检查是否启动完成)
    3. 3. 查看完整日志(排查历史问题)
  4. 三、检查服务是否正常运行(双验证,100%准确)
    1. 方法1:检查 vLLM 进程(服务本体)
    2. 方法2:检查 8001 端口(监听状态)
  5. 四、安全关闭 LLM 服务(绝对不暴力杀进程)
    1. 1. 先找到 LLM 服务的 PID(进程号)
    2. 2. 安全关闭服务
    3. 3. 验证是否关闭成功
  6. 五、日常维护一键命令(汇总,直接用)
  7. 六、关键避坑提醒(针对你的容器环境)
  8. 七、快速故障排查
  9. 六、大模型内网转公网HTTPS安全接入 配置笔记
    1. 整体架构
    2. 一、公网云服务器配置(ubuntu@VM-0-10-ubuntu)
      1. 1. 域名解析
      2. 2. SSL证书申请
      3. 3. Nginx 独立站点配置
      4. 4. 解决Nginx域名冲突
      5. 5. 安全组/防火墙规则
    3. 二、内网模型容器配置(root@d58125c354a4)
      1. 1. vLLM 启动命令(任意路径可执行)
      2. 2. 内网容器免密登录云服务器
      3. 3. 永久反向隧道(断线自动重连)
    4. 三、连通性测试命令
      1. 1. 云服务器本地测试隧道
      2. 2. 公网接口测试
    5. 四、接入调用配置
      1. 基础信息
      2. Python 调用示例
    6. 五、安全强制规范
    7. 六、日常运维常用命令

你的LLM服务核心固定信息

  • 启动脚本:/root/Documents/code/python/scripts/serve_qwen3_32b.sh
  • 运行端口:8001
  • 运行显卡:CUDA_VISIBLE_DEVICES=0
  • 服务类型:vLLM 驱动的 Qwen3-32B 大模型
pkill -f "vllm serve"
ps aux | grep vllm | grep -v grep

CLASSIFY_MODE=1 \
MAX_MODEL_LEN=4096 \
CUDA_VISIBLE_DEVICES=0 \
PORT=8001 \
nohup /root/Documents/code/python/scripts/serve_qwen3_32b.sh > llm.log 2>&1 &
cd /root/Documents/code/python/scripts/ && CLASSIFY_MODE=1 MAX_MODEL_LEN=4096 CUDA_VISIBLE_DEVICES=0 PORT=8001 nohup ./serve_qwen3_32b.sh > llm.log 2>&1 &

一、后台启动 LLM 服务(推荐唯一方式)

不占用终端、关闭连接不停止、容器内100%稳定

# 进入脚本目录(可选,更稳定)
cd /root/Documents/code/python/scripts/

# 后台启动,日志写入 llm_qwen3.log 文件
CUDA_VISIBLE_DEVICES=0 PORT=8001 nohup ./serve_qwen3_32b.sh > llm_qwen3.log 2>&1 &

执行后直接回车即可,服务已后台运行。


二、查看日志(3种用法,覆盖所有场景)

日志文件:llm_qwen3.log(和启动脚本同目录)

1. 实时滚动查看(看模型加载进度、报错、运行状态)

tail -f llm_qwen3.log

退出查看:按 Ctrl + C

2. 查看最后50行日志(快速检查是否启动完成)

tail -n 50 llm_qwen3.log

3. 查看完整日志(排查历史问题)

cat llm_qwen3.log

三、检查服务是否正常运行(双验证,100%准确)

方法1:检查 vLLM 进程(服务本体)

ps aux | grep vllm | grep -v grep

有输出 = 服务在运行
无输出 = 服务已关闭/启动失败

方法2:检查 8001 端口(监听状态)

netstat -tuln | grep 8001

✅ 看到 0.0.0.0:8001 = 端口正常监听,同事可访问
❌ 无输出 = 端口未开放,服务异常


四、安全关闭 LLM 服务(绝对不暴力杀进程)

分两步,优雅关闭,保护模型和显卡:

1. 先找到 LLM 服务的 PID(进程号)

ps aux | grep vllm | grep -v grep

找到第二列的数字,就是 PID(例如 57879

2. 安全关闭服务

# 替换为你的实际PID
kill 你的PID

3. 验证是否关闭成功

ps aux | grep vllm | grep -v grep

无输出 = 关闭完成

pkill -f "vllm serve"

五、日常维护一键命令(汇总,直接用)

操作 命令
后台启动 cd /root/Documents/code/python/scripts/ && CUDA_VISIBLE_DEVICES=0 PORT=8001 nohup ./serve_qwen3_32b.sh > llm_qwen3.log 2>&1 &
实时看日志 tail -f /root/Documents/code/python/scripts/llm_qwen3.log
检查运行状态 `ps aux
检查端口 `netstat -tuln
安全关闭 先查PID → kill PID

六、关键避坑提醒(针对你的容器环境)

  1. 绝对不要用 pkill -f vllm:暴力杀死会导致显卡占用不释放、模型缓存异常
  2. 启动后必须等日志出现 Uvicorn running on http://0.0.0.0:8001:才算完全就绪
  3. 日志是排查唯一依据:启动失败、同事连不上,第一时间看日志
  4. 和SSH服务完全隔离:这套操作只动LLM,不会影响你的SSH连接(再也不会把自己踢掉线)

七、快速故障排查

  1. 端口8001被占用:先关闭旧LLM服务,再重新启动
  2. 模型加载失败:看日志,大概率是显存不足/模型文件损坏
  3. 同事访问失败:确认你的LLM监听 0.0.0.0:8001 + SSH端口转发已开启

六、大模型内网转公网HTTPS安全接入 配置笔记

整体架构

内网容器 vLLM:8001 
       ↓ Autossh 加密反向隧道
公网云服务器 127.0.0.1:18001
       ↓ 独立Nginx + HTTPS + 密钥鉴权
公网统一入口:https://llm.litearch.cn/v1

核心规则:

  • 公网只开放 80、443、22严禁放行 8001/18001
  • 子域名 llm.litearch.cn 独立Nginx配置,不与博客混用
  • 博客GitHub Action自动构建不影响LLM接口配置

一、公网云服务器配置(ubuntu@VM-0-10-ubuntu)

1. 域名解析

域名:litearch.cn
新增A记录:

  • 主机记录:llm
  • 解析地址:云服务器公网IP
  • 已备案子域名无需额外备案

2. SSL证书申请

sudo certbot --nginx -d llm.litearch.cn

证书自动续期,无需手动维护。

3. Nginx 独立站点配置

配置文件路径:/etc/nginx/sites-available/llm-service

server {
    listen 443 ssl;
    server_name llm.litearch.cn;

    ssl_certificate /etc/letsencrypt/live/llm.litearch.cn/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/llm.litearch.cn/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;

    # 接口访问鉴权密钥
    if ($http_authorization != "Bearer LITEARCH_LLM_2026_SAFE_KEY") {
        return 401;
    }

    location / {
        proxy_pass http://127.0.0.1:18001;
        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;

        proxy_connect_timeout 60s;
        proxy_read_timeout 120s;
    }
}

server {
    listen 80;
    server_name llm.litearch.cn;
    return 301 https://$host$request_uri;
}

启用配置:

sudo ln -s /etc/nginx/sites-available/llm-service /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

4. 解决Nginx域名冲突

清理 litearch.conf 中所有 llm.litearch.cn 多余server块,只保留主博客域名配置,避免端口域名冲突。

5. 安全组/防火墙规则

仅放行:

  • 22 :SSH运维
  • 80 :HTTP证书验证、自动跳转
  • 443 :HTTPS公网接口
    禁止放行:18001、8001

二、内网模型容器配置(root@d58125c354a4)

1. vLLM 启动命令(任意路径可执行)

CUDA_VISIBLE_DEVICES=0 PORT=8001 /root/Documents/code/python/scripts/serve_qwen3_32b.sh

服务监听:127.0.0.1:8001

2. 内网容器免密登录云服务器

# 生成密钥
ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519
# 推送公钥到云服务器免密
ssh-copy-id -i ~/.ssh/id_ed25519.pub ubuntu@llm.litearch.cn

3. 永久反向隧道(断线自动重连)

# 安装工具
apt install autossh -y
# 启动反向隧道:内网8001 → 云机本地18001
autossh -M 0 -N -R 127.0.0.1:18001:127.0.0.1:8001 ubuntu@llm.litearch.cn

关闭旧隧道:

pkill -f autossh

三、连通性测试命令

1. 云服务器本地测试隧道

curl http://127.0.0.1:18001/v1/models

2. 公网接口测试

curl -X POST https://llm.litearch.cn/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer LITEARCH_LLM_2026_SAFE_KEY" \
  -d '{
    "model": "Qwen/Qwen3-32B",
    "messages": [{"role": "user", "content": "你好"}]
  }'

四、接入调用配置

基础信息

  • 接口地址:https://llm.litearch.cn/v1
  • 模型名称:Qwen/Qwen3-32B
  • API Key:EMPTY

Python 调用示例

from openai import OpenAI

client = OpenAI(
    base_url="https://llm.litearch.cn/v1",
    api_key="EMPTY"
)

response = client.chat.completions.create(
    model="Qwen/Qwen3-32B",
    messages=[{"role": "user", "content": "你好"}]
)
print(response.choices[0].message.content)

五、安全强制规范

  1. 绝不对外放行 18001/8001 端口,只走443 HTTPS
  2. 所有公网接口必须加 Bearer 密钥鉴权
  3. 同事仅接口调用,无云服务器/内网服务器SSH账号权限
  4. 子域名独立Nginx配置,不混入博客配置,避免被GitHub Action覆盖
  5. SSH禁用密码登录、改端口、仅密钥登录,防爆破

六、日常运维常用命令

  1. 重启LLM服务(内网服务器端):CUDA_VISIBLE_DEVICES=0 PORT=8001 /root/Documents/code/python/scripts/serve_qwen3_32b.sh
  2. 重启隧道(云服务端):pkill -f autossh && autossh -M 0 -N -R 127.0.0.1:18001:127.0.0.1:8001 ubuntu@llm.litearch.cn
  3. Nginx检查重载(云服务端):sudo nginx -t && sudo systemctl reload nginx
  4. 查看隧道进程(云服务端):ps aux | grep autossh

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 kipleyarch@gmail.com
Archive PDF预览 PPTX Obsidian