Java应用如何在Ubuntu上部署
导读:在 Ubuntu 上部署 Java 应用的实用指南 一 环境准备 更新系统并安装常用工具 sudo apt update && sudo apt upgrade -y sudo apt install -y vim wg...
在 Ubuntu 上部署 Java 应用的实用指南
一 环境准备
- 更新系统并安装常用工具
- sudo apt update & & sudo apt upgrade -y
- sudo apt install -y vim wget curl
- 安装 JDK(以 OpenJDK 17 为例)
- sudo apt install -y openjdk-17-jdk
- java -version 验证安装结果
- 配置环境变量(全局生效)
- echo ‘export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64’ | sudo tee -a /etc/profile
- echo ‘export PATH=$JAVA_HOME/bin:$PATH’ | sudo tee -a /etc/profile
- source /etc/profile
- 如需数据库(以 MySQL 8.0 为例)
- sudo apt install -y mysql-server
- sudo mysql_secure_installation
- 登录并创建业务库:mysql -u root -p,CREATE DATABASE appdb CHARACTER SET utf8mb4;
- 如为 Web 应用,建议安装 Nginx 作为反向代理
- sudo apt install -y nginx
二 部署方式
- 方式 A 可执行 JAR + systemd(Spring Boot 常用)
- 构建:mvn clean package 或 ./gradlew build,产物为可执行 fat jar
- 上传:scp target/app.jar user@server:/opt/apps/
- 创建服务:sudo nano /etc/systemd/system/java-app.service
[Unit] Description=Java Web Application After=network.target [Service] User=deploy WorkingDirectory=/opt/apps ExecStart=/usr/bin/java -Xms512m -Xmx1024m -jar /opt/apps/app.jar SuccessExitStatus=143 Restart=on-failure StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target - 启动与开机自启
- sudo systemctl daemon-reload
- sudo systemctl enable --now java-app.service
- sudo systemctl status java-app.service
- 方式 B WAR 部署到 Tomcat
- 安装 Tomcat 9
- 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
- echo ‘export CATALINA_HOME=/usr/local/tomcat’ | sudo tee -a /etc/profile
- echo ‘export PATH=$CATALINA_HOME/bin:$PATH’ | sudo tee -a /etc/profile
- source /etc/profile
- 启动与部署
- $CATALINA_HOME/bin/startup.sh
- 将 WAR 放入 $CATALINA_HOME/webapps/,Tomcat 会自动解压部署
- 安装 Tomcat 9
- 方式 C Docker 容器化
- 示例 Dockerfile
FROM eclipse-temurin:17-jre-jammy WORKDIR /app COPY target/app.jar /app/app.jar EXPOSE 8080 ENTRYPOINT ["java","-jar","/app/app.jar"] - 构建与运行
- docker build -t my-java-app:1.0 .
- docker run -d --name app -p 8080:8080 my-java-app:1.0
- 示例 Dockerfile
三 网络与反向代理
- 开放防火墙端口(示例为 8080)
- sudo ufw allow 8080/tcp
- 云服务器需在控制台安全组放行对应端口
- 配置 Nginx 反向代理(HTTP)
- sudo nano /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; proxy_set_header X-Forwarded-Proto $scheme; } } - 校验与生效
- sudo nginx -t
- sudo systemctl restart nginx
- sudo nano /etc/nginx/sites-available/default
- 如需启用 HTTPS,可使用 Let’s Encrypt 的 certbot 为 Nginx 自动签发证书
四 运行与维护
- 日志与查看
- systemd:sudo journalctl -u java-app.service -f
- JAR 前台:nohup java -jar app.jar > app.log 2> & 1 &
- 常用运维
- 停止/重启:sudo systemctl stop|restart java-app.service
- 版本升级:替换 JAR → sudo systemctl restart java-app.service
- 文件权限:建议以非 root 运行(如 User=deploy),目录权限 755,日志目录可 775
- 健康检查
- curl -I http://127.0.0.1:8080/actuator/health(如启用 Actuator)
- ss -tlnp | grep 8080 或 lsof -i:8080 检查端口占用
五 常见问题排查
- 命令未找到或版本不匹配
- java: command not found 或 Unsupported major.minor version
- 处理:安装匹配版本 JDK(如 sudo apt install openjdk-17-jdk),统一构建与运行 JDK 版本
- 端口被占用
- java.net.BindException: Address already in use
- 处理:lsof -i:8080 查 PID,kill -9 或调整应用端口
- 外网访问不通
- 处理:sudo ufw allow 8080/tcp,云安全组放行;本机 curl 验证后再排查网络链路
- 权限不足
- Permission denied
- 处理:chmod +x app.jar,chown -R deploy:deploy /opt/apps,避免使用 root 运行
- 环境变量未生效
- JAVA_HOME Not found(在 systemd/nohup 场景)
- 处理:在 /etc/profile 或 systemd 的 Environment= 中显式设置 JAVA_HOME
- 依赖缺失或包不完整
- ClassNotFoundException
- 处理:确保打包为“胖包”(mvn clean package),必要时检查依赖范围与仓库
- 中文乱码或时区异常
- 处理:启动时增加 -Dfile.encoding=UTF-8 -Duser.timezone=Asia/Shanghai
- 直接执行 JAR 报错“无法执行二进制文件”
- 处理:使用 java -jar app.jar 而非 ./app.jar
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Java应用如何在Ubuntu上部署
本文地址: https://pptw.com/jishu/777746.html
