找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1186

积分

0

好友

210

主题
发表于 3 天前 | 查看: 7| 回复: 0

前言

当你完成了本地SpringBoot应用的开发与测试,将其部署到远程服务器是应用上线的关键一步。本指南将详细拆解从本地打包到远程部署的完整流程,涵盖多种部署方式与核心细节。

一、本地打包

部署的第一步是生成可执行的应用程序包。对于使用Maven构建的SpringBoot项目,执行以下命令:

mvn clean package -Dmaven.test.skip=true

-Dmaven.test.skip=true 参数用于跳过测试以加速打包过程。执行成功后,你可以在项目的 target 目录下找到生成的 .jar.war 包。

对于采用 Java 开发的Web应用,推荐使用内嵌Tomcat的Jar包方式进行部署,以减少对服务器环境的依赖。

二、服务器环境准备

在将应用包上传至服务器前,需要确保目标服务器已具备基础的运行环境。

2.1 安装 Java 运行时

检查服务器是否已安装Java:

java -version

如果未安装,使用包管理器安装(以Ubuntu/Debian为例):

sudo apt update
sudo apt install openjdk-11-jdk

请根据你的应用需求选择对应的JDK版本(如JDK 8, 11, 17)。

2.2 防火墙配置

确保服务器防火墙开放了你的应用端口(例如8080):

# Ubuntu/Debian (ufw)
sudo ufw allow 8080/tcp
sudo ufw reload

# CentOS/RHEL (firewalld)
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload

三、应用上传与部署

有多种方法可以将本地应用包传输到服务器,并启动服务。

3.1 传统方式:SCP上传与启动
  1. 上传应用包
    使用SCP命令将本地包上传到服务器的指定目录。

    scp target/your-app.jar user@your_server_ip:/opt/springboot-app/
  2. 启动应用
    通过SSH连接到服务器并启动应用。最简单的启动方式是:

    java -jar /opt/springboot-app/your-app.jar

    这种方式会将日志输出到当前控制台,且SSH会话断开后应用会终止。

  3. 后台运行与日志管理
    为了持久化运行,可以使用 nohup 命令让进程在后台运行,并将日志输出到文件:

    nohup java -jar /opt/springboot-app/your-app.jar > app.log 2>&1 &
    • nohup: 使进程忽略挂断信号,在用户退出登录后继续运行。
    • > app.log: 将标准输出重定向到 app.log 文件。
    • 2>&1: 将标准错误也重定向到标准输出,即同样写入 app.log
    • &: 在后台运行命令。
  4. 进程管理
    查看应用进程:

    ps -ef | grep java

    停止应用:

    # 先找到进程ID (PID)
    kill -9 <PID>
3.2 进阶方式:使用 Systemd 管理服务

对于生产环境,建议使用Systemd将SpringBoot应用配置为系统服务,便于实现开机自启、状态监控和日志统一管理。

  1. 创建服务文件
    /etc/systemd/system/ 目录下创建服务文件,例如 springboot-app.service

    sudo vim /etc/systemd/system/springboot-app.service
  2. 编辑服务配置

    
    [Unit]
    Description=SpringBoot Application Service
    After=syslog.target network.target

[Service]
Type=simple
User=www-data # 指定运行用户,非root更安全
WorkingDirectory=/opt/springboot-app
ExecStart=/usr/bin/java -jar /opt/springboot-app/your-app.jar
SuccessExitStatus=143
Restart=always # 失败时自动重启
RestartSec=5
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target


3. **启用并启动服务**:
```shell
# 重新加载Systemd配置
sudo systemctl daemon-reload
# 设置开机自启
sudo systemctl enable springboot-app.service
# 启动服务
sudo systemctl start springboot-app.service
# 查看服务状态
sudo systemctl status springboot-app.service
# 查看应用日志
sudo journalctl -u springboot-app.service -f
3.3 现代化方式:容器化部署 (Docker)

将SpringBoot应用Docker化是当前主流的部署实践,它能保证环境一致性,简化部署流程。

  1. 编写 Dockerfile
    在项目根目录创建 Dockerfile
    
    # 使用官方的Java运行时作为基础镜像
    FROM openjdk:11-jre-slim

设置工作目录

WORKDIR /app

将构建好的jar包复制到容器中

COPY target/your-app.jar app.jar

暴露应用端口

EXPOSE 8080

定义容器启动时执行的命令

ENTRYPOINT ["java", "-jar", "app.jar"]


2. **构建与推送镜像**:
在本地或CI/CD流水线中构建Docker镜像。
```shell
# 构建镜像
docker build -t your-username/springboot-app:latest .
# 推送到镜像仓库 (如Docker Hub)
docker push your-username/springboot-app:latest
  1. 在服务器上运行容器
    在已安装Docker的服务器上拉取并运行镜像。
    # 拉取镜像
    docker pull your-username/springboot-app:latest
    # 运行容器
    docker run -d --name myapp -p 8080:8080 your-username/springboot-app:latest

四、配置文件外部化

Linux运维 实践中,通常不将配置文件(如 application.propertiesapplication.yml)打包在Jar内,而是在启动时通过命令行参数或环境变量指定,便于不同环境(开发、测试、生产)的配置管理。

示例:指定外部配置文件

java -jar your-app.jar --spring.config.location=/opt/config/application-prod.yml

示例:通过环境变量覆盖配置
application.yml 中定义:

server:
  port: ${APP_PORT:8080}

然后在启动命令前设置环境变量:

export APP_PORT=9090
java -jar your-app.jar

或在Docker运行时指定:

docker run -d -e “APP_PORT=9090” -p 9090:9090 your-image

五、部署后验证与监控

应用启动后,进行以下验证:

  • 服务可达性:通过浏览器或 curl 命令访问 http://服务器IP:端口/健康检查端点
  • 日志检查:查看启动日志,确认无报错且服务已正常监听端口。
  • 进程状态:使用 pssystemctl status 确认进程健康运行。

建议集成监控工具,如Spring Boot Actuator端点,以便更好地掌握应用运行时状态。

总结

本文梳理了将SpringBoot应用部署到远程服务器的核心路径:从本地打包开始,通过SCP、Systemd或Docker等不同方式,最终在服务器上稳定运行。关键在于根据项目需求和团队技术栈,选择最合适的部署策略,并遵循配置外部化、日志标准化、服务进程化管理等最佳实践,以构建稳健高效的部署流程。




上一篇:论文AI率高的原因与有效降低方案
下一篇:Trae AI编程零基础入门指南:新手开发者快速上手与效率提升
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-17 18:48 , Processed in 0.124839 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表