部署文档
环境:阿里云轻量服务器 · Alibaba Linux · Podman
架构说明
浏览器
├─ / → Nginx 返回 index.html(SPA 路由)
└─ /base_api/ → Nginx 反代到 api-xxx.your-domain.com(无需配置 CORS)
前端静态文件由 Nginx 容器提供,API 请求由 Nginx 转发到后端,无跨域问题。
首次部署
1. 服务器安装 Podman
sudo dnf install -y podman
podman --version
2. 本机打包项目(排除 node_modules)
在 本机 PowerShell 执行:
tar -czf video-snap-web.tar.gz -C d:\CODE `
--exclude="video-snap-web/node_modules" `
--exclude="video-snap-web/dist" `
video-snap-web
3. 传到服务器
scp video-snap-web.tar.gz root@YOUR_SERVER_IP:/root/
4. 服务器解压
cd /root
tar -xzf video-snap-web.tar.gz
cd video-snap-web
5. 构建并启动容器
podman build -f ./Dockerfile -t video-snap-web .
podman run -d --name video-snap-web -p 80:80 --restart=always video-snap-web
6. 阿里云控制台开放端口
轻量服务器控制台 → 防火墙 → 添加规则:
| 协议 | 端口 | 来源 |
|---|---|---|
| TCP | 80 | 0.0.0.0/0 |
访问 http://YOUR_SERVER_IP 验证是否正常。
更新部署
每次代码有改动,在本机执行:
# 1. 重新打包
tar -czf video-snap-web.tar.gz -C d:\CODE `
--exclude="video-snap-web/node_modules" `
--exclude="video-snap-web/dist" `
video-snap-web
# 2. 传到服务器
scp video-snap-web.tar.gz root@YOUR_SERVER_IP:/root/
然后在服务器执行:
cd /root
tar -xzf video-snap-web.tar.gz
cd video-snap-web
# 重新构建并替换容器
podman build -f ./Dockerfile -t video-snap-web .
podman stop video-snap-web && podman rm video-snap-web
podman run -d --name video-snap-web -p 80:80 --restart=always video-snap-web
常用运维命令
# 查看运行状态
podman ps
# 查看实时日志
podman logs -f video-snap-web
# 进入容器排查
podman exec -it video-snap-web sh
# 停止 / 启动
podman stop video-snap-web
podman start video-snap-web
拉取镜像超时(备用方案)
若构建时拉取镜像失败,改用本地构建 dist + 服务器只跑 nginx 的方式:
本机构建:
cd d:\CODE\video-snap-web
pnpm build
# 传 dist 和 nginx 配置到服务器
scp -r dist root@YOUR_SERVER_IP:/root/video-snap-web/
scp nginx.conf root@YOUR_SERVER_IP:/root/video-snap-web/
服务器直接跑 nginx 容器(无需构建):
podman run -d --name video-snap-web -p 80:80 --restart=always \
-v /root/video-snap-web/dist:/usr/share/nginx/html:ro \
-v /root/video-snap-web/nginx.conf:/etc/nginx/conf.d/default.conf:ro \
docker.m.daocloud.io/library/nginx:alpine
更新时只需重新传 dist/ 再重启容器:
podman restart video-snap-web