自己练习云迁移与部署

发布时间:2026/11/4 12:14:42
自己练习云迁移与部署

要点:创建云主机+系统环境配置+装运行环境(Java/Python)

  1. 天翼云后台查看已分配资源:ECS / EIP / RDS / REDIS / VPC / 安全组
  2. EIP 先绑定 ECS 完成应用迁移
  3. 部署 Docker 容器化环境,下载 Java、Node、Maven 等镜像
  4. 之后把 EIP 解绑,重新绑定到 NAT 网关,实现多台 ECS 上网
    安装docker
    yum install -y docker

— 1.1 安装 java、maven、python 等环境 —

— 1.2 修改 docker 镜像源 —

备份原配置

cp /etc/containers/registries.conf /etc/containers/registries.conf.bak

覆盖写入(清掉旧死源)

cat > /etc/containers/registries.conf <<‘EOF’
unqualified-search-registries = [“docker.io”]

[[registry]]
prefix = “docker.io”
location = “docker.io”

[[registry.mirror]]
location = “docker.m.daocloud.io”

[[registry.mirror]]
location = “docker.1ms.run”
EOF

直接裸名字拉镜像,不带前缀 docker pull maven:3-eclipse-temurin-8-alpine

docker pull maven:3.8-jdk-8
docker pull eclipse-temurin:8-jre-alpine
docker pull node:16-alpine
docker pull python:3.9-slim


要点:改配置文件(数据库地址/OSS)→ Docker 重新打包部署 → 数据迁移

— 2.1 修改应用配置文件 —

java 项目路径:src/main/resources/application.yml

数据库地址改为 RDS 内网IP(如 192.168.0.32:3306),账号密码对应改

文件存储改为 OSS 类型,endpoint 换成公网地址,bucket 写文件夹名

— 2.2 编译镜像并部署 —
cd /root/member-system
docker build -t member-system:cloud .

注意:结尾要带 . ;目录下必须有 Dockerfile

改了参数就删容器重新打包

docker rm -f member-app

— 2.3 Dockerfile 内容(两阶段)—

阶段1:Maven 编译

FROM maven:3.8-jdk-8 AS build
WORKDIR /app
COPY pom.xml .
RUN mvn dependency:go-offline -q
COPY src ./src
RUN mvn package -DskipTests -q

阶段2:JRE 运行(temurin,openjdk已废弃)

FROM eclipse-temurin:8-jre-alpine
WORKDIR /app
COPY --from=build /app/target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT [“java”,“-jar”,“/app/app.jar”]

启动程序
docker run -d --name member-app -p 8080:8080 member-system:cloud


数据库迁移(导出→上传ECS→导入RDS)+ 文件迁移OSS + 页面验证
(本子任务以平台操作为主,核心命令为 mysqldump 导出、mysql 导入)

  1. mysqldump 导出本地数据库 → 上传至天翼云 ECS → 从 ECS 命令行导入 RDS
    源主机
    .\mysqldump.exe -uroot -p --databases member_db --add-drop-database > member_db.sql
    云主机
    mysql -h <RDS内网地址> -u <RDS账号> -p < /root/member_db.sql
  2. Xstorebrowser 工具用 AK/SK + endpoint 登录,把本地文件迁到 OSS
  3. 验证业务系统首页门店照片显示正常

(要开放的端口:数据库、redis)
2. 外网安全组:出方向不限;入方向只开业务端口+大模型API
(要开放的端口:大模型、SSH;OSS 桶策略放通)

  1. NAT 网关配置正确

==================================================

— 1.1 装 Docker(没装的情况下)—
yum install -y docker
systemctl start docker

— 1.2 docker 换国内镜像源 —
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<‘EOF’
{
“registry-mirrors”: [
“https://docker.xuanyuan.me”,
“https://docker.1ms.run”,
“https://docker.m.daocloud.io”
]
}
EOF

systemctl daemon-reload && systemctl restart docker
docker info | grep -A3 “Registry Mirrors”

出问题看 docker 日志

journalctl -u docker -n 15 --no-pager | grep -iE “unable|invalid|unknown|error”

— 1.3 下载 vLLM 镜像 —
docker pull vllm/vllm-openai:v0.9.2

