在 TencentOS Server 3.1(基于 CentOS Stream 8 / RHEL 8 兼容内核,腾讯定制优化的国产服务器操作系统)上部署 Java Web 应用,需遵循安全、稳定、可维护的原则。以下是完整、生产就绪的部署指南,涵盖环境准备、应用构建、Web 容器选择(推荐 Tomcat)、反向X_X、系统服务化及安全加固等关键环节。
✅ 一、系统环境确认(TencentOS Server 3.1)
# 查看系统版本(确认为 TencentOS Server 3.1)
cat /etc/tencentos-release
# 输出示例:TencentOS Server 3.1 (Final)
# 检查内核与架构(x86_64 / aarch64)
uname -r && uname -m
⚠️ 注意:TencentOS Server 3.1 默认使用
dnf(非 yum),且已预装 OpenJDK 11/17(建议优先使用系统仓库提供的 JDK)。
✅ 二、安装并配置 JDK(推荐系统自带 OpenJDK 17)
# 1. 查看可用 JDK(TencentOS 3.1 官方仓库提供多个版本)
dnf list available java-*openjdk*
# 2. 安装 OpenJDK 17(LTS,生产推荐)
sudo dnf install -y java-17-openjdk-devel java-17-openjdk-headless
# 3. 验证安装
java -version
# 输出应类似:openjdk version "17.0.10" 2024-04-16
# 4. 设置 JAVA_HOME(写入全局环境)
echo 'export JAVA_HOME=/usr/lib/jvm/java-17-openjdk' | sudo tee -a /etc/profile.d/java.sh
echo 'export PATH=$JAVA_HOME/bin:$PATH' | sudo tee -a /etc/profile.d/java.sh
source /etc/profile.d/java.sh
# 5. (可选)设为默认 Java(如系统存在多版本)
sudo alternatives --config java # 交互选择
✅ 优势:系统 JDK 已适配 TencentOS 内核优化(如 ZGC、JFR 支持),且通过安全更新通道维护。
✅ 三、部署 Web 应用(以 Spring Boot WAR/ROOT.war 或传统 WAR 为例)
▶ 方式 1:Spring Boot 内嵌 Tomcat(推荐,简化运维)
- 构建时确保
pom.xml中 不 排除spring-boot-starter-tomcat(默认包含) - 打包为可执行 JAR(非 WAR):
<!-- pom.xml --> <packaging>jar</packaging> - 使用
mvn clean package生成target/your-app.jar
▶ 方式 2:标准 WAR 包(部署到独立 Tomcat)
- 确保
pom.xml中<packaging>war</packaging>,并继承SpringBootServletInitializer - 构建生成
target/your-app.war
✅ 四、安装并配置 Apache Tomcat(9.0.x 或 10.1.x)
📌 TencentOS 3.1 官方源暂未提供 Tomcat,推荐手动部署(更可控、安全):
# 1. 创建专用用户(禁止登录,提升安全性)
sudo useradd -r -s /sbin/nologin tomcat
# 2. 下载 Tomcat(以 9.0.92 LTS 为例,适配 JDK 17)
cd /opt
sudo wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.92/bin/apache-tomcat-9.0.92.tar.gz
sudo tar -xzf apache-tomcat-9.0.92.tar.gz
sudo mv apache-tomcat-9.0.92 tomcat
sudo chown -R tomcat:tomcat /opt/tomcat
sudo chmod -R u+x /opt/tomcat/bin/
# 3. 配置 Tomcat 环境(/opt/tomcat/bin/setenv.sh)
sudo tee /opt/tomcat/bin/setenv.sh << 'EOF'
#!/bin/bash
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
export JRE_HOME=$JAVA_HOME/jre
export CATALINA_HOME=/opt/tomcat
export CATALINA_BASE=/opt/tomcat
export CATALINA_PID=/opt/tomcat/temp/tomcat.pid
export CATALINA_OUT=/opt/tomcat/logs/catalina.out
# JVM 调优(根据内存调整)
export JAVA_OPTS="-server -Xms512m -Xmx1024m -XX:+UseG1GC -Dfile.encoding=UTF-8"
EOF
sudo chmod +x /opt/tomcat/bin/setenv.sh
# 4. (重要)禁用默认管理页面(生产必须!)
sudo rm -rf /opt/tomcat/webapps/{manager,host-manager}
# 如需远程管理,后续通过 SSH 端口转发或堡垒机访问
✅ 五、部署应用
▶ 若为 Spring Boot JAR:
# 上传 your-app.jar 到 /opt/app/
sudo mkdir -p /opt/app
sudo cp your-app.jar /opt/app/
sudo chown tomcat:tomcat /opt/app/your-app.jar
# 启动(后台运行 + 日志重定向)
sudo -u tomcat nohup java -jar /opt/app/your-app.jar
--server.port=8080
--spring.profiles.active=prod
> /opt/app/app.log 2>&1 &
echo $! | sudo tee /opt/app/app.pid # 记录 PID
▶ 若为 WAR 包(部署到 Tomcat):
# 清空默认应用,部署自定义 WAR
sudo rm -rf /opt/tomcat/webapps/{ROOT,docs,examples,manager,host-manager}
sudo cp your-app.war /opt/tomcat/webapps/ROOT.war
sudo chown tomcat:tomcat /opt/tomcat/webapps/ROOT.war
# 启动 Tomcat
sudo -u tomcat /opt/tomcat/bin/startup.sh
🔍 验证:
curl http://localhost:8080/(应返回应用首页或健康检查端点)
✅ 六、配置反向X_X(Nginx — TencentOS 自带,推荐)
# 1. 安装 Nginx(TencentOS 3.1 默认源已包含)
sudo dnf install -y nginx
# 2. 配置站点(/etc/nginx/conf.d/your-app.conf)
sudo tee /etc/nginx/conf.d/your-app.conf << 'EOF'
upstream backend {
server 127.0.0.1:8080;
# 如需负载均衡,可添加多台 server
}
server {
listen 80;
server_name your-domain.com; # 替换为实际域名
client_max_body_size 100M;
# 静态资源缓存(可选)
location ~* .(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
# X_X到后端
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
}
# 健康检查端点(如 Spring Boot Actuator)
location /actuator/health {
proxy_pass http://backend;
}
}
EOF
# 3. 启用并启动 Nginx
sudo systemctl enable nginx
sudo systemctl start nginx
# 4. 开放防火墙(如启用 firewalld)
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload
✅ 效果:用户通过
http://your-domain.com访问,Nginx 处理 HTTPS 终止(后续可加 SSL)、静态资源、负载均衡。
✅ 七、配置 Systemd 服务(实现开机自启 & 进程守护)
▶ Tomcat 服务(/etc/systemd/system/tomcat.service):
[Unit]
Description=Apache Tomcat Web Application Container
After=network.target
[Service]
Type=forking
User=tomcat
Group=tomcat
Environment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk"
Environment="CATALINA_HOME=/opt/tomcat"
Environment="CATALINA_BASE=/opt/tomcat"
Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid"
Environment="CATALINA_OUT=/opt/tomcat/logs/catalina.out"
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable tomcat
sudo systemctl start tomcat
sudo systemctl status tomcat # ✅ 验证运行状态
▶ Spring Boot JAR 服务(/etc/systemd/system/your-app.service):
[Unit]
Description=Your Spring Boot Application
After=network.target
[Service]
Type=simple
User=tomcat
WorkingDirectory=/opt/app
ExecStart=/usr/bin/java -jar /opt/app/your-app.jar --spring.profiles.active=prod
Restart=always
RestartSec=10
Environment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk"
[Install]
WantedBy=multi-user.target
✅ 八、安全加固(TencentOS 特色实践)
| 项目 | 操作 |
|---|---|
| SELinux | TencentOS 默认启用 enforcing,无需关闭;若遇权限问题,用 audit2why 分析,不推荐 disable |
| 最小权限 | 所有应用文件属主为 tomcat,目录权限 750,WAR/JAR 文件 640 |
| 日志审计 | 启用 rsyslog + logrotate,定期归档 /opt/tomcat/logs/ 和 /opt/app/app.log |
| 漏洞防护 | 定期 sudo dnf update --security;监控 TencentOS 安全公告 |
| JVM 安全 | 在 JAVA_OPTS 中添加 -Djava.security.manager(需定制策略)或禁用危险特性(如 -Dcom.sun.jndi.ldap.object.trustURLCodebase=false) |
✅ 九、监控与日志(可选增强)
- 应用层:集成 Spring Boot Actuator + Prometheus + Grafana
- 系统层:使用 Tencent Cloud Monitor Agent(官方文档)采集 CPU/内存/Tomcat 线程池指标
- 日志集中:Filebeat → Tencent Cloud CLS(日志服务)或 ELK
✅ 十、常见问题排查
| 现象 | 解决方案 |
|---|---|
Failed to bind to 0.0.0.0:8080 |
sudo ss -tulnp | grep :8080 查端口占用;检查 server.port 配置 |
404 Not Found(Tomcat) |
检查 /opt/tomcat/webapps/ROOT.war 是否解压成功;查看 catalina.out 日志 |
Permission denied 启动失败 |
sudo chown -R tomcat:tomcat /opt/tomcat;检查 setenv.sh 执行权限 |
| Nginx 502 Bad Gateway | curl http://127.0.0.1:8080 测试后端是否通;检查 proxy_pass 地址和端口 |
✅ 总结:最佳实践清单
| 项目 | 推荐方案 |
|---|---|
| JDK | TencentOS 系统自带 java-17-openjdk-devel |
| 容器 | Spring Boot 内嵌 Tomcat(JAR) > 独立 Tomcat(WAR) |
| 反向X_X | Nginx(TencentOS 官方维护,性能优异) |
| 进程管理 | systemd(标准化、强依赖管理) |
| 安全基线 | SELinux enforcing + 最小权限 + 定期安全更新 |
| 高可用 | Nginx upstream 多实例 + 腾讯云 CLB(负载均衡器) |
如需进一步支持,可提供:
- 您的应用类型(Spring Boot / Servlet / Jakarta EE)
- 是否需 HTTPS(可指导 Let’s Encrypt + Nginx 自动续签)
- 是否对接腾讯云服务(如 TKE 容器部署、CLS 日志、CODING CI/CD)
欢迎补充细节,我可为您定制自动化部署脚本(Shell/Ansible)或 Docker 化方案 👇
云知识