Linux服务器部署Java程序需要安装哪些基础环境和依赖?

在 Linux 服务器上部署 Java 程序,需根据应用类型(如 Spring Boot、传统 WAR、微服务等)和部署方式(JAR、Docker、Systemd、Tomcat 等)略有差异,但以下是最核心、通用的基础环境与依赖清单,按推荐顺序组织:

✅ 一、必备基础环境(必须安装)

组件 说明 推荐版本/注意事项
JDK(Java Development Kit) 运行 Java 应用的核心运行时环境(注意:JRE 已不推荐单独使用,生产环境建议用 JDK,便于调试、JFR、JMX、线程 dump 等) • Spring Boot 3.x+:JDK 17 或 JDK 21(LTS)
• Spring Boot 2.7.x 及更早:JDK 8/11(JDK 8 已 EOL,不建议新项目使用
• ✅ 推荐 OpenJDK(如 Eclipse Temurin 或 Amazon Corretto),免费、稳定、长期支持
Linux 基础工具 保障运维与诊断能力 curl / wget(下载依赖/健康检查)
unzip / tar(解压包)
ps, top, htop, netstat / ss(进程/端口监控)
lsof(查看文件/端口占用)
journalctl(日志查看,配合 systemd)

✅ 二、常见可选但强烈推荐的依赖(提升稳定性、可观测性与运维效率)

类别 组件 说明 推荐场景
系统服务管理 systemd(默认已存在) 用于将 Java 应用作为系统服务托管(自动启动、崩溃重启、日志集成) ✅ 所有生产部署(替代 nohup & screen)
反向X_X & 负载均衡 nginxApache HTTPD • 提供 HTTPS 终止、静态资源服务、负载均衡、访问控制、防 DDOS
• 避免直接暴露 Java 应用端口(如 8080)
Web 应用(尤其对外服务)、多实例部署
安全加固 ufw(Ubuntu)或 firewalld(RHEL/CentOS) 配置防火墙规则,仅开放必要端口(如 443/80/22,禁止开放 8080/8009 等内部端口 ✅ 所有公网服务器(安全基线要求)
日志管理 rsyslog / logrotate logrotate:自动轮转 Java 应用日志(避免磁盘爆满)
• 可对接 ELK / Loki / Grafana 进行集中日志分析
生产环境必备(尤其高流量应用)
监控与诊断 jstat, jstack, jmap, jcmd(JDK 自带)
+ 可选:Prometheus + JMX ExporterMicrometer
JVM 性能监控(GC、内存、线程)、堆转储分析、远程 JMX(需安全配置) 中大型应用、需性能调优或 SLA 保障的系统

✅ 三、按部署方式补充的关键依赖

部署方式 额外依赖 说明
WAR 包 + Tomcat/Jetty tomcat9(或 tomcat10,注意 Jakarta EE 兼容性) • Spring Boot 3+ 默认使用 Jakarta EE 9+,需 Tomcat 10+
• Tomcat 9 仅支持 Java EE 8(对应 Spring Boot 2.7)
• ✅ 建议优先使用 Spring Boot 内嵌容器(jar 直接运行),简化部署
Docker 容器化 docker-ce + containerd • 使用官方 OpenJDK 基础镜像(如 eclipse-temurin:17-jre-jammy
• 配合 Docker Compose / Kubernetes 编排
• ✅ 推荐现代云原生部署方式
数据库连接 对应 JDBC 驱动(通常打包在应用中) • 如 MySQL → mysql-connector-j(8.0+)
• PostgreSQL → postgresql driver
• ⚠️ 无需在系统级安装数据库客户端(除非需要手动调试),驱动由应用自带即可
消息中间件(如 Kafka/RabbitMQ) 客户端库(应用内含)+ 服务端(独立部署) • 客户端代码依赖已内置,无需系统安装
• 服务端需单独部署(如 Kafka 集群、RabbitMQ Server)

⚠️ 四、重要注意事项(避坑指南)

  1. 不要安装 Oracle JDK(商业版)
    → 免费使用受限(自 JDK 17 起需付费商用),推荐 Eclipse Temurin / Corretto / Zulu(全免费、LTS、企业级支持)。

  2. 环境变量规范设置

    # /etc/profile.d/java.sh (全局生效)
    export JAVA_HOME=/opt/java/jdk-17.0.1+12
    export PATH=$JAVA_HOME/bin:$PATH

    ✅ 验证:java -version && echo $JAVA_HOME

  3. 用户隔离与权限最小化
    → 创建专用非 root 用户(如 appuser)运行 Java 进程,禁止以 root 启动应用(安全合规要求)。

  4. 时区与编码统一

    sudo timedatectl set-timezone Asia/Shanghai
    echo 'export LANG=en_US.UTF-8' | sudo tee -a /etc/environment
  5. JVM 启动参数建议(生产示例)

    java -Xms512m -Xmx2g 
        -XX:+UseG1GC 
        -XX:MaxGCPauseMillis=200 
        -Dfile.encoding=UTF-8 
        -Duser.timezone=Asia/Shanghai 
        -jar myapp.jar --spring.profiles.active=prod

✅ 五、一键检查清单(部署前执行)

# 1. JDK 版本与路径
java -version && echo $JAVA_HOME

# 2. 端口是否被占用(如 8080)
ss -tuln | grep ':8080'

# 3. 防火墙状态
sudo ufw status verbose  # Ubuntu
# 或
sudo firewall-cmd --state  # RHEL

# 4. 检查可用内存与磁盘
free -h && df -h

# 5. 验证 systemd 服务模板(如 /etc/systemd/system/myapp.service)

📌 总结一句话:

生产环境最低要求 = OpenJDK 17/21 + systemd + logrotate + ufw/firewalld;推荐增强 = nginx(HTTPS)+ Prometheus/JMX(监控)+ Docker(标准化)+ 专用非 root 用户。

如需,我可为你提供:

  • ✅ 完整的 systemd 服务配置模板(含 JVM 参数、日志重定向、重启策略)
  • ✅ Nginx 反向X_X + HTTPS(Let’s Encrypt)配置示例
  • ✅ Spring Boot 应用 Dockerfile 最佳实践
  • ✅ JVM 参数调优速查表(按内存大小/场景)

欢迎告知你的具体技术栈(如 Spring Boot 版本、是否用数据库/Redis/Kafka、是否容器化),我可以给出定制化部署方案 👇

未经允许不得转载:ECLOUD博客 » Linux服务器部署Java程序需要安装哪些基础环境和依赖?