部署Spring Boot项目到Linux服务器数据盘

简介: 将Spring Boot项目部署到Linux服务器数据盘是一个常见的操作。首先是如何挂载数据盘,然后是如何部署Spring Boot项目。

Spring Boot项目部署到Linux服务器数据盘是一个常见的操作。首先是如何挂载数据盘,然后是如何部署Spring Boot项目。


第一部分:挂载数据盘

假设你有一台新的Linux服务器(以CentOS 7/Alibaba Cloud Linux为例),并有一块新的数据盘(例如 /dev/vdb)需要挂载到 /data 目录。

注意: 操作磁盘有一定风险,请确保已备份重要数据并进行核对。磁盘标识(如 /dev/vdb)可能因环境而异,请使用 lsblk 或 fdisk -l 命令确认。


步骤 1: 查看磁盘状态

1、连接到你的服务器:

ssh your_username@your_server_ip

切换到root用户:

sudo -i

2、检查当前磁盘情况:

fdisk -l

或者使用更清晰的命令:

lsblk

你会看到类似这样的输出,vda 通常是系统盘,vdb 就是我们要操作的数据盘(未挂载)。

NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda    253:0    0  40G  0 disk /
vdb    253:16   0 100G  0 disk


步骤 2: 分区与格式化

1、为数据盘创建分区(如果磁盘是新盘,通常创建一个主分区即可):

fdisk /dev/vdb

在 fdisk 交互界面中,依次输入以下命令:

n:新建分区

p:选择主分区

1:分区号(默认1)

回车:选择起始扇区(默认)

回车:选择结束扇区(默认,使用整个磁盘)

w:写入分区表并退出

2、检查新分区:

再次运行 lsblk,现在你应该能看到新分区 /dev/vdb1。

NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda    253:0    0  40G  0 disk /
vdb    253:16   0 100G  0 disk
└─vdb1 253:17   0 100G  0 part

3、格式化分区(这里使用 ext4 文件系统):

mkfs.ext4 /dev/vdb1

等待格式化完成。


步骤 3: 挂载分区

1、创建挂载点目录(例如 /data):

mkdir /data

2、临时挂载分区(重启后会失效,用于测试):

mount /dev/vdb1 /data

3、验证挂载是否成功:

df -h

你应该能在输出中看到 /dev/vdb1 挂载到了 /data 目录。


步骤 4: 配置开机自动挂载

1、获取分区的UUID(推荐使用UUID,它比设备名更稳定):

blkid /dev/vdb1

输出类似:/dev/vdb1: UUID="c6b4c7a1-7b4a-4f4a-b6a1-1234567890ab" TYPE="ext4"

2、编辑 /etc/fstab 文件:

vi /etc/fstab

3、在文件末尾添加一行:

UUID=c6b4c7a1-7b4a-4f4a-b6a1-1234567890ab /data ext4 defaults 0 0

解释:

UUID=...:你刚才用 blkid 命令查到的实际UUID。

/data:挂载点。

ext4:文件系统类型。

defaults:挂载参数。

0:不备份。

0:不检查磁盘顺序。

4、验证 fstab 配置是否正确:

mount -a

这个命令会挂载所有在 fstab 中定义的文件系统。如果没有任何报错,说明配置正确。你可以再次运行 df -h 确认 /data 依然挂载着。

至此,数据盘已经成功挂载并配置为开机自动挂载。


第二部分:部署Spring Boot项目

我们将把项目部署到刚挂载的数据盘(/data 目录)下。

前提准备

1、安装Java环境:

你的Spring Boot项目大概率需要JRE/JDK。首先检查是否已安装:

java -version

如果未安装,请安装(例如安装OpenJDK 8):

yum install -y java-1.8.0-openjdk-devel

(请根据你的项目要求选择对应的JDK版本,如JDK 11或17)


步骤 1: 上传项目文件

1、在 /data 目录下创建项目所需目录:

mkdir -p /data/app/your-project-name
mkdir -p /data/app/your-project-name/logs

your-project-name:是你的项目名称,例如 myapp。

logs:用于存放项目日志。

2、上传你的JAR包:

使用 scp、sftp 或通过Git拉取等方式,将打包好的Spring Boot的 *.jar 文件上传到 /data/app/your-project-name/ 目录。

