首页主机资讯Linux系统Java应用如何部署

Linux系统Java应用如何部署

时间2025-10-04 05:18:04发布访客分类主机资讯浏览1295
导读:一、部署前准备 系统环境检查:确认操作系统版本(lsb_release -a、uname -a)、Java环境(java -version、echo $JAVA_HOME)、资源状况(内存free -h、CPUlscpu、磁盘df -h)...

一、部署前准备

  1. 系统环境检查:确认操作系统版本(lsb_release -auname -a)、Java环境(java -versionecho $JAVA_HOME)、资源状况(内存free -h、CPUlscpu、磁盘df -h)及网络连接(ping -c 4 google.com)。
  2. 安全设置:启用防火墙并开放必要端口(如SSH22、HTTP80、HTTPS443、应用端口8080,以Ubuntuufw为例:sudo ufw enable & & sudo ufw allow 22 & & sudo ufw allow 8080);创建专用用户(sudo adduser appuser)并加入sudo组(sudo usermod -aG sudo appuser);配置SSH密钥认证(将公钥添加至~/.ssh/authorized_keys)。
  3. 目录结构规划:建立标准化目录(如/opt/myapp/{ bin,conf,lib,logs,temp} 用于应用文件,/var/log/myapp用于日志,/etc/myapp用于配置文件),并设置所属用户(sudo chown -R appuser:appuser /opt/myapp)。

二、Java环境安装

  1. 包管理器安装(推荐)
    • Debian/Ubuntu:sudo apt update & & sudo apt install openjdk-11-jdk -y(替换11为目标版本);
    • RHEL/CentOS:sudo yum install java-11-openjdk-devel -y
      验证安装:java -version(显示版本信息即为成功)。
  2. 手动安装(可选)
    • 从Oracle官网下载JDK(如jdk-11.0.20_linux-x64_bin.tar.gz),上传至/usr/local并解压:sudo tar -zxvf jdk-11.0.20_linux-x64_bin.tar.gz -C /usr/local
    • 配置环境变量:编辑/etc/profile,添加export JAVA_HOME=/usr/local/jdk-11.0.20export PATH=$JAVA_HOME/bin:$PATH,执行source /etc/profile使配置生效。

三、应用打包

  1. 使用构建工具
    • Maven项目:在项目根目录执行mvn clean package,生成可执行JAR(位于target目录,如myapp.jar);
    • Gradle项目:执行gradle build,生成JAR文件(位于build/libs目录)。
  2. WAR包部署(Web应用):若使用Tomcat等Servlet容器,将项目打包为WAR(Maven执行mvn package,位于target目录),后续部署至Tomcat的webapps目录。

四、手动部署流程

  1. WAR包部署(Tomcat为例)
    • 停止Tomcat:sudo systemctl stop tomcat
    • 备份旧应用:sudo cp /opt/tomcat/webapps/myapp.war /opt/tomcat/webapps/myapp.war.bak
    • 上传新WAR包至/tmp,移动至webapps目录:sudo mv /tmp/myapp.war /opt/tomcat/webapps/
    • 启动Tomcat:sudo systemctl start tomcat
    • 查看日志确认部署状态:sudo tail -f /opt/tomcat/logs/catalina.out
  2. JAR包部署(Spring Boot为例)
    • 上传JAR包至/opt/myappscp myapp.jar appuser@server:/tmp & & sudo mv /tmp/myapp.jar /opt/myapp/
    • 停止现有应用(若有systemd服务):sudo systemctl stop myapp
    • 启动应用:sudo systemctl start myapp
    • 检查状态:sudo systemctl status myapp

五、配置文件管理

  • 应用配置文件:存放于/etc/myapp(如application.propertiesapplication-prod.properties),避免与应用代码混合;
  • 数据库配置:单独存放于/etc/myapp/database.properties,包含数据库URL、用户名、密码等信息(示例:spring.datasource.url=jdbc:mysql://localhost:3306/mydb?useSSL=false& serverTimezone=UTC)。

六、启动脚本编写

  1. 简单启动脚本(/opt/myapp/bin/start.sh
    #!/bin/bash
    APP_NAME="myapp"
    APP_HOME="/opt/myapp"
    JAR_FILE="$APP_HOME/myapp.jar"
    LOG_FILE="$APP_HOME/app.log"
    PID_FILE="$APP_HOME/app.pid"
    
    if [ -f "$PID_FILE" ];
         then
      PID=$(cat "$PID_FILE")
      if [ -d "/proc/$PID" ];
         then
        echo "$APP_NAME is already running. PID: $PID"
        exit 1
      else
        rm -f "$PID_FILE"
      fi
    fi
    
    echo "Starting $APP_NAME..."
    nohup java -jar "$JAR_FILE" --spring.profiles.active=prod --server.port=8080 >
         "$LOG_FILE" 2>
        &
        1 &
        
    echo $! >
         "$PID_FILE"
    echo "$APP_NAME started. PID: $(cat "$PID_FILE")"
    
  2. 停止脚本(/opt/myapp/bin/stop.sh
    #!/bin/bash
    APP_NAME="myapp"
    PID_FILE="/opt/myapp/app.pid"
    
    if [ -f "$PID_FILE" ];
         then
      PID=$(cat "$PID_FILE")
      if [ -d "/proc/$PID" ];
         then
        echo "Stopping $APP_NAME. PID: $PID"
        kill "$PID"
        while [ -d "/proc/$PID" ];
         do
          sleep 1
        done
        rm -f "$PID_FILE"
        echo "$APP_NAME stopped."
      else
        rm -f "$PID_FILE"
        echo "$APP_NAME is not running."
      fi
    else
      echo "$APP_NAME is not running."
    fi
    
  3. 重启脚本(/opt/myapp/bin/restart.sh
    #!/bin/bash
    $APP_HOME/bin/stop.sh
    sleep 5
    $APP_HOME/bin/start.sh
    
    赋予执行权限:chmod +x /opt/myapp/bin/*.sh

七、systemd服务配置(可选但推荐) 创建/etc/systemd/system/myapp.service文件:

[Unit]
Description=My Java Application
After=network.target

[Service]
Type=simple
User=appuser
Group=appuser
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/java -Xms512m -Xmx2g -server -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -jar /opt/myapp/myapp.jar --spring.profiles.active=prod
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

执行以下命令启用并启动服务:

sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
sudo systemctl status myapp  # 查看状态

通过journalctl -u myapp -f查看日志。

八、防火墙配置 若使用firewalld(CentOS)或ufw(Ubuntu),开放应用端口(如8080):

  • firewalldsudo firewall-cmd --permanent --add-port=8080/tcp & & sudo firewall-cmd --reload
  • ufwsudo ufw allow 8080

九、优化与维护

  1. JVM调优:通过-Xms(初始堆内存,如-Xms512m)、-Xmx(最大堆内存,如-Xmx2g)设置堆大小;选择垃圾回收器(如-XX:+UseG1GC,适用于大内存应用)。
  2. 监控与日志:使用tophtop监控CPU/内存;通过tail -f /opt/myapp/app.log实时查看日志;集成Prometheus+Grafana实现可视化监控。
  3. 备份策略:定期备份应用代码(/opt/myapp)、配置文件(/etc/myapp)、数据库(如mysqldump),存储至异地或云存储。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Linux系统Java应用如何部署
本文地址: https://pptw.com/jishu/719602.html
ubuntu 定时器如何监控 ubuntu 定时器如何重启

游客 回复需填写必要信息