本文适合:中高级前端/全栈开发者、希望提升项目部署自动化水平的工程师。
随着项目复杂度提高,传统的部署方式已无法满足高可用与持续交付的需求。本文将介绍一个完整的现代部署实践方案,包含:
- 前端(Vue3 + Vite + PNPM)部署脚本
- 后端(NestJS + Docker + Nginx)蓝绿部署配置
- 使用阿里云云效流水线实现全自动部署流程
✅ 前端部署方案(Vue3 + Vite + PNPM)
步骤 1:配置免密 SSH 登录服务器
为了实现自动上传构建产物,推荐先配置好 SSH 免密登录。
不清楚如何配置可参考这篇文章:如何配置免密 SSH 登录
步骤 2:编写前端部署脚本 deploy.sh
#!/bin/bash
# === 配置项 ===
LOCAL_DIST_DIR=dist # 本地打包产物目录
REMOTE_USER=root # 登录服务器用户名
REMOTE_HOST=服务器IP地址
REMOTE_SSH_PORT=22 # SSH 端口
REMOTE_PARENT_DIR=/root/project/html/admin # 服务器目标路径
# ========================
echo "📦 开始构建前端..."
pnpm build
if [ $? -ne 0 ]; then
echo "❌ 构建失败,终止部署"
exit 1
fi
echo "🔍 检查本地构建目录..."
if [ ! -d "$LOCAL_DIST_DIR" ]; then
echo "❌ 构建目录不存在"
exit 1
fi
echo "📁 确保远程目录存在:$REMOTE_PARENT_DIR"
ssh -p $REMOTE_SSH_PORT $REMOTE_USER@$REMOTE_HOST "mkdir -p $REMOTE_PARENT_DIR"
echo "🚀 上传 dist 到服务器..."
rsync -avz --delete -e "ssh -p $REMOTE_SSH_PORT" $LOCAL_DIST_DIR $REMOTE_USER@$REMOTE_HOST:$REMOTE_PARENT_DIR/
echo "✅ 部署完成!dist 文件夹已上传至 $REMOTE_PARENT_DIR/dist"
步骤 3:执行发布脚本
bash deploy.sh
🧩 后端服务部署(NestJS + Docker Compose + Nginx)
步骤 1:编写 Docker Compose 配置
version: '3.8'
services:
# 蓝环境网关服务
server-blue:
build:
context: .
dockerfile: Dockerfile
image: hope/server:blue
container_name: hope-server-blue
command: node dist/main.js
restart: always
ports:
- "3300:3300"
environment:
- NODE_ENV=production
- PORT=3300
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3300/health"]
interval: 5s
timeout: 3s
retries: 10
networks:
- hope-network
volumes:
- ./logs:/app/logs
depends_on:
- redis
# 绿环境网关服务
server-green:
build:
context: .
dockerfile: Dockerfile
image: hope/server:green
container_name: hope-server-green
command: node dist/main.js
restart: always
ports:
- "3301:3300"
environment:
- NODE_ENV=production
- PORT=3300
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3300/health"]
interval: 5s
timeout: 3s
retries: 10
networks:
- hope-network
volumes:
- ./logs:/app/logs
depends_on:
- redis
# Nginx 服务
nginx:
image: nginx:alpine
container_name: hope-nginx
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/conf.d:/etc/nginx/conf.d
- ./nginx/ssl:/etc/nginx/ssl
- ./nginx/html:/usr/share/nginx/html
networks:
- hope-network
depends_on:
- server-blue
- server-green
networks:
hope-network:
driver: bridge
volumes:
redis-data:
mysql-data:
步骤 2:编写 Nginx 虚拟主机配置(支持蓝绿切换)
server {
listen 80;
server_name example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/xxx.pem;
ssl_certificate_key /etc/nginx/ssl/xxx.key;
# ✅ 蓝绿切换点,修改此处可切换流量方向
set $backend_host hope-server-blue:3300;
# set $backend_host hope-server-green:3300;
location / {
proxy_pass http://$backend_host;
resolver 127.0.0.11 valid=30s;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
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_cache_bypass $http_upgrade;
}
}
📌 记得将域名、证书路径、端口等信息根据实际情况修改
☁️ 使用阿里云云效流水线实现自动部署
步骤 1:新建流水线
- 模版选择:组织模版 - 空模版
- 类型选择:其他 · 执行命令
步骤 2:配置代码源与触发器
- 选择代码库:阿里云云效
- 选择分支:如
master - 配置触发方式:自动触发 / 手动触发
步骤 3:选择构建集群
建议选择靠近你服务器所在地的构建集群,提高部署速度。
步骤 4:配置构建命令
#!/bin/bash
set -e
echo "🎯 进入项目目录"
cd 服务器项目地址
echo "🔄 拉取最新代码"
git reset --hard
git pull origin master
echo "🚀 启动 blue 容器"
docker-compose up -d --build server-blue
echo "⏱️ 等待 blue 容器健康检测"
for i in {1..20}; do
status=$(docker inspect --format='{{json .State.Health.Status}}' hope-server-blue)
echo "当前健康状态: $status"
if [[ $status == "\"healthy\"" ]]; then
echo "✅ hope-server-blue 已健康"
break
else
echo "⌛️ 等待中...(${i}/20)"
sleep 3
fi
if [[ $i -eq 20 ]]; then
echo "❌ 容器健康检查失败,终止部署"
exit 1
fi
done
echo "📦 切换 Nginx 到 blue"
sed -i 's/set \$backend_host hope-server-.*/set $backend_host hope-server-blue:3300;/' ./nginx/conf.d/xxx.conf
grep 'set \$backend_host' ./nginx/conf.d/xxx.conf || true
docker exec hope-nginx nginx -t
docker exec hope-nginx nginx -s reload
echo "🧹 停止并移除旧 green 容器"
docker-compose stop server-green
docker-compose rm -f server-green
📌 记得将服务器项目位置、nginx配置文件名等信息根据实际情况修改
步骤 5:保存流水线,提交代码触发部署
你可以在本地执行:
git add .
git commit -m "✨ 新版本部署"
git push origin master
阿里云云效将自动拉取代码并完成部署流程!
🚀 总结
通过本文的实践,你将获得以下能力:
- 使用 shell 脚本将前端构建结果自动上传服务器
- 利用 Docker Compose 构建蓝绿部署架构
- 使用 Nginx 配合配置切换,实现零停机部署
- 借助阿里云云效流水线,打造自动化部署工作流
本文结合GPT编写,有遗漏、不通顺的地方欢迎指正👏👏👏👏👏