
在企业级 IT 架构中,堡垒机作为网络安全的重要屏障,承担着集中管控服务器访问、记录操作日志、防范未授权操作的关键作用。对于 Java 项目而言,在堡垒机环境下的部署与传统直连服务器部署存在显著差异,需要兼顾安全性与部署效率。本文将从环境准备、部署流程、常见问题解决三个维度,详细讲解如何在堡垒机架构下完成 Java 项目的安全部署。

堡垒机(Bastion Host)本质是一台部署在 DMZ 区(隔离区)的专用服务器,所有对后端应用服务器的操作都必须通过堡垒机中转。在 Java 项目部署场景中,堡垒机的核心作用体现在三个方面:
对于 Java 项目而言,常见的部署形态(Jar 包、War 包、Docker 容器)在堡垒机环境下均需遵循 “堡垒机中转” 的核心逻辑,区别主要体现在文件传输路径与进程管理方式上。
在正式部署 Java 项目前,需完成堡垒机与后端服务器的环境配置,确保链路通畅且符合安全规范。

java_deploy);java、javac、jps、nohup、kill(需指定进程 ID)等与 Java 项目部署相关的命令,禁止rm -rf等高风险命令。\# 在客户端生成密钥对
ssh-keygen -t rsa -b 4096 -C "java\_deploy@bastion"
\# 将公钥上传至堡垒机
ssh-copy-id -p 堡垒机端口 java\_deploy@堡垒机IP
\# 堡垒机端配置后端服务器免密(由运维操作)
ssh-copy-id -p 后端服务器端口 应用账号@后端服务器IP确保后端服务器已安装对应版本的 JDK(需与 Java 项目编译版本匹配),通过堡垒机登录后执行验证命令:
\# 检查JDK版本
java -version
\# 确认JAVA\_HOME环境变量
echo \$JAVA\_HOME若未配置JAVA_HOME,需在/etc/profile或用户目录下的.bashrc中添加:
export JAVA\_HOME=/usr/local/jdk1.8.0\_381
export PATH=\$JAVA\_HOME/bin:\$PATH为避免文件混乱,建议创建统一的目录结构(通过堡垒机执行命令):
\# 创建项目根目录
mkdir -p /data/java/projects/\[项目名称]
\# 细分目录:jar包存放、日志、配置文件
mkdir -p /data/java/projects/\[项目名称]/lib # Jar包目录
mkdir -p /data/java/projects/\[项目名称]/logs # 日志目录
mkdir -p /data/java/projects/\[项目名称]/conf # 配置文件目录
\# 设置目录权限(仅应用账号可读写)
chown -R appuser:appuser /data/java/projects/\[项目名称]
chmod -R 750 /data/java/projects/\[项目名称]Jar 包是 Spring Boot 项目最常见的部署形态,在堡垒机环境下的部署流程可分为 “文件传输 - 进程启停 - 日志验证” 三个核心步骤。
由于客户端无法直接访问后端服务器,需通过堡垒机完成 Jar 包与配置文件的传输,常见有两种方式:
\# 本地 -> 堡垒机 -> 后端服务器(一步到位)
scp -o ProxyJump=java\_deploy@堡垒机IP:堡垒机端口 \\
本地Jar包路径 \\
appuser@后端服务器IP:/data/java/projects/\[项目名称]/lib/ProxyJump参数用于指定堡垒机作为跳板,直接实现 “本地 - 后端服务器” 的文件传输,无需先上传至堡垒机再转发,提升效率。java_deploy与密码;/data/java/projects/[项目名称]/lib/目录,直接拖拽本地 Jar 包完成传输。所有操作需先通过 SSH 连接堡垒机,再由堡垒机跳转至后端服务器执行命令,核心是避免直接操作后端服务器。
\# 1. 登录堡垒机
ssh java\_deploy@堡垒机IP -p 堡垒机端口
\# 2. 从堡垒机跳转至后端服务器
ssh appuser@后端服务器IP -p 后端服务器端口
\# 3. 查询Java项目进程(通过项目Jar包名称筛选)
jps -ml | grep \[项目Jar包名称]
\# 4. 停止进程(替换为实际PID)
kill -15 进程PID
\# 5. 验证进程是否已停止(无输出则表示已停止)
jps -ml | grep \[项目Jar包名称]kill -15(优雅停止)而非kill -9(强制杀死),避免数据丢失或资源泄漏。为确保项目在断开 SSH 连接后仍能持续运行,需使用nohup命令将进程挂载到后台:
\# 切换至项目Jar包目录
cd /data/java/projects/\[项目名称]/lib
\# 启动命令(指定日志输出路径、JVM参数)
nohup java -Xms512m -Xmx1024m -jar \[项目Jar包名称].jar \\
\--spring.config.location=/data/java/projects/\[项目名称]/conf/application.yml \\
\> /data/java/projects/\[项目名称]/logs/start.log 2>&1 &-Xms512m:初始堆内存,-Xmx1024m:最大堆内存(根据服务器配置调整);
--spring.config.location:指定外部配置文件路径(避免硬编码,便于修改);
> start.log 2>&1:将标准输出与错误输出重定向至日志文件,便于排查问题。启动后需通过日志确认项目是否正常运行,避免因配置错误导致部署失败:
\# 查看启动日志(实时滚动)
tail -f /data/java/projects/\[项目名称]/logs/start.log
\# 关键验证点:日志中出现“Started \[项目主类] in XX seconds”表示启动成功若日志出现错误(如端口被占用、配置文件缺失),需通过堡垒机修改配置文件后重新执行启停流程。
若 Java 项目为传统 Web 项目(War 包),需依赖 Tomcat 容器部署,流程与 Jar 包的核心差异在于 “部署路径” 与 “容器管理”。
chown -R appuser:appuser /usr/local/tomcat;\# 1. 传输War包至Tomcat的webapps目录(通过堡垒机中转)
scp -o ProxyJump=java\_deploy@堡垒机IP:堡垒机端口 \\
本地War包路径 \\
appuser@后端服务器IP:/usr/local/tomcat/webapps/
\# 2. 从堡垒机登录后端服务器,停止Tomcat
cd /usr/local/tomcat/bin
./shutdown.sh
\# 3. 清理旧部署文件(若需更新)
rm -rf /usr/local/tomcat/webapps/\[War包解压后的目录]
\# 4. 启动Tomcat
./startup.sh
\# 5. 查看Tomcat日志(验证部署)
tail -f /usr/local/tomcat/logs/catalina.out在堡垒机环境下部署 Java 项目时,易遇到链路不通、权限不足、进程异常等问题,以下为高频问题的解决思路:
telnet 后端服务器IP 后端服务器端口);--spring.config.location指定的路径不存在); 查看日志定位错误:cat /data/java/projects/[项目名称]/logs/start.log | grep ERROR;
端口占用处理:netstat -tuln | grep 端口号找到占用进程,停止该进程或修改项目端口。
java_deploy账号关联该策略。
堡垒机环境下的 Java 项目部署,核心是在 “安全管控” 与 “部署效率” 之间找到平衡。通过本文的流程,可实现 “客户端 - 堡垒机 - 后端服务器” 的安全链路闭环,既满足企业级安全规范,又能高效完成项目迭代部署。在实际操作中,需根据项目形态(Jar/War/Docker)调整细节,并结合自动化工具提升部署效率,最终实现安全、稳定、可追溯的 Java 项目部署体系。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。