在 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