#!/bin/bash # 后端部署脚本 - 部署到CentOS服务器 # 目标服务器: 1.13.156.49 # 目标目录: /data/nodejs/jiebanke # 配置参数 LOCAL_DIR="/Users/ainongkeji/code/vue/jiebanke/backend" REMOTE_USER="root" REMOTE_HOST="1.13.156.49" REMOTE_DIR="/data/nodejs/jiebanke" # 检查本地目录是否存在 if [ ! -d "$LOCAL_DIR" ]; then echo "错误:本地目录 $LOCAL_DIR 不存在!" exit 1 fi # 检查Node.js环境 if ! command -v node &> /dev/null; then echo "错误:本地Node.js环境未安装!" exit 1 fi # 安装生产依赖 cd "$LOCAL_DIR" echo "安装生产依赖..." npm install --production # 使用 rsync 上传文件到服务器 echo "开始上传后端文件到远程服务器..." rsync -avz --progress --delete \ --exclude 'node_modules' \ --exclude '.git' \ --exclude '.env' \ --exclude 'logs' \ --exclude 'uploads' \ --include 'ecosystem.config.js' \ "$LOCAL_DIR/" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/" # 在服务器上执行部署后命令 echo "在远程服务器上执行部署命令..." ssh "$REMOTE_USER@$REMOTE_HOST" << EOF cd "$REMOTE_DIR" # 安装生产依赖 echo "在服务器上安装依赖..." npm install --production # 使用PM2重启应用 if command -v pm2 &> /dev/null; then echo "使用PM2重启应用..." if [ -f "ecosystem.config.js" ]; then pm2 reload ecosystem.config.js --env production pm2 save else pm2 restart jiebanke-backend || pm2 start src/server.js --name "jiebanke-backend" --env production fi else echo "PM2未安装,使用node直接启动..." pkill -f "node.*server.js" || true NODE_ENV=production nohup node src/server.js > server.log 2>&1 & fi # 检查服务状态 echo "检查服务状态..." sleep 3 if command -v pm2 &> /dev/null; then pm2 status else ps aux | grep "node.*server.js" | grep -v grep fi EOF echo "后端部署完成!" echo "服务器地址: $REMOTE_HOST" echo "部署目录: $REMOTE_DIR" echo "应用应该运行在端口 3000 上"