部署SpringBoot項(xiàng)目到Linux服務(wù)器數(shù)據(jù)盤的完整流程
將Spring Boot項(xiàng)目部署到Linux服務(wù)器數(shù)據(jù)盤是一個(gè)常見的操作。首先是如何掛載數(shù)據(jù)盤,然后是如何部署Spring Boot項(xiàng)目。
第一部分:掛載數(shù)據(jù)盤
假設(shè)你有一臺(tái)新的Linux服務(wù)器(以CentOS 7/Alibaba Cloud Linux為例),并有一塊新的數(shù)據(jù)盤(例如 /dev/vdb)需要掛載到 /data 目錄。
注意: 操作磁盤有一定風(fēng)險(xiǎn),請(qǐng)確保已備份重要數(shù)據(jù)并進(jìn)行核對(duì)。磁盤標(biāo)識(shí)(如 /dev/vdb)可能因環(huán)境而異,請(qǐng)使用 lsblk 或 fdisk -l 命令確認(rèn)。
步驟 1: 查看磁盤狀態(tài)
1、連接到你的服務(wù)器:
ssh your_username@your_server_ip
切換到root用戶:
sudo -i
2、檢查當(dāng)前磁盤情況:
fdisk -l
或者使用更清晰的命令:
lsblk
你會(huì)看到類似這樣的輸出,vda 通常是系統(tǒng)盤,vdb 就是我們要操作的數(shù)據(jù)盤(未掛載)。
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 253:0 0 40G 0 disk / vdb 253:16 0 100G 0 disk
步驟 2: 分區(qū)與格式化
1、為數(shù)據(jù)盤創(chuàng)建分區(qū)(如果磁盤是新盤,通常創(chuàng)建一個(gè)主分區(qū)即可):
fdisk /dev/vdb
在 fdisk 交互界面中,依次輸入以下命令:
n:新建分區(qū)
p:選擇主分區(qū)
1:分區(qū)號(hào)(默認(rèn)1)
回車:選擇起始扇區(qū)(默認(rèn))
回車:選擇結(jié)束扇區(qū)(默認(rèn),使用整個(gè)磁盤)
w:寫入分區(qū)表并退出
2、檢查新分區(qū):
再次運(yùn)行 lsblk,現(xiàn)在你應(yīng)該能看到新分區(qū) /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、格式化分區(qū)(這里使用 ext4 文件系統(tǒng)):
mkfs.ext4 /dev/vdb1
等待格式化完成。
步驟 3: 掛載分區(qū)
1、創(chuàng)建掛載點(diǎn)目錄(例如 /data):
mkdir /data
2、臨時(shí)掛載分區(qū)(重啟后會(huì)失效,用于測(cè)試):
mount /dev/vdb1 /data
3、驗(yàn)證掛載是否成功:
df -h
你應(yīng)該能在輸出中看到 /dev/vdb1 掛載到了 /data 目錄。
步驟 4: 配置開機(jī)自動(dòng)掛載
1、獲取分區(qū)的UUID(推薦使用UUID,它比設(shè)備名更穩(wěn)定):
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 命令查到的實(shí)際UUID。
/data:掛載點(diǎn)。
ext4:文件系統(tǒng)類型。
defaults:掛載參數(shù)。
0:不備份。
0:不檢查磁盤順序。
4、驗(yàn)證 fstab 配置是否正確:
mount -a
這個(gè)命令會(huì)掛載所有在 fstab 中定義的文件系統(tǒng)。如果沒有任何報(bào)錯(cuò),說明配置正確。你可以再次運(yùn)行 df -h 確認(rèn) /data 依然掛載著。
至此,數(shù)據(jù)盤已經(jīng)成功掛載并配置為開機(jī)自動(dòng)掛載。
第二部分:部署Spring Boot項(xiàng)目
我們將把項(xiàng)目部署到剛掛載的數(shù)據(jù)盤(/data 目錄)下。
前提準(zhǔn)備
1、安裝Java環(huán)境:
你的Spring Boot項(xiàng)目大概率需要JRE/JDK。首先檢查是否已安裝:
java -version
如果未安裝,請(qǐng)安裝(例如安裝OpenJDK 8):
yum install -y java-1.8.0-openjdk-devel
(請(qǐng)根據(jù)你的項(xiàng)目要求選擇對(duì)應(yīng)的JDK版本,如JDK 11或17)
步驟 1: 上傳項(xiàng)目文件
1、在 /data 目錄下創(chuàng)建項(xiàng)目所需目錄:
mkdir -p /data/app/your-project-name mkdir -p /data/app/your-project-name/logs
your-project-name:是你的項(xiàng)目名稱,例如 myapp。
logs:用于存放項(xiàng)目日志。
2、上傳你的JAR包:
使用 scp、sftp 或通過Git拉取等方式,將打包好的Spring Boot的 *.jar 文件上傳到 /data/app/your-project-name/ 目錄。
例如,從本地機(jī)器上傳:
# 在你的本地終端執(zhí)行,不是在服務(wù)器上! scp target/your-springboot-app.jar your_username@your_server_ip:/data/app/your-project-name/
步驟 2: 編寫應(yīng)用啟動(dòng)腳本
為了管理方便,我們編寫一個(gè)Shell腳本來自動(dòng)啟動(dòng)、停止應(yīng)用。
1、在項(xiàng)目目錄創(chuàng)建腳本文件,例如 app.sh:
vi /data/app/your-project-name/app.sh
2、輸入以下內(nèi)容(請(qǐng)根據(jù)你的實(shí)際情況修改 JAR_NAME、APP_NAME 和 Xmx 等參數(shù)):
#!/bin/bash
# 配置項(xiàng)
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk # 根據(jù)你的實(shí)際路徑修改
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參數(shù)
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 后臺(tái)運(yùn)行,輸出日志到指定文件
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、給腳本添加執(zhí)行權(quán)限:
chmod +x /data/app/your-project-name/app.sh
步驟 3: 啟動(dòng)項(xiàng)目并測(cè)試
1、啟動(dòng)項(xiàng)目:
cd /data/app/your-project-name ./app.sh start
2、查看啟動(dòng)日志和狀態(tài):
./app.sh status tail -100f logs/my-springboot-app.log
觀察日志是否有錯(cuò)誤,確認(rèn)應(yīng)用已正常啟動(dòng)。
3、測(cè)試訪問:
如果你的應(yīng)用有Web接口,使用 curl 或在瀏覽器中訪問你的服務(wù)器IP和端口,看是否返回預(yù)期結(jié)果。
步驟 4: (強(qiáng)烈推薦)配置Systemd服務(wù)管理
使用Systemd可以更專業(yè)地管理應(yīng)用,實(shí)現(xiàn)更完善的開機(jī)自啟和監(jiān)控。
1、創(chuàng)建service文件:
vi /etc/systemd/system/your-project-name.service
2、輸入以下內(nèi)容(同樣,需要修改路徑和參數(shù)):
[Unit] Description=My Spring Boot Application After=syslog.target network.target [Service] Type=simple User=root Group=root # 項(xiàng)目根目錄 WorkingDirectory=/data/app/your-project-name # 啟動(dòng)命令 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 # 應(yīng)用崩潰后自動(dòng)重啟 Restart=on-failure RestartSec=30 [Install] WantedBy=multi-user.target
3、重新加載Systemd配置并啟用服務(wù):
systemctl daemon-reload systemctl enable your-project-name.service # 設(shè)置開機(jī)自啟 systemctl start your-project-name.service # 啟動(dòng)服務(wù) systemctl status your-project-name.service # 查看狀態(tài)
現(xiàn)在,Spring Boot項(xiàng)目已經(jīng)部署在數(shù)據(jù)盤上,并且可以通過Systemd進(jìn)行管理了。你可以使用 systemctl stop/start/restart your-project-name 來管理應(yīng)用。
以上就是部署SpringBoot項(xiàng)目到Linux服務(wù)器數(shù)據(jù)盤的完整流程的詳細(xì)內(nèi)容,更多關(guān)于部署SpringBoot到Linux數(shù)據(jù)盤的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
java中同類對(duì)象之間的compareTo()和compare()方法對(duì)比分析
這篇文章主要介紹了java中同類對(duì)象之間的compareTo()和compare()方法對(duì)比分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-09-09
Java處理JSON編程實(shí)用技巧和性能優(yōu)化
JSON解析是Java Web開發(fā)的核心技能,用于服務(wù)端和客戶端間數(shù)據(jù)交換,下面這篇文章主要介紹了Java處理JSON編程實(shí)用技巧和性能優(yōu)化的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-11-11
Java之字節(jié)碼以及優(yōu)勢(shì)案例講解
這篇文章主要介紹了Java之字節(jié)碼以及優(yōu)勢(shì)案例講解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
一文帶你詳細(xì)認(rèn)識(shí)文件與Java中操作文件
文件處理是任何應(yīng)用程序的重要部分,Java 提供了許多用于創(chuàng)建、讀取、更新和刪除文件的方法,這篇文章主要給大家介紹了關(guān)于認(rèn)識(shí)文件與Java中操作文件的相關(guān)資料,需要的朋友可以參考下2024-05-05
SpringBoot接口冪等性4種解決方案+避坑實(shí)戰(zhàn)指南
接口冪等性,看似簡(jiǎn)單,實(shí)則關(guān)乎資金安全、用戶體驗(yàn)和系統(tǒng)穩(wěn)定性,今天,咱們就來聊聊在SpringBoot項(xiàng)目中,如何真正落地接口冪等性,避免成為“背鍋俠”,感興趣的朋友跟隨小編一起看看吧2025-09-09
SpringBoot3.x打包Docker容器的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot3.x打包Docker容器的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11

