温馨提示×

Java Web应用在Ubuntu上如何部署

小樊
41
2025-12-14 08:53:25
栏目: 编程语言

在 Ubuntu 上部署 Java Web 应用的标准流程


一 准备与安装

  • 更新系统并安装 JDK(推荐 OpenJDK 17;如需 OpenJDK 11 亦可):
    • sudo apt update
    • sudo apt install openjdk-17-jdk -y
    • java -version、javac -version 验证
  • 如需使用 Tomcat 9(传统 WAR 部署):
    • sudo apt install tomcat9 -y
    • sudo systemctl start tomcat9
    • 浏览器访问 http://服务器IP:8080 出现欢迎页即成功
  • 如需使用 Nginx 反向代理(域名/80端口访问):
    • sudo apt install nginx -y
    • 后续在 /etc/nginx/sites-available/ 配置反向代理并启用站点

二 部署方式一 Spring Boot 可执行 JAR

  • 本地打包(Maven/Gradle):
    • Maven:mvn clean package -DskipTests
    • Gradle:gradle bootJar
    • 产物路径:target/ 或 build/libs/
  • 上传至服务器(示例目录 /opt/myapp):
    • 使用 SFTP 工具上传 your-app.jar
    • sudo mkdir -p /opt/myapp && sudo chown $USER:$USER /opt/myapp
  • 运行方式
    • 快速临时运行:
      • cd /opt/myapp
      • nohup java -jar your-app.jar > app.log 2>&1 &
    • 生产推荐 systemd 托管:
      • 新建服务文件:sudo nano /etc/systemd/system/myapp.service
        • [Unit]
          • Description=My Java App
          • After=network.target
        • [Service]
          • User=your_ssh_user
          • WorkingDirectory=/opt/myapp
          • ExecStart=/usr/bin/java -jar your-app.jar
          • SuccessExitStatus=143
          • Restart=on-failure
          • RestartSec=5
        • [Install]
          • WantedBy=multi-user.target
      • 启用与常用命令:
        • sudo systemctl daemon-reload
        • sudo systemctl start myapp
        • sudo systemctl enable myapp
        • sudo systemctl status myapp
        • sudo journalctl -u myapp -f
  • 验证与端口
    • tail -f app.log
    • pgrep -f “java -jar your-app.jar”
    • ss -tulnp | grep 8080(或 netstat -tulnp | grep 8080)

三 部署方式二 WAR 包部署到 Tomcat

  • 安装 Tomcat(若未安装):sudo apt install tomcat9 -y
  • 部署 WAR:
    • 将 WAR 复制到 Tomcat webapps:
      • sudo cp your-web-project.war /var/lib/tomcat9/webapps/
    • Tomcat 会自动解压部署,访问 http://服务器IP:8080/your-web-project
    • 如已启动 Tomcat,可重启使其加载新应用:sudo systemctl restart tomcat9
  • 日志与排错:
    • 查看日志:/var/log/tomcat9/catalina.out 及 /var/log/tomcat9/ 下相关日志

四 域名与端口开放

  • Nginx 反向代理示例(将 80 端口转发到应用 8080 端口):
    • sudo nano /etc/nginx/sites-available/myapp.conf
      • server {
        • listen 80;
        • server_name your_domain_or_ip;
        • 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 ln -s /etc/nginx/sites-available/myapp.conf /etc/nginx/sites-enabled/
      • sudo nginx -t && sudo systemctl reload nginx
  • 防火墙(如使用 UFW):
    • 放行 80(HTTP)与 22(SSH):sudo ufw allow 80,22/tcp
    • 如需直连 8080 测试:sudo ufw allow 8080/tcp

五 常见问题与排查

  • 端口占用:ss -tulnp | grep 8080;必要时 kill 占用进程或更换应用端口
  • 查看应用日志:
    • JAR(systemd):journalctl -u myapp -f
    • JAR(nohup):tail -f app.log
    • Tomcat:tail -f /var/log/tomcat9/catalina.out
  • 数据库连接失败:核对 application.yml/properties 中的 URL、用户名、密码、驱动;确保数据库允许远程或应用与数据库网络互通
  • 外部访问不通:检查云服务器安全组/本机防火墙、Nginx 配置是否正确、应用是否监听 0.0.0.0 而非 127.0.0.1

0