在CentOS系统上发布Java项目是企业级应用部署的常见场景,涉及环境搭建、项目打包、服务配置及优化等多个环节,本文将详细介绍从基础准备到最终部署的完整流程,确保项目能够稳定、高效运行。

环境准备
-
系统基础配置
首先确保CentOS系统已更新至最新版本,通过yum update -y安装必要依赖包,如wget、vim、unzip等,关闭防火墙或配置安全策略(firewall-cmd --add-port=8080/tcp --permanent),开放项目所需端口,建议创建专用部署用户(如deploy),避免使用root操作,提升安全性。 -
安装JDK
Java项目依赖JDK环境,推荐使用OpenJDK,以JDK 11为例,执行以下命令安装:yum install java-11-openjdk-devel -y
安装后通过
java -version验证版本,并配置JAVA_HOME环境变量(编辑/etc/profile文件,添加export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.12.0.7-0.el7_9.x86_64,并使配置生效source /etc/profile)。
项目打包与上传
-
构建项目
使用Maven或Gradle进行项目构建,在本地开发环境中执行mvn clean package -DskipTests生成可执行JAR或WAR包,若为Spring Boot项目,默认生成fat jar,包含所有依赖,便于部署。 -
上传至服务器
通过scp、rsync或FTP工具将打包文件上传至CentOS服务器的指定目录(如/opt/app)。scp target/myapp.jar root@服务器IP:/opt/app/
确保文件所有者为部署用户,权限设置为
755(chmod 755 myapp.jar)。
部署与运行
-
直接运行(测试环境)
前台运行适合快速测试,通过java -jar myapp.jar启动项目,若需后台运行,可使用nohup结合&:nohup java -jar myapp.jar > app.log 2>&1 &
日志将输出至
app.log文件,便于排查问题。 -
使用Systemd管理服务(生产环境)
创建系统服务文件/etc/systemd/system/myapp.service如下:[Unit] Description=My Java Application After=network.target [Service] User=deploy ExecStart=/usr/bin/java -jar /opt/app/myapp.jar SuccessExitStatus=143 Restart=always RestartSec=10 [Install] WantedBy=multi-user.target
保存后执行
systemctl daemon-reload,启动服务并设置开机自启:systemctl start myapp systemctl enable myapp
通过
systemctl status myapp查看服务状态,journalctl -u myapp -f实时查看日志。
优化与监控
-
性能调优
根据服务器资源配置JVM参数,如堆大小(-Xms512m -Xmx1024m)、垃圾回收器(-XX:+UseG1GC)等,对于高并发场景,可结合Nginx反向代理,实现负载均衡和静态资源分离。
-
日志与监控
配置日志轮转(logrotate)避免日志文件过大,集成Prometheus + Grafana或ELK Stack实现实时监控,包括CPU、内存、JVM GC指标及业务接口响应时间。
常见问题处理
- 端口冲突:检查端口占用情况(
netstat -tulnp | grep 8080),修改项目配置或终止占用进程。 - 内存溢出:通过
jmap -dump:format=b,file=heapdump.hprof <pid>生成堆转储文件,使用MAT工具分析内存泄漏原因。 - 服务启动失败:检查
/var/log/messages或journalctl日志,确认依赖服务(如MySQL、Redis)是否正常运行。
FAQs
Q1:如何查看Java应用的实时日志?
A:若通过nohup运行,可通过tail -f app.log查看;若使用Systemd管理,执行journalctl -u myapp -f(-f参数用于实时跟踪日志输出)。
Q2:如何实现Java项目的自动重启?
A:推荐使用systemd的Restart=always选项(如上文服务配置所示),或结合supervisord工具管理进程,确保进程异常退出后自动拉起,同时可配置健康检查接口,结合curl脚本定时检测服务状态。