ANALYSIS
创建自动化部署脚本 deploy.sh
PRTCL // BASH
#!/bin/bash
# 配置:部署参数(可按需修改)APP_NAME="myapp"REPO_URL="git@github.com:username/myapp.git"DEPLOY_PATH="/var/www/$APP_NAME"BACKUP_PATH="/var/backups/$APP_NAME"SERVERS=("server1.example.com" "server2.example.com" "server3.example.com")USER="deploy"
# 创建备份目录mkdir -p "$BACKUP_PATH"
# 获取当前时间戳TIMESTAMP=$(date +%Y%m%d_%H%M%S)
# 部署到每台服务器for server in "${SERVERS[@]}"; do echo "开始部署到 $server..."
# 创建当前版本备份 ssh $USER@$server "if [ -d $DEPLOY_PATH ]; then cp -r $DEPLOY_PATH $BACKUP_PATH/${APP_NAME}_$TIMESTAMP; fi"
# 拉取最新代码 ssh $USER@$server "mkdir -p $DEPLOY_PATH && cd $DEPLOY_PATH && git clone $REPO_URL ."
# 安装依赖(根据项目类型调整) ssh $USER@$server "cd $DEPLOY_PATH && npm install 2>/dev/null || echo 'npm install skipped'" ssh $USER@$server "cd $DEPLOY_PATH && pip install -r requirements.txt 2>/dev/null || echo 'pip install skipped'"
# 构建项目(根据项目类型调整) ssh $USER@$server "cd $DEPLOY_PATH && npm run build 2>/dev/null || echo 'Build skipped'"
# 重启服务 ssh $USER@$server "sudo systemctl restart $APP_NAME.service"
# 检查服务状态 STATUS=$(ssh $USER@$server "sudo systemctl is-active $APP_NAME.service") if [ "$STATUS" == "active" ]; then echo "部署到 $server 成功!" else echo "部署到 $server 失败,请检查服务状态!" fidone作用:
该脚本在执行时会:
- 连接到多台服务器进行部署;
- 在部署前创建当前版本的备份;
- 拉取最新代码并执行构建;
- 安装依赖并重启服务;
- 检查服务状态确保部署成功。
创建快速回滚脚本 rollback.sh
PRTCL // BASH
#!/bin/bash
# 配置:回滚参数(可按需修改)APP_NAME="myapp"DEPLOY_PATH="/var/www/$APP_NAME"BACKUP_PATH="/var/backups/$APP_NAME"SERVERS=("server1.example.com" "server2.example.com" "server3.example.com")USER="deploy"
# 检查备份目录是否存在if [ ! -d "$BACKUP_PATH" ]; then echo "备份目录不存在:$BACKUP_PATH" exit 1fi
# 获取最新的备份LATEST_BACKUP=$(ls -t $BACKUP_PATH | head -n 1)if [ -z "$LATEST_BACKUP" ]; then echo "未找到备份文件" exit 1fi
echo "正在使用备份 $LATEST_BACKUP 进行回滚..."
# 回滚到每台服务器for server in "${SERVERS[@]}"; do echo "开始回滚 $server..."
# 停止服务 ssh $USER@$server "sudo systemctl stop $APP_NAME.service"
# 恢复备份 ssh $USER@$server "rm -rf $DEPLOY_PATH && cp -r $BACKUP_PATH/$LATEST_BACKUP $DEPLOY_PATH"
# 重启服务 ssh $USER@$server "sudo systemctl restart $APP_NAME.service"
# 检查服务状态 STATUS=$(ssh $USER@$server "sudo systemctl is-active $APP_NAME.service") if [ "$STATUS" == "active" ]; then echo "回滚到 $server 成功!" else echo "回滚到 $server 失败,请检查服务状态!" fidone作用:
- 快速回滚到上一个备份版本;
- 停止当前服务并恢复备份;
- 重启服务并验证状态。
赋予脚本执行权限(执行一次即可)
PRTCL // SH
chmod +x ~/scripts/deploy.shchmod +x ~/scripts/rollback.shR P
Rhine Lab Pioneer Division
Auth_Verified: 2026.04.06
Auth_Verified: 2026.04.06