例如,从本地机器上传:

# 在你的本地终端执行,不是在服务器上!
scp target/your-springboot-app.jar your_username@your_server_ip:/data/app/your-project-name/


步骤 2: 编写应用启动脚本

为了管理方便,我们编写一个Shell脚本来自动启动、停止应用。

1、在项目目录创建脚本文件,例如 app.sh

vi /data/app/your-project-name/app.sh

2、输入以下内容(请根据你的实际情况修改 JAR_NAME、APP_NAME 和 Xmx 等参数):

#!/bin/bash
# 配置项
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk # 根据你的实际路径修改
export JRE_HOME=$JAVA_HOME/jre
export PATH=$PATH:$JAVA_HOME/bin
APP_HOME=/data/app/your-project-name
JAR_NAME="your-springboot-app.jar"
APP_NAME="my-springboot-app"
LOG_PATH=$APP_HOME/logs/$APP_NAME.log
PID_FILE=$APP_HOME/application.pid
# JVM参数
JAVA_OPTS="-Xms512m -Xmx1024m -XX:+UseG1GC"
cd $APP_HOME
function start() {
    if [ -f "$PID_FILE" ]; then
        pid=$(cat $PID_FILE)
        if kill -0 $pid 2>/dev/null; then
            echo "App $APP_NAME is already running (pid: $pid)."
            exit 1
        else
            rm -f $PID_FILE
        fi
    fi
    echo "Starting $APP_NAME..."
    # nohup 后台运行,输出日志到指定文件
    nohup java $JAVA_OPTS -jar $JAR_NAME > $LOG_PATH 2>&1 &
    echo $! > $PID_FILE
    echo "Started $APP_NAME (pid: $!)"
}
function stop() {
    if [ -f "$PID_FILE" ]; then
        pid=$(cat $PID_FILE)
        echo "Stopping $APP_NAME (pid: $pid)..."
        kill $pid
        rm -f $PID_FILE
        echo "Stopped $APP_NAME."
    else
        echo "PID file not found. Stop operation failed."
    fi
}
function status() {
    if [ -f "$PID_FILE" ]; then
        pid=$(cat $PID_FILE)
        if kill -0 $pid 2>/dev/null; then
            echo "$APP_NAME is running (pid: $pid)."
        else
            echo "$APP_NAME PID file exists but process is not running."
        fi
    else
        echo "$APP_NAME is not running."
    fi
}
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        sleep 3
        start
        ;;
    status)
        status
        ;;
    *)
        echo "Usage: $0 {start|stop|restart|status}"
        exit 1
        ;;
esac

3、给脚本添加执行权限:

chmod +x /data/app/your-project-name/app.sh


步骤 3: 启动项目并测试

1、启动项目:

cd /data/app/your-project-name
./app.sh start

2、查看启动日志和状态:

./app.sh status
tail -100f logs/my-springboot-app.log

观察日志是否有错误,确认应用已正常启动。

3、测试访问:

如果你的应用有Web接口,使用 curl 或在浏览器中访问你的服务器IP和端口,看是否返回预期结果。


步骤 4: (强烈推荐)配置Systemd服务管理

使用Systemd可以更专业地管理应用,实现更完善的开机自启和监控。

1、创建service文件:

vi /etc/systemd/system/your-project-name.service

2、输入以下内容(同样,需要修改路径和参数):

[Unit]
Description=My Spring Boot Application
After=syslog.target network.target
[Service]
Type=simple
User=root
Group=root
# 项目根目录
WorkingDirectory=/data/app/your-project-name
# 启动命令
ExecStart=/usr/bin/java -Xms512m -Xmx1024m -jar your-springboot-app.jar
# 指定日志输出
StandardOutput=file:/data/app/your-project-name/logs/systemd-out.log
StandardError=file:/data/app/your-project-name/logs/systemd-err.log
# 应用崩溃后自动重启
Restart=on-failure
RestartSec=30
[Install]
WantedBy=multi-user.target

3、重新加载Systemd配置并启用服务:

systemctl daemon-reload
systemctl enable your-project-name.service # 设置开机自启
systemctl start your-project-name.service  # 启动服务
systemctl status your-project-name.service # 查看状态


