← 返回教程
教程

阿里云docker部署网站

部署文档

环境:阿里云轻量服务器 · 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. 阿里云控制台开放端口

轻量服务器控制台 → 防火墙 → 添加规则:

协议端口来源
TCP800.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