一、部署前准备
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),存储至异地或云存储。