Java Web项目部署指南2025

Java Web项目部署指南

适用场景:本地 Windows 开发打包 → 远程 Ubuntu 服务器部署(2025年最佳实践)

适合人群:Java Web初学者、运维新手、需要一站式部署流程的开发者


🚀 部署流程横向流程图

本地开发/打包
Windows
上传JAR包
SFTP工具
服务器环境准备
Ubuntu/JDK
运行JAR包
nohup或Systemd
Nginx反向代理
外部访问验证

🚦 部署流程总览

  1. 💻 本地 Windows:项目准备与打包
  2. ☁️ 服务器 Ubuntu:环境准备(JDK安装)
  3. ⬆️ 上传 JAR 包:本地 → 服务器
  4. ☁️ 服务器 Ubuntu:运行 Java 应用
  5. ☁️ 服务器 Ubuntu:配置 Nginx 反向代理
  6. ☁️ 服务器 Ubuntu:访问与验证

💻 阶段一:本地 Windows 操作

1.1 检查与准备项目

  • 配置检查:确认配置文件(如 application.yml)适合生产环境。
  • 代码构建:确保无编译错误。

1.2 打包可执行 JAR 文件

# Maven
mvn clean package -DskipTests
# Gradle
gradle bootJar
  • JAR 包生成路径:target/(Maven)或 build/libs/(Gradle)

1.3 上传 JAR 包到服务器

  • 推荐工具:XShell、FinalShell、Termius 等带 SFTP 功能的工具
  • 操作方法:
    1. 在工具中新建与服务器的连接,填写服务器IP、端口、用户名、密码(或密钥)。
    2. 连接成功后,找到左侧(本地)和右侧(服务器)文件管理器。
    3. 在本地窗口中定位到 target/your-app-name-0.0.1.jar(或 build/libs/ 下的JAR包)。
    4. 拖拽或右键上传到服务器 /opt/myapp/ 目录。
    5. 上传完成后,可在服务器端用 ls /opt/myapp/ 验证文件是否存在。

☁️ 阶段二:服务器 Ubuntu 操作

2.1 安装 JDK

sudo apt update
sudo apt install openjdk-17-jdk -y
java -version
javac -version

2.2 创建应用目录

sudo mkdir -p /opt/myapp
# 可选:sudo chown your_ssh_user:your_ssh_user /opt/myapp

2.3 运行 Java 应用

cd /opt/myapp/
nohup java -jar your-app-name-0.0.1.jar > app.log 2>&1 &

日志文件 app.log 会在当前目录生成。


☁️ Systemd 与 nohup 区别与优势说明

nohup

  • 用法简单,适合临时或开发环境下让程序在后台持续运行。
  • 命令示例:
    nohup java -jar your-app-name-0.0.1.jar > app.log 2>&1 &
    
  • 优点:
    • 快速、无需额外配置。
    • 关闭终端后程序不会退出。
  • 缺点:
    • 程序崩溃不会自动重启。
    • 无法自动开机自启。
    • 管理和监控不如 systemd 方便。

Systemd

  • 适合生产环境,推荐用于正式部署。
  • 通过编写 .service 文件,将 Java 应用注册为系统服务。
  • 优点:
    • 支持开机自启。
    • 程序异常退出可自动重启。
    • 统一用 systemctl 管理(启动、停止、重启、查看状态)。
    • 日志可统一管理(journalctl)。
  • 缺点:
    • 需要 root 权限和简单配置。
  • 示例(/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-name-0.0.1.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
    

总结:开发/测试可用 nohup,生产环境推荐 systemd,管理更规范、自动化能力更强。


2.4 检查应用状态

  • 实时日志:tail -f app.log
  • 检查进程:pgrep -f "java -jar your-app-name-0.0.1.jar"
  • 端口监听:sudo netstat -tulnp | grep 8080

2.5 配置 Nginx 反向代理

sudo apt install nginx -y
sudo nano /etc/nginx/sites-available/myapp.conf
server {
    listen 80;
    server_name your_domain_or_server_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

2.6 防火墙配置(如启用)

sudo ufw allow 80/tcp
sudo ufw enable

2.7 访问与验证

  • 浏览器访问:http://your_domain_or_server_ip

🛠️ 常用命令速查

  • 查看日志:tail -f /opt/myapp/app.log
  • 停止应用:kill $(pgrep -f "java -jar your-app-name-0.0.1.jar")
  • Nginx 状态:sudo systemctl status nginx
  • 查看 Nginx 错误日志:tail -n 50 /var/log/nginx/error.log

🐳 补充:Docker 打包与部署说明

1. 编写 Dockerfile

在你的项目根目录下新建一个名为 Dockerfile 的文件,内容如下(以 Java 17 为例):

FROM eclipse-temurin:17-jdk-jammy
WORKDIR /app
COPY target/your-app-name-0.0.1.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app/app.jar"]

请将 your-app-name-0.0.1.jar 替换为实际的 JAR 文件名。

2. 构建 Docker 镜像

在 Dockerfile 所在目录打开命令行,执行:

docker build -t myapp:latest .

3. 运行 Docker 容器

docker run -d -p 8080:8080 --name myapp myapp:latest

4. 常用 Docker 命令

  • 查看容器日志:docker logs myapp
  • 停止容器:docker stop myapp
  • 启动容器:docker start myapp
  • 删除容器:docker rm myapp
  • 查看所有容器:docker ps -a

如需与 Nginx 配合,Nginx 的 proxy_pass 地址可指向宿主机的 8080 端口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值