CentOS系统部署Java项目的详细步骤与指南
CentOS 服务器部署 Java 项目完整指南

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
一、 环境准备与配置
成功的项目部署始于稳固的基础环境搭建。这如同建造高楼前必须夯实的地基,每一个环节都至关重要。
- 安装 JDK:Java 应用的运行离不开 Java 开发工具包。以安装 OpenJDK 8 为例,执行命令即可完成:
sudo yum install ja va-1.8.0-openjdk-devel -y。安装后务必使用ja va -version和ja vac -version验证安装结果。若需安装 OpenJDK 11 等更新版本,只需替换命令中的版本号:sudo yum install ja va-11-openjdk-devel -y。 - 配置环境变量:此步骤虽非强制,但强烈建议执行。它能确保你在系统任意位置便捷地调用 Java 命令。编辑
/etc/profile或/etc/profile.d/ja va.sh文件,添加以下配置:
保存文件后,执行export JA VA_HOME=/usr/lib/jvm/ja va-1.8.0-openjdk export PATH=$JA VA_HOME/bin:$PATHsource /etc/profile使配置立即生效。 - 安装 Web 容器:若部署 Web 应用,Tomcat 是经典且可靠的选择。以 Tomcat 9 为例,下载并解压至
/opt目录:
随后,设置wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.53/bin/apache-tomcat-9.0.53.tar.gz tar -xvf apache-tomcat-9.0.53.tar.gz -C /optCATALINA_HOME=/opt/apache-tomcat-9.0.53并将其加入 PATH 环境变量,便于后续管理 Tomcat 服务。 - 防火墙端口放行:确保外部能够访问应用。Tomcat 默认监听 8080 端口,需在防火墙中开放:
sudo firewall-cmd --permanent --add-port=8080/tcp && sudo firewall-cmd --reload。
二、 项目构建与文件上传
将本地开发完成的代码,转化为可在服务器上运行的部署包,是部署流程的核心环节。
- 项目构建方式:根据项目使用的构建工具,执行相应命令生成部署包。
- Maven 项目:在项目根目录执行
mvn clean package,生成的 JAR 或 WAR 文件通常位于target/目录。 - Gradle 项目:在项目根目录执行
gradle build,构建产物将生成在build/libs/目录中。 - 无构建工具项目:需手动编译打包。首先使用
ja vac命令编译源代码,然后使用类似jar cvfe app.jar com.example.Main -C bin .的命令进行打包。
- Maven 项目:在项目根目录执行
- 上传至服务器:使用 SCP 命令将构建好的文件传输到 CentOS 服务器。
- 上传可执行 JAR 包:
scp target/app.jar user@your_ip:/opt/app/ - 上传 WAR 包至 Tomcat:
scp target/app.war user@your_ip:/opt/apache-tomcat-9.0.53/webapps/
- 上传可执行 JAR 包:
- 推荐目录结构:为便于管理和维护,建议在服务器上建立清晰的目录结构。例如:
/opt/app/存放应用主程序,/opt/logs/存放日志文件,/opt/conf/存放配置文件。规范的结构能显著提升运维效率。
三、 应用运行与进程管理
应用文件就位后,如何确保其稳定、可靠地持续运行?以下是几种关键的运行与管理方式。
- 直接运行:适用于快速测试与调试。
- 前台运行:
cd /opt/app && ja va -jar app.jar,日志将实时输出到当前终端。 - 后台运行:
nohup ja va -jar app.jar > /opt/logs/app.log 2>&1 &,此方式下即使关闭 SSH 连接,应用进程也不会终止。
- 前台运行:
- 使用 systemd 服务托管:这是生产环境部署的推荐方案。systemd 提供强大的进程生命周期管理能力,支持开机自启、故障自动重启等。
- 创建服务配置文件:
sudo vi /etc/systemd/system/myapp.service - 写入以下配置示例:
[Unit] Description=My Ja va Application After=syslog.target network.target [Service] User=appuser WorkingDirectory=/opt/app ExecStart=/usr/bin/ja va -jar /opt/app/app.jar SuccessExitStatus=143 Restart=on-failure RestartSec=10 Environment="JA VA_OPTS=-Xms512m -Xmx1g" [Install] WantedBy=multi-user.target - 启用并启动服务:
sudo systemctl daemon-reload && sudo systemctl start myapp && sudo systemctl enable myapp - 监控服务状态与日志:
sudo systemctl status myapp或journalctl -u myapp -f
- 创建服务配置文件:
四、 Web 应用部署至 Tomcat
对于基于 Servlet 的 Java Web 应用,Tomcat 是广泛使用的部署容器。其部署流程标准化,管理便捷。
- 部署 WAR 包:将构建好的
target/app.war文件,直接复制到 Tomcat 的$CATALINA_HOME/webapps/目录下。Tomcat 会自动解压该文件并完成应用部署。 - 启动与访问验证:通过执行
$CATALINA_HOME/bin/startup.sh脚本启动 Tomcat。若已配置为 systemd 服务,则可使用systemctl start tomcat。启动成功后,在浏览器中访问http://your_server_ip:8080/app即可(其中“app”对应 WAR 文件名)。若需将应用部署为根路径,只需将 WAR 文件重命名为ROOT.war。 - 常用管理操作:
- 停止服务:
$CATALINA_HOME/bin/shutdown.sh - 热部署:直接替换
webapps目录下的 WAR 文件后重启 Tomcat。更推荐的方式是使用 Tomcat Manager 控制台进行在线部署与管理。
- 停止服务:
五、 生产环境进阶优化建议
完成基础部署后,以下进阶技巧有助于提升应用在生产环境中的性能、稳定性与可维护性。
- 生产参数调优:在
systemd服务的Environment="JA VA_OPTS=..."中,可配置关键的 JVM 参数,例如堆内存大小(-Xms512m -Xmx1g)、垃圾回收器选择、JMX 远程监控端口等。同时,出于安全考虑,建议为应用创建独立的低权限系统用户(如 appuser)来运行服务。 - 日志与监控体系:将应用日志统一输出至
/opt/logs/目录,便于集中收集与分析。可结合journalctl工具查看,或配置logrotate实现日志自动轮转,避免磁盘空间被占满。对于更全面的可观测性,可考虑集成 Prometheus + Grafana 进行指标监控,或使用 ELK(Elasticsearch, Logstash, Kibana)技术栈进行日志分析。 - 自动化与容器化部署:手动部署流程繁琐且易出错。引入 Jenkins、GitLab CI/CD 等工具建立自动化部署流水线,可实现从代码提交到服务上线的全流程自动化。更进一步,采用容器化部署方案(如编写 Dockerfile 构建镜像,使用 Docker Compose 或 Kubernetes 进行编排),能极大提升环境一致性、部署效率、弹性伸缩和快速回滚能力。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
Go语言嵌套结构体与数组建模指南实现清晰可维护JSON序列化
Go语言中嵌套结构体与数组的高级建模实践:清晰、可维护、符合JSON序列化规范 本文详解如何为复杂JSON结构(如含多层嵌套对象与数组)设计Go结构体,推荐显式命名类型替代匿名结构,结合导出字段、精准struct tag及构造函数,提升可读性、可测试性与跨包可用性。 在Go语言中处理复杂的JSON数
Python异步编程中全局变量安全吗ContextVars上下文变量详解
异步函数中直接读写全局变量会导致协程间上下文污染,引发用户ID错乱、权限校验错误等问题;threading local在asyncio中失效,因协程共享同一线程;应使用ContextVar配合set get reset确保上下文隔离。 异步函数里直接读写全局变量会出什么问题 不安全,而且非常容易踩坑
Python集成测试指南使用pytest搭建服务器端到端验证方法
pytest集成测试的核心挑战在于:动态分配端口以避免冲突,确保服务器完全就绪后再发起请求,实现数据库的彻底隔离,为JSON请求设置正确的请求头,并在测试结束后清理资源,防止持续集成(CI)环境失败。 pytest 启动测试服务器时端口被占怎么办 在本地运行集成测试时,你是否也经常被 Address
Python数据加权计算指南np.average函数实操详解
np a verage()加权计算:避开那些让你结果变nan的“坑” 在数据处理中,加权平均是再常见不过的操作,但np a verage()这个看似简单的函数,却暗藏玄机。一个不小心,算出来的结果全是nan,或者直接抛出AxisError,让人摸不着头脑。问题往往就出在权重参数weights的设置上
Go语言go run命令无响应问题排查与解决方案详解
Go 语言 go run 命令无输出且不退出的排查与解决 Go 程序使用 go run main go 时无控制台输出、进程不退出,常见于 Windows 平台下安全软件(如 Comodo)对 go exe 的自动隔离行为,而非代码或环境配置错误。 遇到 go run main go 命令执行后,终
- 日榜
- 周榜
- 月榜
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
相关攻略
2015-03-10 11:25
2015-03-10 11:05
2021-08-04 13:30
2015-03-10 11:22
2015-03-10 12:39
2022-05-16 18:57
2025-05-23 13:43
2025-05-23 14:01
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程
热门话题

