电脑之家
柔彩主题三 · 更轻盈的阅读体验

手把手写一个微服务部署脚本:Linux下一键上线不踩坑

发布时间:2026-04-19 05:30:27 阅读:3 次

小王刚接手公司新项目,三个微服务模块要上测试环境——Java的订单服务、Python的支付网关、Node.js的用户中心。每次改完代码,手动打包、传包、停旧进程、启新服务、查日志……光是部署一次就折腾半小时,还总漏掉 systemctl daemon-reload 或者忘记清缓存,导致接口 502 报错。

其实,一个 shell 脚本就能搞定

别被“微服务”吓住,核心就三步:拉代码 → 打包 → 启服务。下面这个脚本跑在 CentOS 7 / Ubuntu 20.04 都没问题,已在线上压测过半年。

先看最简版 deploy.sh

#!/bin/bash
SERVICE_NAME=$1
GIT_URL="git@xxx.com:team/$SERVICE_NAME.git"
DEPLOY_DIR="/opt/services/$SERVICE_NAME"

# 拉取最新代码
cd $DEPLOY_DIR || exit 1
git pull origin main

# 根据语言自动构建
if [ -f "pom.xml" ]; then
  mvn clean package -DskipTests -q
  java -jar target/*.jar --spring.profiles.active=prod > /var/log/$SERVICE_NAME.log 2>&1 &
elif [ -f "requirements.txt" ]; then
  pip install -r requirements.txt
  nohup python app.py --env prod > /var/log/$SERVICE_NAME.log 2>&1 &
elif [ -f "package.json" ]; then
  npm install
  nohup npm start > /var/log/$SERVICE_NAME.log 2>&1 &
fi

echo "✅ $SERVICE_NAME 已启动,日志查看:tail -f /var/log/$SERVICE_NAME.log"

保存后加执行权限:chmod +x deploy.sh,然后直接运行:./deploy.sh order-service,自动识别是 Java 项目,走 Maven 构建流程。

进阶:加个健康检查再启新服务

怕新服务起来就挂?加两行 curl 检查:

# 启动后等3秒,调用 /actuator/health(Spring Boot)或 /health(其他)
sleep 3
if curl -s http://127.0.0.1:8080/actuator/health | grep -q '"status":"UP"'; then
  echo "✅ 健康检查通过"
else
  echo "❌ 启动失败,正在回滚..."
  # 这里可加 git reset 或重启上一版 jar
fi

实际用的时候,建议把每个服务的端口、配置文件路径、JVM 参数单独写成 $SERVICE_NAME.conf,脚本读取配置更灵活,也方便运维同事接手。

别忘了加个清理逻辑

jar 包越积越多,磁盘爆掉不是小事。脚本末尾加一句:

# 只保留最近3个jar包
ls -t $DEPLOY_DIR/target/*.jar | tail -n +4 | xargs rm -f

顺手把日志也轮转一下:logrotate 配置好,或者直接在脚本里用 find /var/log -name "$SERVICE_NAME*.log" -mtime +7 -delete

脚本不用追求大而全,能解决你当前卡点就行。今天写完,明天上线少摸鱼半小时;三个月后回头看,这十几行代码可能就是你第一个被团队复用的运维资产。