现在,Spring Boot项目已经部署在数据盘上,并且可以通过Systemd进行管理了。你可以使用 systemctl stop/start/restart your-project-name 来管理应用。

部署Spring Boot项目到Linux服务器数据盘.png


谢谢你看我的文章,既然看到这里了,如果觉得不错,随手点个赞、转发、在看三连吧,感谢感谢。那我们,下次再见。


您的一键三连,是我更新的最大动力,谢谢

山水有相逢,来日皆可期,谢谢阅读,我们再会

我手中的金箍棒,上能通天,下能探海

相关文章
|
Java 容器
如何在SpringBoot项目中使用过滤器和拦截器
过滤器和拦截器是日常开发中常用技术,用于对特定请求进行增强处理,如插入自定义代码以实现特定功能。过滤器在请求到达 `servlet` 前执行,而拦截器在请求到达 `servlet` 后执行。`SpringBoot` 中的拦截器依赖于 `SpringBoot` 容器,过滤器则由 `servlet` 提供。通过实现 `Filter` 接口并重写 `doFilter()` 方法可实现过滤器;通过实现 `HandlerInterceptor` 接口并重写相应方法可实现拦截器。两者的主要区别在于执行时机的不同,需根据具体场景选择使用。
780 4
如何在SpringBoot项目中使用过滤器和拦截器
|
人工智能 Java Spring
Spring Boot循环依赖的症状和解决方案
Spring Boot循环依赖的症状和解决方案
|
7月前
|
JavaScript 前端开发 Java
制造业ERP源码,工厂ERP管理系统,前端框架:Vue,后端框架:SpringBoot
这是一套基于SpringBoot+Vue技术栈开发的ERP企业管理系统,采用Java语言与vscode工具。系统涵盖采购/销售、出入库、生产、品质管理等功能,整合客户与供应商数据,支持在线协同和业务全流程管控。同时提供主数据管理、权限控制、工作流审批、报表自定义及打印、在线报表开发和自定义表单功能,助力企业实现高效自动化管理,并通过UniAPP实现移动端支持,满足多场景应用需求。
680 1
|
1天前
|
人工智能 NoSQL 前端开发
SpringAI
SpringAI整合全球主流大模型,支持多种技术架构,提供对话、函数调用、RAG等丰富功能,封装完善,开发便捷。支持多模态、流式传输、会话记忆与知识库集成,助力快速构建AI应用。
|
1天前
|
负载均衡 Java 应用服务中间件
Gateway服务网关
Gateway服务网关是微服务架构的统一入口,具备路由转发、权限控制、限流及负载均衡等核心功能。基于SpringCloud Gateway可实现高性能响应式编程,支持丰富的断言与过滤器工厂,并可通过全局过滤器扩展自定义逻辑,有效解决跨域等问题,是微服务治理的关键组件。
23 0
|
1天前
|
JSON Dubbo Java
Feign远程调用
Feign简化Spring Cloud微服务间HTTP调用,替代RestTemplate,解决硬编码、可读性差问题。通过注解声明客户端,集成注册中心实现服务发现。支持自定义日志、编码器、连接池(如Apache HttpClient)优化性能,并可通过抽取公共模块实现最佳实践,提升代码复用与维护性。(238字)
19 0
|
1天前
|
存储 Java API
SpringCloud工程部署启动
本文介绍SpringCloud微服务工程的搭建与部署,涵盖项目导入、模块创建、数据库配置及服务启动。通过RestTemplate实现order-service与user-service间的远程调用,解决跨服务数据获取问题,帮助理解微服务拆分与通信机制。
10 0
|
弹性计算 数据中心
便宜香港服务器推荐,阿里云24元1个月,288元一年
便宜香港服务器推荐,阿里云24元1个月,288元一年,阿里云香港服务器中国香港数据中心网络线路类型BGP多线精品,中国电信CN2高速网络高质量、大规格BGP带宽,运营商精品公网直连中国内地,时延更低,优化海外回中国内地流量的公网线路,可以提高国际业务访问质量
|
Java 开发者 Spring
深入理解Spring Boot中的自动配置原理
深入理解Spring Boot中的自动配置原理
2048 1
|
存储 网络协议 数据中心
服务注册中心Consul
服务注册中心Consul
392 1