三、項目部署 之前我們講解Linux操作系統時,就提到,我們服務端開發工程師學習Linux系統的目的就是將來我們開發的項目絕大部分情況下都需要部署在Linux系統中。那麼在本章節,我們將通過兩種方式,來演示項目部署,分別是:手動部署項目 和 基於shell腳本自動部署。 3.1、手動部署項目 3.1 ...
三、項目部署
之前我們講解Linux操作系統時,就提到,我們服務端開發工程師學習Linux系統的目的就是將來我們開發的項目絕大部分情況下都需要部署在Linux系統中。那麼在本章節,我們將通過兩種方式,來演示項目部署,分別是:手動部署項目 和 基於shell腳本自動部署。
3.1、手動部署項目
3.1.1、在IDEA中開發SpringBoot項目並打包成jar包
-
創建一個簡單的項目,結構如下所示
-
項目運行結果
-
執行package指令,進行打包操作,將當前的SpringBoot項目,打包成jar包
-
操作步驟
-
Step1
-
<build> <!--指定jar的名字--> <finalName>helloworld</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
-
-
Step2
-
# 清理、打包 跳過測試 mvn clean package -Dmaven.test.skip=true
-
-
Step3
-
# 運行 java -jar xxx.jar
-
-
Step4
-
-
3.1.2、將jar包上傳到Linux並運行
- 將打好的jar包上傳至Linux伺服器的 /usr/local/app 目錄下
mkdir /usr/local/app
cd /usr/local/app
- 啟動SpringBoot項目
- 由於我們的項目已經打成jar包上傳上來到Linux伺服器,我們只需要運行這個jar包項目就啟動起來了,所以只需要執行如下指令即可:
java -jar helloworld.jar
- 運行結果
- PS
- 由於前面安裝的Tomcat在啟動時,會占用埠號8080,而當前springboot項目我們沒有配置埠號,預設也是8080,所以我們要想啟動springboot項目,需要把之前運行的Tomcat停止掉
- 開放埠,確保埠對外開放,可以訪問SpringBoot項目
firewall-cmd --zone=public --list-ports
- 如果防火牆沒有開放對應的埠,還需要先開放埠
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload
- 訪問測試
- 成功運行項目後的問題
- 當前我們項目啟動的這個視窗被霸屏占用了,如果我們把這個視窗關閉掉(或ctrl+c),當前服務也就訪問不到了
3.1.3、手動部署項目優化
- 解決上述霸屏問題的解決方法就是讓部署的項目在後臺運行
- 這個時候我們需要使用到linux中的一個命令 nohup ,接下來,就來介紹一下nohup命令
- nohup命令:英文全稱 no hang up(不掛斷),用於不掛斷地運行指定命令,退出終端不會影響程式的運行
- 語法格式:
nohup Command [ Arg … ][&]
- 參數說明:
Command
:要執行的命令Arg
:一些參數,可以指定輸出文件&
:讓命令在後臺運行
- 舉例:
nohup java -jar boot工程.jar &> hello.log &
- 上述指令的含義為: 後臺運行 java -jar 命令,並將日誌輸出到hello.log文件
- 綜上所得,要想讓當前項目在後臺運行,就可以使用以下命令
nohup java -jar helloworld-1.0-SNAPSHOT.jar &> hello.log &
- 這樣的話,我們的項目就已經啟動成功了,我們可以通過ps指令,查看到系統的進程
- 接下來,我們再次訪問我們的項目,來看看服務是否可用
- 這時候可以查看以下hello.log文件是否正常輸出日誌
- 這時候可以查看以下hello.log文件是否正常輸出日誌
- 停止項目
- 直接殺死進程:
kill -9 pid
- 直接殺死進程:
3.2、基於Shell腳本自動部署
3.2.1、介紹
- 前面介紹的項目部署是手動部署,也就是部署過程中的每一步操作都需要我們手動操作。接下來,我們需要再講解一下項目的自動部署,從而來簡化項目部署的操作,那麼我們先來整體上瞭解一下項目自動部署的流程及操作步驟
- 具體操作步驟如下
- ①、在Gitee上創建遠程倉庫,並將本地的項目代碼推送到遠程倉庫中
- ②、在Linux中安裝Git,克隆代碼
- ③、在Linux中安裝maven
- ④、編寫Shell腳本(拉取代碼、編譯、打包、啟動)
- ⑤、為用戶授予執行Shell腳本的許可權
- ⑥、執行Shell腳本
- 具體操作步驟如下
3.2.2、推送代碼到遠程倉庫
1)創建遠程倉庫
自行創建
2)推送代碼到遠程倉庫
自行推送一個簡單示例項目即可
3.2.3、Git操作
1)Git軟體安裝
- 通過yum命令線上安裝git,執行如下指令
yum list git
:列出git安裝包yum install git
:線上安裝git
- 通過上述指令,安裝好git之後,我們就可以通過
git --version
去驗證git的環境
2)Git克隆代碼
- 先切換到指定的目錄,如
/usr/local
,執行如下指令git clone 要克隆的遠程倉庫地址
(然後輸入個人的Git賬號密碼)
3.2.4、Maven安裝
1)官網下載Maven的壓縮包
- 如
apache-maven-3.5.4-bin.tar.gz
,自行選擇對應版本號在官網下載即可
2)解壓Maven壓縮包
- 自行解壓到指定目錄即可
tar -zxvf apache-maven-3.5.4-bin.tar.gz -C 指定目錄
3)配置環境變數
-
在
/etc/profile
配置文件中配置環境變數-
vim /etc/profile
-
增加如下內容
-
MAVEN_HOME=/usr/local/apache-maven-3.5.4/ PATH=$JAVA_HOME\bin:$PATH:$MAVEN_HOME\bin export JAVA_HOME PATH MAVEN_HOME
-
PS:這裡面的JAVA_HOME是之前配置的,忽略即可
-
-
要讓配置的環境變數生效,還需要執行如下指令
source /etc/profile
4)修改maven的settings.xml配置文件
-
配置本地倉庫地址
-
切換目錄
cd /usr/local/apache-maven-3.5.4/conf
-
編輯setting.xml配置文件
vim setting.conf
-
在其中增加如下配置,添加本地倉庫地址
<localRepository>/usr/local/maven-reposity</localRepository>
-
同時在
<mirrors>
標簽中,配置阿裡雲的私服-
<mirror> <id>alimaven</id> <mirrorOf>central</mirrorOf> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> </mirror>
-
-
3.2.5、Shell腳本準備
Shell腳本(shell script),是一種Linux系統中的腳本程式。使用Shell腳本編程跟 JavaScript、Java編程一樣,只要有一個能編寫代碼的文本編輯器和一個能解釋執行的腳本解釋器就可以了
- 本次測試不作為學習內容,直接使用現成的demo即可
- 腳本解讀
3.2.6、Linux許可權
-
根據上面步驟執行完後,Shell腳本要想正常的執行,還需要給Shell腳本分配執行許可權。 由於linux系統是一個多用戶的操作系統,並且針對每一個用戶,Linux會嚴格的控制操作許可權。接下來,我們就需要介紹一下Linux系統的許可權控制
- 1). chmod(英文全拼:change mode)命令是控制用戶對文件的許可權的命令
- 2). Linux中的許可權分為三種 :讀(r)、寫(w)、執行(x)
- 3). Linux文件許可權分為三級 : 文件所有者(Owner)、用戶組(Group)、其它用戶(Other Users)
- 4). 只有文件的所有者和超級用戶可以修改文件或目錄的許可權
- 5). 要執行Shell腳本需要有對此腳本文件的執行許可權(x),如果沒有則不能執行
-
解析當前腳本的許可權情況
-
chmod命令可以使用八進位來指定許可權(0 - 代表無, 1 - 表示執行x,2 - 寫w, 4 - 讀r
-
許可權 rwx rwx 7 讀 + 寫 + 執行 rwx 6 讀 + 寫 rw- 5 讀 + 執行 r-x 4 只讀 r-- 3 寫 + 執行 -wx 2 只寫 -w- 1 只執行 --x 0 無 ---
-
-
舉例
chmod 777 bootStart.sh
為所有用戶授予讀、寫、執行許可權chmod 755 bootStart.sh
為文件擁有者授予讀、寫、執行許可權,同組用戶和其他用戶授予讀、執行許可權chmod 210 bootStart.sh
為文件擁有者授予寫許可權,同組用戶授予執行許可權,其他用戶沒有任何許可權
-
註意:
- 三個數字分別代表不同用戶的許可權
- 第1位表示文件擁有者的許可權
- 第2位表示同組用戶的許可權
- 第3位表示其他用戶的許可權
- 三個數字分別代表不同用戶的許可權
3.2.7、授權並執行腳本
- 在測試階段,我們可以給所有的人都賦予執行該shell腳本的許可權。所以可以執行如下指令
chmod 777 bootStart.sh
- 許可權解讀:
- A. 第一個7,代表當前文件所有者root用戶,對該文件具有讀寫執行許可權
- B. 第二個7,代表當前文件所有者所屬組的用戶,對該文件具有讀寫執行許可權
- C. 第三個7,代表其他用戶,對該文件具有讀寫執行許可權
- 執行該shell版本
- 註意: 在執行maven指令進行打包時,第一次執行可能會耗時比較長,因為在進行maven工程的打包時,需要到中央倉庫下載工程依賴的jar包和插件(可以在settings.xml中配置阿裡雲私服加速下載)。
- 啟動完成之後,我們可以查看java進程
- 訪問項目