溫馨提示×

Linux系統Java應用如何部署

小樊
37
2025-09-29 07:55:35
欄目: 編程語言

一、部署前準備

  1. 系統環境檢查:確認操作系統版本(lsb_release -a、uname -a)、Java環境(java -version、echo $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.20、export 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.properties、application-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. 監控與日志:使用top、htop監控CPU/內存;通過tail -f /opt/myapp/app.log實時查看日志;集成Prometheus+Grafana實現可視化監控。
  3. 備份策略:定期備份應用代碼(/opt/myapp)、配置文件(/etc/myapp)、數據庫(如mysqldump),存儲至異地或云存儲。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女