— 1.4 下载权重文件(CT云 python 是 3.7,需先装 miniconda 用 3.9)—
cd /root
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh -b -p /data/miniconda3
/data/miniconda3/bin/pip install -U modelscope -i https://pypi.tuna.tsinghua.edu.cn/simple

后台下载权重(30GB 要跑一阵)

nohup /data/miniconda3/bin/modelscope download --model TeleAI/TeleChat2-7B-32K
–local_dir /root/models/TeleChat2-7B-32K > /root/ms.log 2>&1 &
tail -f /root/ms.log

— 1.5 下载完校验 —

目录里必须有:config.json、tokenizer 系列文件、多个 *.safetensors

ls -lh /root/models/TeleChat2-7B-32K

确认架构是 TeleChat2ForCausalLM(vLLM 能加载的关键证据)

grep -A1 ‘“architectures”’ /root/models/TeleChat2-7B-32K/config.json

期望输出:“architectures”: [“TeleChat2ForCausalLM”],

确认自带 chat_template

grep -m1 chat_template /root/models/TeleChat2-7B-32K/tokenizer_config.json

— 1.6 安装 nvidia-container-toolkit —

先检查装了没

rpm -qa | grep -i nvidia-container

① 写 USTC 源(先清掉旧 repo)

rm -f /etc/yum.repos.d/nvidia-container-toolkit.repo
cat > /etc/yum.repos.d/nvidia-container-toolkit.repo <<‘EOF’
[nvidia-container-toolkit]
name=nvidia-container-toolkit
baseurl=https://mirrors.ustc.edu.cn/libnvidia-container/stable/rpm/x86_64
repo_gpgcheck=0
gpgcheck=0
enabled=1
EOF

② 缓存

yum makecache --disablerepo=‘*’ --enablerepo=‘nvidia-container-toolkit’

③ 安装

yum install -y nvidia-container-toolkit --disablerepo=‘*’ --enablerepo=‘nvidia-container-toolkit’

④ 注册 runtime + 检查

nvidia-ctk runtime configure --runtime=docker
cat /etc/docker/daemon.json # mirrors 必须还在,多了 runtimes 段

⑤ 重启 docker

systemctl restart docker

⑥ 终极验证

docker run --rm --gpus all vllm/vllm-openai:v0.9.2 nvidia-smi

— 1.7 启动 vLLM 推理服务(端口18000,密钥entrant02)—
docker run -d
–name telechat-vllm
–restart=always
–gpus all
–shm-size=16g
-p 18000:18000
-v /root/models/TeleChat2-7B-32K:/models/TeleChat2-7B-32K
vllm/vllm-openai:v0.9.2
–model /models/TeleChat2-7B-32K
–served-model-name TeleChat-7B
–trust-remote-code
–dtype float16
–gpu-memory-utilization 0.90
–max-model-len 32768
–enable-auto-tool-choice
–tool-call-parser hermes
–api-key entrant02
–host 0.0.0.0
–port 18000

— 1.8 三次 curl 验证 —

验证① web服务响应状态正常(HTTP 200 OK)

curl -i -H “Authorization: Bearer entrant02” http://192.168.0.35:18000/v1/models

验证② 模型名称 + 推理结果返回正常(10Token以上)

curl -s -H “Authorization: Bearer entrant02” -H “Content-Type: application/json”
http://125.122.96.222:18000/v1/chat/completions
-d ‘{“model”:“TeleChat-7B”,“messages”:[{“role”:“user”,“content”:“请用三句话介绍你自己,并说明你能为企业提供哪些帮助。”}],“max_tokens”:256}’

验证③ 云专网调用(换专网地址28000端口)

curl -X POST http://192.168.0.35:28000/v1/chat/completions
-H “Content-Type: application/json”
-d ‘{“model”: “TeleChat-7B”, “messages”: [{“role”: “user”, “content”: “请介绍一下你自己”}], “max_tokens”: 256}’

— 1.9 配置网络策略 —


