#!/bin/bash # 部署配置 SERVER_HOST="192.168.0.95" SERVER_USER="root" SERVER_PASSWORD="aiotagro" DEPLOY_DIR="/data/java/aiotagro" JAR_FILE="aagro-server/target/aagro-server.jar" APP_NAME="aagro-server" echo "开始部署到服务器 ${SERVER_HOST}..." # 1. 创建部署目录 echo "1. 创建部署目录..." sshpass -p "${SERVER_PASSWORD}" ssh -o StrictHostKeyChecking=no ${SERVER_USER}@${SERVER_HOST} "mkdir -p ${DEPLOY_DIR}/config ${DEPLOY_DIR}/logs" # 2. 上传jar文件 echo "2. 上传jar文件..." sshpass -p "${SERVER_PASSWORD}" scp -o StrictHostKeyChecking=no ${JAR_FILE} ${SERVER_USER}@${SERVER_HOST}:${DEPLOY_DIR}/ # 3. 上传配置文件 echo "3. 上传配置文件..." sshpass -p "${SERVER_PASSWORD}" scp -o StrictHostKeyChecking=no aagro-server/src/main/resources/*.yaml ${SERVER_USER}@${SERVER_HOST}:${DEPLOY_DIR}/config/ # 4. 创建启动脚本 echo "4. 创建启动脚本..." cat > start.sh << 'EOF' #!/bin/bash APP_NAME="aagro-server" JAR_FILE="/data/java/aiotagro/aagro-server.jar" PID_FILE="/data/java/aiotagro/app.pid" LOG_FILE="/data/java/aiotagro/logs/app.log" # 检查Java环境 if ! command -v java &> /dev/null; then echo "Java未安装,请先安装Java 8或更高版本" exit 1 fi # 停止现有进程 if [ -f "$PID_FILE" ]; then PID=$(cat $PID_FILE) if ps -p $PID > /dev/null 2>&1; then echo "停止现有进程 $PID..." kill $PID sleep 5 if ps -p $PID > /dev/null 2>&1; then echo "强制停止进程 $PID..." kill -9 $PID fi fi rm -f $PID_FILE fi # 启动应用 echo "启动应用..." nohup java -jar $JAR_FILE \ --spring.config.location=file:/data/java/aiotagro/config/ \ --spring.profiles.active=remote \ --server.port=8080 \ > $LOG_FILE 2>&1 & # 保存PID echo $! > $PID_FILE echo "应用已启动,PID: $(cat $PID_FILE)" echo "日志文件: $LOG_FILE" echo "可以使用以下命令查看日志:" echo "tail -f $LOG_FILE" EOF sshpass -p "${SERVER_PASSWORD}" scp -o StrictHostKeyChecking=no start.sh ${SERVER_USER}@${SERVER_HOST}:${DEPLOY_DIR}/ sshpass -p "${SERVER_PASSWORD}" ssh -o StrictHostKeyChecking=no ${SERVER_USER}@${SERVER_HOST} "chmod +x ${DEPLOY_DIR}/start.sh" # 5. 创建停止脚本 echo "5. 创建停止脚本..." cat > stop.sh << 'EOF' #!/bin/bash PID_FILE="/data/java/aiotagro/app.pid" if [ -f "$PID_FILE" ]; then PID=$(cat $PID_FILE) if ps -p $PID > /dev/null 2>&1; then echo "停止进程 $PID..." kill $PID sleep 5 if ps -p $PID > /dev/null 2>&1; then echo "强制停止进程 $PID..." kill -9 $PID fi echo "应用已停止" else echo "进程不存在" fi rm -f $PID_FILE else echo "PID文件不存在" fi EOF sshpass -p "${SERVER_PASSWORD}" scp -o StrictHostKeyChecking=no stop.sh ${SERVER_USER}@${SERVER_HOST}:${DEPLOY_DIR}/ sshpass -p "${SERVER_PASSWORD}" ssh -o StrictHostKeyChecking=no ${SERVER_USER}@${SERVER_HOST} "chmod +x ${DEPLOY_DIR}/stop.sh" echo "部署完成!" echo "服务器目录: ${DEPLOY_DIR}" echo "启动命令: ssh ${SERVER_USER}@${SERVER_HOST} 'cd ${DEPLOY_DIR} && ./start.sh'" echo "停止命令: ssh ${SERVER_USER}@${SERVER_HOST} 'cd ${DEPLOY_DIR} && ./stop.sh'" echo "查看日志: ssh ${SERVER_USER}@${SERVER_HOST} 'tail -f ${DEPLOY_DIR}/logs/app.log'"