在 Ubuntu 上部署 Java 应用的实用步骤
一 准备与安装 Java
- 更新系统并安装 JDK(推荐 OpenJDK 11 或 OpenJDK 17):
- 安装命令:sudo apt update && sudo apt install openjdk-17-jdk -y
- 验证版本:java -version、javac -version
- 多版本管理(如同时装有 JDK 11/17):
- 交互选择:sudo update-alternatives --config java
- 设置环境变量(可选,便于框架/脚本识别):
- 写入全局环境:echo ‘JAVA_HOME=“/usr/lib/jvm/java-17-openjdk-amd64”’ | sudo tee -a /etc/environment
- 当前会话生效:source /etc/environment
- 验证:echo $JAVA_HOME
- 说明:Ubuntu 官方仓库提供 OpenJDK,也可用 APT 安装 Oracle JDK 或添加 PPA;上述方式均为常见且可行的路径。
二 部署方式一 可执行 JAR + systemd(Spring Boot 常用)
- 上传与放置应用:
- 示例目录:/var/www/java-app,将构建好的 app.jar 上传至此
- 直接运行(测试用):
- 命令:cd /var/www/java-app && java -jar app.jar
- 配置为系统服务(生产推荐):
- 说明:使用 systemd 可确保进程守护、崩溃自启与开机启动,适合生产环境长期运行。
三 部署方式二 WAR 包部署到 Tomcat
- 安装 Tomcat(两种方式,二选一):
- 方式 A(系统包):sudo apt install tomcat9 -y;管理命令:sudo systemctl start|stop|restart tomcat9
- 方式 B(二进制包):
- 下载并解压: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
- 启动:/usr/local/tomcat/bin/startup.sh
- 部署应用:
- 将 myapp.war 复制到:/usr/local/tomcat/webapps/
- Tomcat 会自动解压并部署,访问:http://服务器IP:8080/myapp
- 常用调整:
- 修改端口:编辑 /usr/local/tomcat/conf/server.xml,将 <Connector port=“8080”…> 改为所需端口后重启
- 说明:WAR 部署适合传统 Java Web(Servlet/JSP)应用;系统包方式便于用 systemctl 管理,二进制包便于多实例与自定义目录。
四 部署方式三 Docker 容器化
- 安装 Docker(略,按官方文档执行)
- 构建镜像(示例 Dockerfile,基于 OpenJDK 8):
FROM openjdk:8-jre-slim
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
VOLUME /logs
COPY target/app.jar /app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
- 构建与运行:
- 构建:docker build -t my-java-app .
- 运行(映射 8080):docker run -d --name myapp -p 8080:8080 my-java-app
- 说明:容器化具备环境隔离、可移植与扩缩容优势,适合微服务与 CI/CD 流程。
五 网络与运维要点
- 反向代理与域名访问(Nginx,端口 80/443):
- 防火墙放行(如使用 UFW):sudo ufw allow 80,443,8080/tcp
- 数据库与连接(以 MySQL 为例):
- 安装与初始化:sudo apt install mysql-server -y;sudo mysql_secure_installation
- 创建库与用户:CREATE DATABASE mydb; CREATE USER ‘myuser’@‘localhost’ IDENTIFIED BY ‘password’; GRANT ALL ON mydb.* TO ‘myuser’@‘localhost’; FLUSH PRIVILEGES;
- 日志与问题排查:
- systemd 服务日志:sudo journalctl -u java-app -f
- Tomcat 日志:tail -f /usr/local/tomcat/logs/catalina.out
- 应用日志:按项目日志框架(如 Logback/Log4j)配置输出到文件
- 说明:Nginx 反向代理便于统一域名、证书管理与静态资源处理;数据库与防火墙为常见依赖与访问控制点。