温馨提示×

Ubuntu Java应用部署指南

小樊
31
2025-12-26 03:41:56
栏目: 编程语言

Ubuntu Java应用部署指南

一 环境准备与Java安装

  • 更新系统并安装 OpenJDK(生产常用 OpenJDK 11OpenJDK 17):
    • 安装命令:sudo apt update && sudo apt install openjdk-11-jdk -y
    • 验证版本:java -versionjavac -version
  • 配置 JAVA_HOME(全局生效,推荐写入 /etc/environment):
    • 查看路径:sudo update-alternatives --config java(复制所选 JDK 的安装前缀,如 /usr/lib/jvm/java-11-openjdk-amd64
    • 写入环境:echo 'JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"' | sudo tee -a /etc/environment
    • 使生效:source /etc/environment
  • 可选:如需构建项目,安装 Maven/Gradle
    • Maven:sudo apt install maven -y,验证:mvn -v
    • Gradle:sudo apt install gradle -y,验证:gradle -v
  • 版本选择建议:传统项目常用 Java 8/11,新项目或 Spring Boot 3+ 建议使用 Java 17+

二 构建与发布

  • 方式一 直接运行可执行 JAR(适合快速验证与小型服务)
    • 上传 JAR 至目录(如 /var/www/java-app),运行:java -jar /var/www/java-app/app.jar
    • 前台运行便于观察日志;生产环境建议使用 systemd 托管(见下一节)。
  • 方式二 构建后部署(Maven/Gradle)
    • Maven:mvn clean package,产物在 target/yourapp.jar
    • Gradle:gradle build,产物在 build/libs/yourapp.jar
    • 传输到服务器:scp target/yourapp.jar user@server:/var/www/java-app/
  • 方式三 容器化部署(环境一致、易扩展)
    • 示例 Dockerfile(多阶段构建,基于 Eclipse Temurin LTS):
      FROM eclipse-temurin:17-jre-jammy AS runtime
      WORKDIR /app
      COPY target/app.jar /app/app.jar
      EXPOSE 8080
      ENTRYPOINT ["java","-jar","/app/app.jar"]
      
    • 构建与运行:
      docker build -t myapp:1.0 .
      docker run -d -p 8080:8080 --name myapp myapp:1.0
      
  • 方式四 部署到 Tomcat(WAR 应用)
    • 安装与启动 Tomcat(示例 9.0.74):
      cd /usr/local
      sudo wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.74/bin/apache-tomcat-9.0.74.tar.gz
      sudo tar xzf apache-tomcat-9.0.74.tar.gz
      sudo mv apache-tomcat-9.0.74 tomcat
      export CATALINA_HOME=/usr/local/tomcat
      $CATALINA_HOME/bin/startup.sh
      
    • 部署 WAR:将 myapp.war 复制到 $CATALINA_HOME/webapps/,访问 http://your_ip:8080/myapp

三 运行与进程托管

  • 使用 systemd 托管(推荐)
    • 创建服务文件 /etc/systemd/system/java-app.service
      [Unit]
      Description=Java Web Application
      After=network.target
      
      [Service]
      User=www-data
      WorkingDirectory=/var/www/java-app
      ExecStart=/usr/bin/java -jar /var/www/java-app/app.jar
      SuccessExitStatus=143
      TimeoutStopSec=10
      Restart=always
      RestartSec=5
      
      [Install]
      WantedBy=multi-user.target
      
    • 常用命令:
      sudo systemctl daemon-reload
      sudo systemctl start java-app
      sudo systemctl enable java-app
      sudo systemctl status java-app
      sudo journalctl -u java-app -f
      
  • 使用 Nginx 反向代理(对外 80/443,后端 8080)
    • 安装:sudo apt install nginx -y
    • 配置 /etc/nginx/sites-available/default
      server {
        listen 80;
        server_name your-domain.com;
        location / {
          proxy_pass http://127.0.0.1:8080;
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
      }
      
    • 校验与生效:sudo nginx -t && sudo systemctl restart nginx
  • 防火墙放行(UFW)
    • 放行 HTTP/HTTPS:sudo ufw allow 80,443/tcp;如需直连应用端口:sudo ufw allow 8080/tcp

四 监控与维护

  • 系统资源与 Java 工具
    • 资源监控:top/htop(安装:sudo apt install htop -y
    • Java 进程与诊断:jps -vjstatjstackjmap
    • 可视化监控:JDK 自带 VisualVM,或安装 jtop(如 sudo apt install python3-pip && pip3 install jtop 后运行 jtop
  • 日志管理
    • systemd 日志:journalctl -u java-app -f
    • 应用日志:使用 Logback/Log4j2 输出到文件,结合 logrotate 做按日切分与保留策略
  • 更新与回滚
    • 蓝绿/滚动更新:先部署新版本包,完成健康检查后切换流量;失败则切回旧包
    • 快速回滚:保留上一版本产物与备份配置,使用 systemd 重启旧版本服务。

五 安全与优化

  • 最小权限运行:systemd 中设置 User=www-data,避免使用 root
  • 端口与暴露面:仅开放 80/443 给公网,管理端口限制内网访问
  • 依赖与构建安全:使用可信基础镜像/仓库,定期更新依赖与系统补丁
  • JVM 与启动优化(示例)
    • 内存与 GC:-Xms512m -Xmx2g -XX:+UseG1GC
    • 熵源加速(容器/虚拟机):-Djava.security.egd=file:/dev/./urandom
    • 优雅停机:-Dspring.profiles.active=prod 配合 server.shutdown=graceful
  • 数据库与密钥:最小权限账号、SSL 连接、密钥/证书集中管理,禁止明文配置。

0