部署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è)你有一臺新的Linux服務(wù)器(以CentOS 7/Alibaba Cloud Linux為例),并有一塊新的數(shù)據(jù)盤(例如 /dev/vdb)需要掛載到 /data 目錄。
注意: 操作磁盤有一定風(fēng)險(xiǎn),請確保已備份重要數(shù)據(jù)并進(jìn)行核對。磁盤標(biāo)識(如 /dev/vdb)可能因環(huán)境而異,請使用 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
你會看到類似這樣的輸出,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ū)號(默認(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ū)(重啟后會失效,用于測試):
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è)命令會掛載所有在 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
如果未安裝,請安裝(例如安裝OpenJDK 8):
yum install -y java-1.8.0-openjdk-devel
(請根據(jù)你的項(xiàng)目要求選擇對應(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)容(請根據(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 后臺運(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)目并測試
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、測試訪問:
如果你的應(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ù)盤的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
springboot使用JdbcTemplate完成對數(shù)據(jù)庫的增刪改查功能
這篇文章主要介紹了springboot使用JdbcTemplate完成對數(shù)據(jù)庫的增刪改查功能,需要的朋友可以參考下2017-12-12
Vue.Js及Java實(shí)現(xiàn)文件分片上傳代碼實(shí)例
這篇文章主要介紹了Vue.Js及Java實(shí)現(xiàn)文件分片上傳代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
Java?Unsafe創(chuàng)建對象的方法實(shí)現(xiàn)
Java中使用Unsafe實(shí)例化對象是一項(xiàng)十分有趣而且強(qiáng)大的功能,本文主要介紹了Java?Unsafe創(chuàng)建對象的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
Java中的隱式參數(shù)和顯示參數(shù)實(shí)例詳解
這篇文章主要介紹了Java中的隱式參數(shù)和顯示參數(shù)是什么,另外還有兩個(gè)小例子幫助大家理解,需要的朋友可以參考下。2017-08-08
使用lombok@Data存在extends時(shí)需要注意的問題
在Java編程中,正確實(shí)現(xiàn)equals方法是保證對象比較一致性的關(guān)鍵,使用instanceof檢查類型可能導(dǎo)致違反對稱性原則,即當(dāng)子類和父類都重寫equals時(shí)可能出現(xiàn)a.equals(b)不等于b.equals(a)的情況,Lombok的@EqualsAndHashCode注解可以通過callSuper=true參數(shù)2024-10-10
SpringCloud?Config之動(dòng)態(tài)配置管理與高可用治理方式
這篇文章主要介紹了SpringCloud?Config之動(dòng)態(tài)配置管理與高可用治理方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-05-05
Java實(shí)現(xiàn)經(jīng)典俄羅斯方塊游戲
俄羅斯方塊是一個(gè)最初由阿列克謝帕吉特諾夫在蘇聯(lián)設(shè)計(jì)和編程的益智類視頻游戲。本文將利用Java實(shí)現(xiàn)這一經(jīng)典的小游戲,需要的可以參考一下2022-01-01

