Ubuntu Java应用部署指南
导读:Ubuntu Java应用部署指南 一 环境准备与Java安装 更新系统并安装 OpenJDK(生产常用 OpenJDK 11 或 OpenJDK 17): 安装命令:sudo apt update && sudo ap...
Ubuntu Java应用部署指南
一 环境准备与Java安装
- 更新系统并安装 OpenJDK(生产常用 OpenJDK 11 或 OpenJDK 17):
- 安装命令:
sudo apt update & & sudo apt install openjdk-11-jdk -y - 验证版本:
java -version、javac -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
- Maven:
- 版本选择建议:传统项目常用 Java 8/11,新项目或 Spring Boot 3+ 建议使用 Java 17+。
二 构建与发布
- 方式一 直接运行可执行 JAR(适合快速验证与小型服务)
- 上传 JAR 至目录(如 /var/www/java-app),运行:
java -jar /var/www/java-app/app.jar - 前台运行便于观察日志;生产环境建议使用 systemd 托管(见下一节)。
- 上传 JAR 至目录(如 /var/www/java-app),运行:
- 方式二 构建后部署(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/
- Maven:
- 方式三 容器化部署(环境一致、易扩展)
- 示例 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
- 示例 Dockerfile(多阶段构建,基于 Eclipse Temurin LTS):
- 方式四 部署到 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。
- 安装与启动 Tomcat(示例 9.0.74):
三 运行与进程托管
- 使用 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
- 创建服务文件 /etc/systemd/system/java-app.service:
- 使用 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。
- 放行 HTTP/HTTPS:
四 监控与维护
- 系统资源与 Java 工具
- 资源监控:
top/htop(安装:sudo apt install htop -y) - Java 进程与诊断:
jps -v、jstat、jstack、jmap - 可视化监控:JDK 自带 VisualVM,或安装 jtop(如
sudo apt install python3-pip & & pip3 install jtop后运行jtop)
- 资源监控:
- 日志管理
- systemd 日志:
journalctl -u java-app -f - 应用日志:使用 Logback/Log4j2 输出到文件,结合 logrotate 做按日切分与保留策略
- systemd 日志:
- 更新与回滚
- 蓝绿/滚动更新:先部署新版本包,完成健康检查后切换流量;失败则切回旧包
- 快速回滚:保留上一版本产物与备份配置,使用 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
- 内存与 GC:
- 数据库与密钥:最小权限账号、SSL 连接、密钥/证书集中管理,禁止明文配置。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Java应用部署指南
本文地址: https://pptw.com/jishu/781765.html
