怎么把 AI 工作流从本地部署迁移到云端?
照着做完,你能把本地 Docker Compose 跑起来的 AI 工作流(模型服务 + 编排服务 + 向量库)完整搬到云服务器上,并且用域名和 HTTPS 对外提供服务。
下面这套流程基于一个具体场景:本地一台带 RTX 4090 的机器,用 Docker Compose 跑三个容器——ollama(11434 端口)、自己的 FastAPI 编排服务(8000 端口)、n8n(5678 端口),向量数据存在 pgvector 容器里。云端目标是一台阿里云 ECS(GPU 机型选 ecs.gn7i-c8g1.2xlarge,A10 24G;如果改用托管模型 API,选 4 核 8G 的通用型就够)。
第一步:盘点本地依赖,生成迁移清单
这一步要把「本地到底跑了什么」变成一张纸面清单,后面每一步都靠它对照。
docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Ports}}"
docker compose config > local-compose-resolved.yaml
docker volume ls
把三样东西记下来:镜像名和 tag(别用 latest,改成 myapp:1.0 这种确定版本)、每个容器挂载的宿主机目录、以及 .env 里所有环境变量。local-compose-resolved.yaml 是 Compose 展开变量后的完整配置,迁移时以它为准,不要以你手写的 docker-compose.yml 为准。
注意:如果你本地是 M 系列 Mac 或 ARM 服务器,镜像架构是 arm64,直接搬到 x86 的 ECS 上会报
exec format error。迁移前用docker build --platform linux/amd64 -t myapp:1.0 .重新构建一次。
第二步:决定模型层怎么上云
这一步决定你后面买什么机器,是整件事里最贵的一个选择。
三条路:一是原样搬 ollama 到 GPU 云服务器,改动最小但按月付 GPU 钱;二是把 ollama 换成托管 API,比如阿里云百炼的 qwen-plus 或 DeepSeek 官方 API,编排服务里只改 OLLAMA_HOST 这类配置项,机器成本立刻降到十分之一;三是混合,小模型本地跑、大模型走 API。对绝大多数工作流,第二条性价比最高,除非你有数据不能出内网的要求。
如果走 API 路线,把代码里所有硬编码的 http://localhost:11434/api/generate 换成读环境变量 LLM_BASE_URL,云端直接填 https://dashscope.aliyuncs.com/compatible-mode/v1。
第三步:买服务器并放行端口
这一步拿到一台能 SSH 登录、端口开好的云主机。
在阿里云控制台:实例与镜像 → 实例 → 创建实例 → 地域选离你用户近的(华东1杭州),镜像选 Ubuntu 22.04 64位,勾选「分配公网 IPv4」。创建完成后进「安全组」→「配置规则」→「入方向」→「手动添加」,放行 22(SSH)、80(HTTP)、443(HTTPS)三个端口。
然后登录装 Docker:
ssh root@你的公网IP
curl -fsSL https://get.docker.com | sh
systemctl enable --now docker
docker compose version
注意:绝对不要把 11434(ollama)和 5432(postgres)加进安全组。这两个端口暴露到公网,几小时内就会被人扫到并跑满你的额度。容器之间用 Compose 的服务名互访,不需要对外开端口。
第四步:搬代码和镜像
这一步把本地代码和镜像送上云,做完后云端能 docker compose up 起得来。
代码走 Git,别用 scp 传整个目录:
git clone https://你的仓库地址.git /opt/ai-workflow
cd /opt/ai-workflow
cp .env.example .env && vim .env
镜像如果构建慢,先传到阿里云容器镜像服务 ACR:本地 docker tag myapp:1.0 registry.cn-hangzhou.aliyuncs.com/你的命名空间/myapp:1.0,docker push,云端 docker pull。镜像不大的话直接 docker save -o myapp.tar myapp:1.0,scp myapp.tar root@IP:/root/,云端 docker load -i myapp.tar。
模型权重和向量库快照就别 scp 了,几百 GB 传到天亮。装 ossutil 传到对象存储 OSS:
./ossutil64 cp -r ./models oss://你的bucket/models/ --update
云端再 ossutil64 cp -r oss://你的bucket/models/ ./models 拉回来。
第五步:起服务并验证
这一步让容器在云端跑起来,并逐个确认接口通。
cd /opt/ai-workflow
docker compose up -d
docker compose ps
docker compose logs -f workflow-api
三个容器都显示 Up 后,在服务器上本地验证:curl http://localhost:8000/health 返回 200 再往下走。然后从你自己的电脑 curl http://公网IP:8000/health,通了说明端口链路没问题。
GPU 机型要额外装 NVIDIA 容器工具链,否则容器里看不到显卡:
apt install -y nvidia-container-toolkit
systemctl restart docker
docker run --rm --gpus all nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi
能看到 A10 的型号和显存,才说明 GPU 直通成功。
第六步:配域名和 HTTPS
这一步把 http://IP:8000 换成 https://ai.你的域名.com,让人能正常用。
在域名解析里加一条 A 记录,主机记录填 ai,记录值填公网 IP。然后在服务器上装 Nginx 和 certbot:
apt install -y nginx certbot python3-certbot-nginx
vim /etc/nginx/sites-available/ai
配置内容:
server {
listen 80;
server_name ai.你的域名.com;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_read_timeout 300s;
}
}
启用后申请证书:
ln -s /etc/nginx/sites-available/ai /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
certbot --nginx -d ai.你的域名.com
certbot 会自动改好 443 段并配置自动续期。
注意:
proxy_read_timeout默认 60 秒,大模型生成超过一分钟会被 Nginx 掐断,返回 504。这一行必须显式调大。
第七步:加上重启和备份
这一步让服务在服务器重启或容器崩溃后自动恢复,并保证数据不丢。
Compose 里每个服务都加 restart: unless-stopped,再配一个开机自启的 systemd 单元或在 crontab 里加 @reboot cd /opt/ai-workflow && docker compose up -d。
数据库备份用 crontab 每天凌晨跑一次:
0 3 * * * docker exec pgvector pg_dump -U postgres vectors > /backup/vectors_$(date +\%F).sql
再把 /backup 目录同步到 OSS,保留最近 7 天。
小结
- 迁移前先
docker compose config导出展开后的配置,以它为准而不是手写的 yml。 - ARM 本地构建的镜像搬到 x86 云主机会报 exec format error,要用
--platform linux/amd64重建。 - 模型层优先考虑换成托管 API,成本比租 GPU 机器低一个量级,除非有数据合规要求。
- 安全组只开 22/80/443,ollama 和数据库端口一律不对外。
- 大文件走对象存储 OSS,别用 scp 硬传。
- Nginx 必须调大
proxy_read_timeout,否则长文本生成会被 504 打断。 - 收尾一定要做
restart: unless-stopped和每日数据库备份。
原文链接:https://www.gj0.com/thread-1118.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。