Linux系统Java应用如何部署
导读:一、部署前准备 系统环境检查:确认操作系统版本(lsb_release -a、uname -a)、Java环境(java -version、echo $JAVA_HOME)、资源状况(内存free -h、CPUlscpu、磁盘df -h)...
一、部署前准备
- 系统环境检查:确认操作系统版本(
lsb_release -a
、uname -a
)、Java环境(java -version
、echo $JAVA_HOME
)、资源状况(内存free -h
、CPUlscpu
、磁盘df -h
)及网络连接(ping -c 4 google.com
)。 - 安全设置:启用防火墙并开放必要端口(如SSH
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环境安装
- 包管理器安装(推荐):
- 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
(显示版本信息即为成功)。
- Debian/Ubuntu:
- 手动安装(可选):
- 从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
使配置生效。
- 从Oracle官网下载JDK(如
三、应用打包
- 使用构建工具:
- Maven项目:在项目根目录执行
mvn clean package
,生成可执行JAR(位于target
目录,如myapp.jar
); - Gradle项目:执行
gradle build
,生成JAR文件(位于build/libs
目录)。
- Maven项目:在项目根目录执行
- WAR包部署(Web应用):若使用Tomcat等Servlet容器,将项目打包为WAR(Maven执行
mvn package
,位于target
目录),后续部署至Tomcat的webapps
目录。
四、手动部署流程
- 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
。
- 停止Tomcat:
- JAR包部署(Spring Boot为例):
- 上传JAR包至
/opt/myapp
:scp 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
。
- 上传JAR包至
五、配置文件管理
- 应用配置文件:存放于
/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
。
九、优化与维护
- JVM调优:通过
-Xms
(初始堆内存,如-Xms512m
)、-Xmx
(最大堆内存,如-Xmx2g
)设置堆大小;选择垃圾回收器(如-XX:+UseG1GC
,适用于大内存应用)。 - 监控与日志:使用
top
、htop
监控CPU/内存;通过tail -f /opt/myapp/app.log
实时查看日志;集成Prometheus+Grafana实现可视化监控。 - 备份策略:定期备份应用代码(
/opt/myapp
)、配置文件(/etc/myapp
)、数据库(如mysqldump
),存储至异地或云存储。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux系统Java应用如何部署
本文地址: https://pptw.com/jishu/719602.html