JAVA项目打包部署运维全流程(多服务、批量)

1、检查是否已安装Java

复制代码
java -version
javac -version

2、 安装JDK 8(如果未安装)

复制代码
# Ubuntu/Debian:
sudo apt update
sudo apt install openjdk-8-jdk openjdk-8-jre

#CentOS/RHEL:
sudo yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel

3、配置JAVA环境变量

复制代码
# 编辑配置文件
sudo vi /etc/profile

# 添加以下内容
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

# 使配置生效
source /etc/profile

4、项目打包在开发机器上执行

复制代码
# 进入项目根目录
cd D:\work\vendor_systest_szpt_backend

# 整体打包(跳过测试)
mvn clean package -Dmaven.test.skip=true

# 或者单独打包某个模块
cd robestec-business/user-center
mvn clean package -Dmaven.test.skip=true

5、上传JAR包到Linux服务器

复制代码
# 使用scp上传
scp target/*.jar username@server_ip:/opt/robestec/apps/

# 或使用rsync
rsync -avz target/*.jar username@server_ip:/opt/robestec/apps/

6、创建服务启动脚本创建目录结构

复制代码
# 在服务器上创建目录
sudo mkdir -p /opt/robestec/{apps,logs,config}
sudo chown -R $USER:$USER /opt/robestec

7、创建通用启动脚本

复制代码
#!/bin/bash

# 服务启动脚本
# 用法: ./start-service.sh <module-name> <port> <profile>

MODULE_NAME=$1
PORT=$2
PROFILE=${3:-dev}  # 默认使用dev环境

if [ -z "$MODULE_NAME" ] || [ -z "$PORT" ]; then
    echo "用法: $0 <模块名> <端口> [环境profile]"
    echo "示例: $0 user-center 8080 prod"
    exit 1
fi

APP_DIR="/opt/robestec/apps"
LOG_DIR="/opt/robestec/logs"
JAR_FILE="${APP_DIR}/${MODULE_NAME}.jar"

# 检查JAR文件是否存在
if [ ! -f "$JAR_FILE" ]; then
    echo "错误: JAR文件不存在: $JAR_FILE"
    exit 1
fi

# 检查端口是否已被占用
if netstat -tuln | grep -q ":${PORT} "; then
    echo "错误: 端口 ${PORT} 已被占用"
    exit 1
fi

# JVM参数
JAVA_OPTS="-Xms256m -Xmx512m \
           -XX:MaxMetaspaceSize=256m \
           -XX:+UseG1GC \
           -XX:MaxGCPauseMillis=200 \
           -XX:+HeapDumpOnOutOfMemoryError \
           -XX:HeapDumpPath=${LOG_DIR}/${MODULE_NAME}-heapdump.hprof"

# 日志文件
LOG_FILE="${LOG_DIR}/${MODULE_NAME}.log"

echo "启动服务: ${MODULE_NAME}"
echo "端口: ${PORT}"
echo "环境: ${PROFILE}"
echo "日志: ${LOG_FILE}"

# 启动应用
nohup java ${JAVA_OPTS} \
    -Dserver.port=${PORT} \
    -Dspring.profiles.active=${PROFILE} \
    -Djava.security.egd=file:/dev/./urandom \
    -jar ${JAR_FILE} \
    > ${LOG_FILE} 2>&1 &

# 记录PID
echo $! > "${LOG_DIR}/${MODULE_NAME}.pid"

echo "服务 ${MODULE_NAME} 已启动,PID: $!"
echo "查看日志: tail -f ${LOG_FILE}"
  1. 创建停止脚本

    #!/bin/bash

    服务停止脚本

    用法: ./stop-service.sh <module-name>

    MODULE_NAME=$1

    if [ -z "MODULE_NAME" ]; then echo "用法: 0 <模块名>"
    exit 1
    fi

    PID_FILE="/opt/robestec/logs/${MODULE_NAME}.pid"

    if [ -f "PID_FILE" ]; then PID=(cat PID_FILE) if ps -p PID > /dev/null; then
    echo "停止服务: {MODULE_NAME} (PID: {PID})"
    kill $PID

    复制代码
         # 等待进程结束
         for i in {1..30}; do
             if ! ps -p $PID > /dev/null; then
                 echo "服务已停止"
                 rm -f $PID_FILE
                 exit 0
             fi
             sleep 1
         done
         
         # 强制杀死
         echo "强制停止服务"
         kill -9 $PID
         rm -f $PID_FILE
     else
         echo "服务未运行,清理PID文件"
         rm -f $PID_FILE
     fi

    else
    echo "未找到PID文件,尝试通过进程名停止"
    pkill -f "${MODULE_NAME}.jar"
    echo "已发送停止信号"
    fi

  2. 创建重启脚本

    #!/bin/bash

    MODULE_NAME=1 PORT=2
    PROFILE=${3:-dev}

    echo "重启服务: ${MODULE_NAME}"

    停止服务

    /opt/robestec/stop-service.sh $MODULE_NAME

    等待2秒

    sleep 2

    启动服务

    /opt/robestec/start-service.sh MODULE_NAME PORT $PROFILE

赋予执行权限 chmod +x /opt/robestec/*.sh

10、各模块启动命令参考

根据项目结构,以下是主要模块的建议端口配置:

复制代码
# 1. 认证中心 (robestec-uaa)
./start-service.sh robestec-uaa 8090 dev

# 2. 网关 (sc-gateway)
./start-service.sh sc-gateway 8080 dev

# 3. 配置中心 (如果需要独立运行)
./start-service.sh robestec-config 8888 dev

# 4. 用户中心
./start-service.sh user-center 8081 dev

# 5. 系统管理
./start-service.sh system-management 8082 dev

# 6. 交易管理
./start-service.sh transaction-management 8083 dev

# 7. AI预警
./start-service.sh aiearly-warning 8084 dev

# 8. 日常生产
./start-service.sh daily-produce 8085 dev

# 9. 虚拟电厂
./start-service.sh virtual-power 8086 dev

# 10. 电池监控
./start-service.sh battery-monitor 8087 dev

# 11. 设备管理
./start-service.sh device-management 8088 dev

# 12. 运维管理
./start-service.sh operation-maintenance 8089 dev

# 13. 运营分析
./start-service.sh operation-analysis 8090 dev

# 14. 文件中心
./start-service.sh file-center 8091 dev

# 15. 搜索服务
./start-service.sh search-server 8092 dev

# 16. Doris服务
./start-service.sh doris-server 8093 dev

# 17. 大数据服务
./start-service.sh large-server 8094 dev

# 18. 日志中心
./start-service.sh log-center 8095 dev

# 19. 异步数据处理
./start-service.sh async-data 8096 dev

# 20. 代码转移
./start-service.sh code-transfer 8097 dev

11、生产环境启动示例

复制代码
# 使用prod环境,调整JVM参数
JAVA_OPTS="-Xms1g -Xmx2g" nohup java ${JAVA_OPTS} \
    -Dserver.port=8081 \
    -Dspring.profiles.active=prod \
    -Dspring.cloud.nacos.config.server-addr=nacos-server:8848 \
    -jar /opt/robestec/apps/user-center.jar \
    > /opt/robestec/logs/user-center.log 2>&1 &

12、批量启动所有服务脚本

复制代码
#!/bin/bash

echo "========================================="
echo "启动 Robestec 微服务平台"
echo "========================================="

# 定义服务列表(模块名:端口)
declare -A SERVICES=(
    ["robestec-uaa"]=8090
    ["sc-gateway"]=8080
    ["user-center"]=8081
    ["system-management"]=8082
    ["transaction-management"]=8083
    ["aiearly-warning"]=8084
    ["daily-produce"]=8085
    ["virtual-power"]=8086
)

PROFILE=${1:-dev}

for MODULE in "${!SERVICES[@]}"; do
    PORT=${SERVICES[$MODULE]}
    echo ""
    echo "-----------------------------------------"
    echo "启动服务: $MODULE (端口: $PORT)"
    echo "-----------------------------------------"
    
    /opt/robestec/start-service.sh $MODULE $PORT $PROFILE
    
    # 等待服务启动
    sleep 5
done

echo ""
echo "========================================="
echo "所有服务启动完成"
echo "========================================="

13、监控和维护

查看服务状态

复制代码
# 查看所有Java进程
ps aux | grep java

# 查看特定服务
ps aux | grep user-center

# 查看端口占用
netstat -tuln | grep 8081
# 或
ss -tuln | grep 8081

查看日志

复制代码
# 实时查看日志
tail -f /opt/robestec/logs/user-center.log

# 查看最后100行
tail -n 100 /opt/robestec/logs/user-center.log

# 搜索错误
grep -i "error" /opt/robestec/logs/user-center.log

健康检查

复制代码
# 检查服务是否响应
curl http://localhost:8081/actuator/health

# 检查具体端口
curl -I http://localhost:8081

防火墙:开放必要的端口

复制代码
   sudo firewall-cmd --permanent --add-port=8080-8100/tcp
   sudo firewall-cmd --reload
相关推荐
拾-光1 小时前
【Git】命令大全:从入门到高手,100 个最常用命令速查(2026 版)
java·大数据·人工智能·git·python·elasticsearch·设计模式
浪客灿心1 小时前
Linux五种IO模型与非阻塞IO
linux·网络
洋哥网络科技1 小时前
centos7 升级openssh-10.2
linux·运维·服务器·系统安全
无人不xiao1 小时前
springBoot 实现 接口进度条
java·spring boot·后端
我先去打把游戏先1 小时前
【保姆级图文教程】:VMware虚拟机安装Ubuntu Server 22.04
linux·数据库·ubuntu
IpdataCloud2 小时前
企业级IP定位服务准确率怎么保证?从数据源到离线库的精度提升指南
运维·服务器·网络·数据库·tcp/ip
pkowner2 小时前
若依分页问题及解决方法
java·前端·算法
派葛穆2 小时前
Ubuntu-软件安装和执行
linux·运维·ubuntu
AlickLbc2 小时前
WSL2安装Ubuntu与Claude Code记录
linux·运维·ubuntu