要点:无命令,纯客户端操作

  1. 电脑终端下载安装 TeleAgent,能正常启动并对话
  2. TeleAgent 里配置 GPU 云主机上的 TeleChat-7B API 服务
    (地址 http://GPU机IP:18000/v1,密钥 entrant02)
  3. 用该模型完成一次基础对话交互,返回正常即可

要点:部署 queue_mcp → TeleAgent 注册 MCP → 新建技能对话 → 告警发微信 + 计划任务

— 3.1 启动/关闭 MCP 程序 —

启动

nohup python3 queue_mcp.py > mcp.log 2>&1 &
sleep 2; tail -20 mcp.log

关闭

pkill -f queue_mcp.py 2>/dev/null; sleep 1

— 3.2 TeleAgent 工具里注册 MCP 的 JSON 配置 —
{
“mcpServers”: {
“store-queue-mcp”: {
“url”: “http://125.122.32.3:9100/mcp”,
“headers”: {
“Authorization”: “Bearer queue-mcp-2026”
}
}
}
}

— 3.3 技能提示词(新建任务里发)—


要点:两种方式(MCP / 裸REST接口),出两个Sheet的Excel日报

— 4.1 启动并测试报表 MCP —
nohup python3 report_mcp.py > report_mcp.log 2>&1 &

配置
{
“mcpServers”: {
“report-queue-mcp”: {
“url”: “http://125.122.32.3:9200/mcp”,
“headers”: {
“Authorization”: “Bearer report-token-2026”
}
}
}
}

测试 tools/list

curl -X POST http://127.0.0.1:9200/mcp -H “Content-Type: application/json” -d ‘{“jsonrpc”:“2.0”,“id”:1,“method”:“tools/list”,“params”:{}}’

测试 tools/call 取 2026-10-29 日报

curl -X POST http://127.0.0.1:9200/mcp -H “Content-Type: application/json” -d ‘{“jsonrpc”:“2.0”,“id”:2,“method”:“tools/call”,“params”:{“name”:“get_daily_report”,“arguments”:{“date”:“2026-10-29”}}}’

— 4.2 方式一:MCP 提示词 —
你是企业经营数据日报技能。
执行步骤:

  1. 调用 MCP 工具 get_daily_report 获取企业当日经营数据(不传参数默认今天;若当日无数据,传 date=2026-10-29 取有数据的日期)。
  2. 将数据绘制成 Excel 报表(.xlsx),包含两个工作表:
    • Sheet1「门店营收明细」:门店编号、门店名称、订单数、当日营收(元),按营收降序排列,末行加合计行。
    • Sheet2「企业营收汇总」:报告日期、总订单数、企业当日总营收(元)。
  3. 报表工整美观:表头加粗填色、金额列保留两位小数、合计行醒目。
  4. 完成后报告输出文件路径,并简要汇报各门店营收与企业当日总营收。

— 4.3 方式二:裸 REST 接口提示词 —
你是企业经营数据日报技能。
执行步骤:

  1. 访问云上业务系统报表接口 http://125.122.96.222:28080/api/report/daily 获取企业当日经营数据。
  2. 将数据绘制成 Excel 报表(.xlsx),包含两个工作表:
    • Sheet1「门店营收明细」:门店编号、门店名称、订单数、当日营收(元),按营收降序排列,末行加合计行。
    • Sheet2「企业营收汇总」:报告日期、总订单数、企业当日总营收(元)。
  3. 报表工整美观:表头加粗填色、金额列保留两位小数、合计行醒目。
  4. 完成后报告输出文件路径,并简要汇报各门店营收与企业当日总营收。

==================================================

==================================================
任务二:查资源→绑EIP→装环境→改配置→build镜像→迁移数据→配安全组+NAT
任务三:装docker→换源→pull vllm→miniconda→modelscope下载权重→校验→
nvidia-toolkit→docker run起服务→3次curl验证→→

补充vllm和多种部署情况下配置
一、到场第一步:形态盘点脚本

echo “=== 2. docker 侧有什么 ===”
docker images 2>/dev/null | grep -iE “vllm|telechat” || echo “无 docker 镜像”
docker ps -a 2>/dev/null | grep -iE “vllm|telechat” || echo “无运行中容器”

echo “=== 3. 裸装侧有什么 ===”
which vllm 2>/dev/null; pip3 show vllm 2>/dev/null | head -2 || echo “pip 无 vllm”
python3 -c “import vllm; print(‘vllm版本:’, vllm.version)” 2>/dev/null || echo “python 环境无 vllm”

echo “=== 4. conda 环境 ===”
conda env list 2>/dev/null || echo “无 conda”

echo “=== 5. 权重在哪 ===”
find / -maxdepth 5 -name “config.json” -path “TeleChat” 2>/dev/null | head -5

echo “=== 6. GPU ===”
nvidia-smi --query-gpu=name,memory.total,memory.used --format=csv
盘点结果与形态对应
盘点现象 该走哪个形态
有 vllm 镜像 + 找到权重目录 :docker run 启动
有 vllm 镜像、无权重 :先下载或解压权重
无镜像、只有 tar 包 形态 :docker load 离线导入
无 docker,pip/conda 里有 vllm 形态 :裸装启动
二、权重:五种到手方式
权重本质只有一种形态——一个文件夹,里面必须有 config.json、tokenizer 系列文件。差别只在"怎么拿到",拿到之后处理完全一致。

情况一 已预置在磁盘 直接能找到目录 不用动,记下绝对路径 常见位置 /root/models、/data、/models,用 find 找
情况二 tar 压缩包 存在 .tar.gz 或 .tar tar zxvf xxx.tar.gz -C /root/models/ 解压后可能多一层嵌套目录,挂载路径必须指到含 config.json 那一层
情况三 zip 压缩包 存在 *.zip unzip xxx.zip -d /root/models/ 中文文件名易乱码;未装 unzip 先 yum install -y unzip
情况四 git 仓库 目录里有 .git git lfs pull 只拉了指针文件时 safetensors 只有几百字节,必须补拉
情况五 命令行下载 以上都没有 modelscope download --model TeleAI/TeleChat2-7B-32K --local_dir /root/models/TeleChat2-7B-32K 系统 python 若是 2.7,必须先装 miniconda 用 3.9
权重到手后的统一校验(任何形式都要跑)
ls -lh <权重目录> | grep -E “config.json|safetensors|tokenizer”
du -sh <权重目录>
grep -A1 ‘“architectures”’ <权重目录>/config.json
grep -m1 chat_template <权重目录>/tokenizer_config.json
•第一条:关键文件是否齐全。
•第二条:期望输出 [“TeleChat2ForCausalLM”],这是 vLLM 能加载的决定性证据。
•第三条:确认自带 chat_template,否则对话格式会乱。

W5 下载权重的完整命令
cd /root
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh -b -p /data/miniconda3
/data/miniconda3/bin/pip install -U modelscope huggingface_hub -i https://pypi.tuna.tsinghua.edu.cn/simple

nohup /data/miniconda3/bin/modelscope download --model TeleAI/TeleChat2-7B-32K
–local_dir /root/models/TeleChat2-7B-32K > /root/ms.log 2>&1 &
tail -f /root/ms.log
三、vLLM:五种安装形式

一:官方 docker 镜像 docker images 里有 vllm/vllm-openai: docker run 全套参数 题面标准形态
二:离线 tar 镜像包 目录里存在几 GB 的 *.tar docker load -i 后按 V1 启动 内网无外网,比赛方给离线包
三: 私有仓库镜像 现场给了仓库地址与账号 docker login 后 docker pull 比赛方自建 harbor
四: pip 裸装 pip3 show vllm 有版本号 vllm serve 或 python3 -m 方式 无 docker 或已预装 python 环境
五: 预装 conda 环境 conda env list 有环境,激活后 import vllm 不报错 conda activate 后同 V4 比赛方把环境都备好了
一 / 二 / 三:docker 系列启动(三种到手方式,启动完全一样)
docker run -d --name telechat-vllm --restart=always --gpus all --shm-size=16g
-p 18000:18000
-v <权重绝对路径>:/models/TeleChat2-7B-32K
vllm/vllm-openai:<现场tag>
–model /models/TeleChat2-7B-32K
–served-model-name TeleChat-7B
–trust-remote-code --dtype float16
–gpu-memory-utilization 0.90 \
–max-model-len 32768
–enable-auto-tool-choice 、
–tool-call-parser hermes
–api-key entrant02
–host 0.0.0.0
–port 18000
二 离线包:先 docker load -i vllm-openai-v0.9.2.tar,再 docker images 确认实际 tag 名(可能是 latest)。

•若控制台出现 “Emulate Docker CLI using podman”,说明系统用 podman 冒充 docker,命令照常可用,不影响。
四 / 五:裸装启动(无 docker 时的主力打法)
先确认环境:
python3 --version
python3 -c “import vllm; print(vllm.version)”
python3 -c “import torch; print(torch.version, torch.cuda.is_available())”
•python 必须 3.9 以上,2.7 直接放弃,改用 conda 环境。
•torch.cuda.is_available() 必须为 True,否则环境里看不到显卡。
启动方式二选一(效果等价):
vllm serve /root/models/TeleChat2-7B-32K
–served-model-name TeleChat-7B
–trust-remote-code
–dtype float16
–gpu-memory-utilization 0.90
–max-model-len 32768
–api-key entrant02
–host 0.0.0.0
–port 18000 > vllm.log 2>&1 &

备用写法:老版本用 python3 -m 方式,效果完全等价 ----
python3 -m vllm.entrypoints.openai.api_server
–model /root/models/TeleChat2-7B-32K
–served-model-name TeleChat-7B
–trust-remote-code
–dtype float16
–api-key entrant02
–host 0.0.0.0
–port 18000 > vllm.log 2>&1 &
•第一种是 vLLM 新版命令,简洁;第二种是老版本写法,兼容性更好。
•启动后 tail -f vllm.log,看到 Uvicorn running on http://0.0.0.0:18000 即成功。
•五 用 conda 环境时,先 conda activate <环境名> 再执行上面的启动命令。
自装 vLLM 的命令( 需要时):
pip3 install vllm -i https://pypi.tuna.tsinghua.edu.cn/simple

pip 安装会连带拉 torch,体积数 GB,且要求 CUDA 驱动版本匹配;装完务必用上面的 torch.cuda.is_available() 验证。
四、三次 curl 验证(所有形态通用)
curl -i -H “Authorization: Bearer entrant02” http://<GPU机IP>:18000/v1/models
curl -s -H “Authorization: Bearer entrant02” -H “Content-Type: application/json”
http://<GPU机IP>:18000/v1/chat/completions
-d “{“model”:“TeleChat-7B”,“messages”:[{“role”:“user”,“content”:“请用三句话介绍你自己,并说明你能为企业提供哪些帮助。”}],“max_tokens”:256}”
curl -X POST http://<专网IP>:<专网端口>/v1/chat/completions
-H “Content-Type: application/json”
-d “{“model”:“TeleChat-7B”,“messages”:[{“role”:“user”,“content”:“请介绍一下你自己”}],“max_tokens”:256}”

五、报错预案速查
报错现象 成因 处置方法
Architecture TeleChat2ForCausalLM not found vLLM 版本低于 0.6.5,不识别该架构 更换更高版本镜像;确认已加 --trust-remote-code
no config.json / Invalid repository ID 权重路径不对 find / -maxdepth 5 -name config.json 找真实目录;docker -v 挂不存在的路径会自动建空目录,不报错但必然启动失败
CUDA out of memory 显存不足 --gpu-memory-utilization 从 0.90 降到 0.85;–max-model-len 从 32768 降到 8192
启动后 curl 一直超时 模型仍在加载,24G 卡加载 7B 约需数分钟 docker logs -f telechat-vllm,看到 Application startup complete 再验证
对话格式异常或乱码 缺 chat_template grep chat_template 确认;缺失则用 --chat-template 指定官方模板
port is already allocated 端口被上次失败的容器占用 docker rm -f telechat-vllm 后重起;或换端口并同步改 curl
vllm: command not found 未装成功或不在 PATH 改用 python3 -m vllm.entrypoints.openai.api_server 兜底
ImportError: libcudart.so torch 与 CUDA 驱动版本不匹配 装对应 cu 版本 torch;判断不清则改用 docker 形态
pip 安装卡死或极慢 python 2.7 或网络问题 先确认 python3 --version;pip 走清华源
Emulate Docker CLI using podman 系统用 podman 代替 docker 命令照常使用,不影响功能