一、部署前準備
lsb_release -a、uname -a)、Java環境(java -version、echo $JAVA_HOME)、資源狀況(內存free -h、CPUlscpu、磁盤df -h)及網絡連接(ping -c 4 google.com)。22、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)。/opt/myapp/{bin,conf,lib,logs,temp}用于應用文件,/var/log/myapp用于日志,/etc/myapp用于配置文件),并設置所屬用戶(sudo chown -R appuser:appuser /opt/myapp)。二、Java環境安裝
sudo apt update && sudo apt install openjdk-11-jdk -y(替換11為目標版本);sudo yum install java-11-openjdk-devel -y。java -version(顯示版本信息即為成功)。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使配置生效。三、應用打包
mvn clean package,生成可執行JAR(位于target目錄,如myapp.jar);gradle build,生成JAR文件(位于build/libs目錄)。mvn package,位于target目錄),后續部署至Tomcat的webapps目錄。四、手動部署流程
sudo systemctl stop tomcat;sudo cp /opt/tomcat/webapps/myapp.war /opt/tomcat/webapps/myapp.war.bak;/tmp,移動至webapps目錄:sudo mv /tmp/myapp.war /opt/tomcat/webapps/;sudo systemctl start tomcat;sudo tail -f /opt/tomcat/logs/catalina.out。/opt/myapp:scp myapp.jar appuser@server:/tmp && sudo mv /tmp/myapp.jar /opt/myapp/;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)。六、啟動腳本編寫
/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")"
/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
/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):
firewalld:sudo firewall-cmd --permanent --add-port=8080/tcp && sudo firewall-cmd --reload;ufw:sudo ufw allow 8080。九、優化與維護
-Xms(初始堆內存,如-Xms512m)、-Xmx(最大堆內存,如-Xmx2g)設置堆大??;選擇垃圾回收器(如-XX:+UseG1GC,適用于大內存應用)。top、htop監控CPU/內存;通過tail -f /opt/myapp/app.log實時查看日志;集成Prometheus+Grafana實現可視化監控。/opt/myapp)、配置文件(/etc/myapp)、數據庫(如mysqldump),存儲至異地或云存儲。