項目部署-(二)Linux下SpringBoot項目自動部署

一、項目部署架構

在這里插入圖片描述

二、項目部署環境

192.168.138.100(服務器A):
-Nginx :部署前端項目、配置反向代理
-MySQL:主從復制結構中的主庫

192.168.138.101(服務器B):
-JDK:運行Java項目
-Git:版本控制工具
-Maven:項目構建工具
-Jar:SpringBoot項目打成Jar包基于內置Tomcat運行
-MySQL:主從復制結構中的從庫

192.168.138.102(服務器C):
-Redis:緩存中間件

三、部署前端項目并配置Nginx 反向代理

192.168.138.100(服務器A):
-Nginx :部署前端項目、配置反向代理
-MySQL:主從復制結構中的主庫

步驟一:在服務器A中安裝Nginx,將disk(前端打包目錄)目錄上傳到Nginx的html目錄

步驟二:修改Nginx配置文件Nginx.conf

location \  {root html/dist;index index.html;
}
# 反向代理配置

步驟三:配置Nginx環境變量,啟動Nginx :

nginx

查看進程:

ps -ef | grep nginx

步驟四:配置Nginx 反向代理
前端請求路徑為 API/login,匹配到請求 URL重寫到這個地址192.168.138.101,轉發到服務器B

# 反向代理配置
location  ^~ /api/ {rewrite ^/api/(.*)$ /$1 break;proxy_pass  httpL//192.168.138.101:8080
}

四、部署后端項目并解決圖片展示問題

我們需要實現項目的自動部署,從而來簡化項目部署的操作。我們先來整體上了解一下項目自動部署的流程及操作步驟。

在這里插入圖片描述

操作步驟如下:

1). 在Gitee上創建遠程倉庫,并將本地的項目代碼推送到遠程倉庫中

2). 在Linux中安裝Git,克隆代碼

3). 在Linux中安裝maven

4). 編寫Shell腳本(拉取代碼、編譯、打包、啟動)

5). 為用戶授予執行Shell腳本的權限

6). 執行Shell腳本

192.168.138.101(服務器B):
-JDK:運行Java項目
-Git:版本控制工具
-Maven:項目構建工具
-Jar:SpringBoot項目打成Jar包基于內置Tomcat運行
-MySQL:主從復制結構中的從庫

步驟一:在服務器B中安裝JDK、Git、Maven、MySQL,使用git clone命令將git遠程倉庫的代碼克隆下來;

步驟二:上傳reggieStart.sh文件到服務器B,通過chmod命令設置執行權限
Shell腳本:拉取GIt代碼,并通過maven命令打包;再通過java - jar 命令把SpringBoot項目運行;

步驟三:執行reggieStart.sh腳本文件,自動部署項目
在執行maven指令進行打包時,第一次執行可能會耗時比較長,因為在進行maven工程的打包時,需要到中央倉庫下載工程依賴的jar包和插件。
步驟四:解決圖片不顯示的問題,把路徑改成Linux下的路徑,把圖片放到Linux目錄下

#把路徑改成Linux下的路徑
path: /usr/local/img/

4.1 Git操作

1). Git軟件安裝

通過yum命令在線安裝git,執行如下指令:

yum list git			列出git安裝包
yum install git			在線安裝git

通過上述指令,安裝好git之后,我們就可以通過 git --version去驗證git的環境。

git --version

2). Git克隆代碼

cd /usr/local/
git clone https://gitee.com/RichardKong/platform.git

4.2 Maven安裝

由于我們的工程是maven工程,我們要想進行項目的編譯打包,需要用到maven的指令,所以需要安裝maven。具體操作步驟如下:

步驟一、上傳maven的安裝包

通過rz指令上傳maven安裝包

步驟二、解壓maven安裝包到/usr/local目錄

tar -zxvf apache-maven-3.5.4-bin.tar.gz -C /usr/local

步驟三、在/etc/profile配置文件中配置環境變量

vim /etc/profile修改配置文件,進入到命令模式,按G切換到最后一行,按a/i/o進入插入模式,然后在最后加入如下內容 :
export MAVEN_HOME=/usr/local/apache-maven-3.5.4
export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH然后按ESC進入到命令模式,輸入 :wq 保存并退出

要想讓配置的環境變量生效,還需要執行如下指令:

source /etc/profile

步驟四、 修改maven的settings.xml配置文件,配置本地倉庫地址

A. 切換目錄

cd /usr/local/apache-maven-3.5.4/conf

B. 編輯settings.xml配置文件

vim settings.xml

在其中增加如下配置,配置本地倉庫地址:

<localRepository>/usr/local/repo</localRepository>

并在settings.xml中的標簽中,配置阿里云的私服:

<mirror> <id>alimaven</id> <mirrorOf>central</mirrorOf> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror> 

4.3 Shell腳本準備

Shell腳本(shell script),是一種Linux系統中的腳本程序。使用Shell腳本編程跟 JavaScript、Java編程一樣,只要有一個能編寫代碼的文本編輯器和一個能解釋執行的腳本解釋器就可以了。

在/usr/local/目錄下創建一個目錄 sh(mkdir sh),并將shell腳本上傳到該目錄下。或者直接在sh目錄下創建一個腳本bootStart.sh,然后將bootStart.sh文件打開,內容拷貝過來即可。

4.4 Linux權限

前面我們已經把Shell腳本準備好了,但是Shell腳本要想正常的執行,還需要給Shell腳本分配執行權限。 由于linux系統是一個多用戶的操作系統,并且針對每一個用戶,Linux會嚴格的控制操作權限。接下來,我們介紹一下Linux系統的權限控制。

1). chmod(英文全拼:change mode)命令是控制用戶對文件的權限的命令

2). Linux中的權限分為三種 :讀?、寫(w)、執行(x)

3). Linux文件權限分為三級 : 文件所有者(Owner)、用戶組(Group)、其它用戶(Other Users)

4). 只有文件的所有者和超級用戶可以修改文件或目錄的權限

5). 要執行Shell腳本需要有對此腳本文件的執行權限(x),如果沒有則不能執行

Linux系統中權限描述如下:

在這里插入圖片描述

解析當前腳本的權限情況:

在這里插入圖片描述

chmod命令可以使用八進制數來指定權限(0 - 代表無 , 1 - 執行x , 2 - 寫w , 4 - 讀r):

權限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位表示其他用戶的權限

4.5 授權并執行腳本

在測試階段,我們可以給所有的人都賦予執行該shell腳本的權限。所以可以執行如下指令:

chmod 777 bootStart.sh

權限解讀:

A. 第一個7,代表當前文件所有者root用戶,對該文件具有讀寫執行權限;

B. 第二個7,代表當前文件所有者所屬組的用戶,對該文件具有讀寫執行權限;

B. 第三個7,代表其他用戶,對該文件具有讀寫執行權限;

執行該shell腳本:

 ./bootStart.sh

注意: 在執行maven指令進行打包時,第一次執行可能會耗時比較長,因為在進行maven工程的打包時,需要到中央倉庫下載工程依賴的jar包和插件(可以在settings.xml中配置阿里云私服加速下載)。

啟動完成之后, 我們可以查看java進程:

 ps -ef|grep java

訪問項目:

192.168.138.130:8080

4.6 設置靜態IP

我們目前安裝的Linux操作系統,安裝完畢之后并沒有配置IP地址,默認IP地址是動態獲取的,那如果我們使用該Linux服務器部署項目,IP動態獲取的話,也就意味著,IP地址可能會發生變動,那我們訪問項目的話就會非常繁瑣,所以作為服務器,我們一般還需要把IP地址設置為靜態的。

步驟一、設置靜態IP

設置靜態ip,我們就需要修改 /etc/sysconfig/network-scripts/ifcfg-ens33 配置文件,內容如下:

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR="192.168.138.100"        # 設置的靜態IP地址
NETMASK="255.255.255.0"         # 子網掩碼
GATEWAY="192.168.138.2"         # 網關地址
DNS1="192.168.138.2"            # DNS服務器
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=afd0baa3-8bf4-4e26-8d20-5bc426b75fd6
DEVICE=ens33
ONBOOT=yes
ZONE=public

在這里插入圖片描述

上述我們所設置的網段為138,并不是隨意指定的,需要和我們虛擬機中的虛擬網絡編輯器中的NAT模式配置的網關保持一致。

步驟二、重啟網絡服務

ip地址修改完畢之后,需要重啟網絡服務,執行如下指令:

systemctl restart network

注意:重啟完網絡服務后ip地址已經發生了改變,此時FinalShell已經連接不上Linux系統,需要創建一個新連接才能連接到Linux。

再次連接上Linux之后,我們再次查看IP地址,就可以看到我們所設置的靜態IP:

ip addr 

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/75838.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/75838.shtml
英文地址,請注明出處:http://en.pswp.cn/web/75838.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【LeetCode 熱題 100】哈希 系列

&#x1f4c1;1. 兩數之和 本題就是將通過兩層遍歷優化而成的&#xff0c;為什么需要兩層遍歷&#xff0c;因為遍歷 i 位置時&#xff0c;不知道i-1之前的元素是多少&#xff0c;如果我們知道了&#xff0c;就可以通過兩數相加和target比較即可。 因為本題要求返回下標&#xf…

【Kubernetes基礎】--查閱筆記1

目錄 Kubernetes 是什么為什么要用 KubernetesKubernetes 概念MasterNodePodLabelReplication ControllerDeploymentHorizontal Pod AutoscalerStatefulSetService服務發現機制 JobVolumePersistent VolumeNamespaceConfigmap Kubernetes 是什么 Kubernetes是一個開放的開發平…

卷積神經網絡CNN到底在卷些什么?

來源&#xff1a; 卷積神經網絡&#xff08;CNN&#xff09;到底卷了啥&#xff1f;8分鐘帶你快速了解&#xff01;_嗶哩嗶哩_bilibili卷積神經網絡&#xff08;CNN&#xff09;到底卷了啥&#xff1f;8分鐘帶你快速了解&#xff01;共計2條視頻&#xff0c;包括&#xff1a;卷…

Axios 的 POST 請求:QS 處理數據的奧秘與使用場景解析

在現代前端開發中&#xff0c;Axios 已經成為了進行 HTTP 請求的首選庫之一&#xff0c;它的簡潔易用和強大功能深受開發者喜愛。當使用 Axios 進行 POST 請求時&#xff0c;我們常常會遇到一個問題&#xff1a;是否需要使用 QS 庫來處理請求數據&#xff1f;什么時候又可以不用…

java面試題帶答案2025最新整理

文章目錄 一、java面試題集合框架1. 請簡要介紹 Java 集合框架的體系結構2. ArrayList 和 LinkedList 的區別是什么3. HashMap 的工作原理是什么&#xff0c;它在 JDK 7 和 JDK 8 中有哪些不同4. 如何解決 HashMap 的線程安全問題5. TreeSet 是如何保證元素有序的 二、java面試…

4.B-樹

一、常見的查找方式 順序查找 O(N) 二分查找 O(logN)&#xff08;要求有序和隨機訪問&#xff09; 二叉搜索樹 O(N) 平衡二叉搜索樹(AVL樹和紅黑樹) O(logN) 哈希 O(1) 考慮效率和要求而言&#xff0c;正常選用 平衡二叉搜索樹 和 哈希 作為查找方式。 但這兩種結構適合用于…

CTF--shell

一、原題 &#xff08;1&#xff09;提示&#xff1a; $poc"a#s#s#e#r#t";$poc_1explode("#",$poc);$poc_2$poc_1[0].$poc_1[1].$poc_1[2].$poc_1[3].$poc_1[4].$poc_1[5]; $poc_2($_GET[s]) &#xff08;2&#xff09;原網頁&#xff1a;一片空白什么都…

基于51單片機的正負5V數字電壓表( proteus仿真+程序+設計報告+講解視頻)

基于51單片機的正負5V數字電壓表( proteus仿真程序設計報告講解視頻&#xff09; 仿真圖proteus7.8及以上 程序編譯器&#xff1a;keil 4/keil 5 編程語言&#xff1a;C語言 設計編號&#xff1a;S0101 1. 主要功能&#xff1a; 設計一個基于51單片機數字電壓表 1、能夠…

hive數倉要點總結

1.OLTP和OLAP區別 OLTP&#xff08;On-Line Transaction Processing&#xff09;即聯機事務處理&#xff0c;也稱為面向交易的處理過程&#xff0c;其基本特征是前臺接收的用戶數據可以立即傳送到計算中心進行處理&#xff0c;并在很短的時間內給出處理結果&#xff0c;是對用…

【實戰手冊】8000w數據遷移實踐:MySQL到MongoDB的完整解決方案

?? 本文將帶你深入解析大規模數據遷移的實踐方案,從架構設計到代碼實現,手把手教你解決數據遷移過程中的各種挑戰。 ??博主其他匠心之作,強推專欄: 小游戲開發【博主強推 匠心之作 拿來即用無門檻】文章目錄 一、場景引入1. 問題背景2. 場景分析為什么需要消息隊列?為…

運行小程序需要選擇什么配置的服務器

主要是看有多少人瀏覽&#xff0c;如果是每天有幾十個人瀏覽&#xff0c;通常2核或者4核就可以滿足需求&#xff0c;內存的話建議4g或者8g&#xff0c;足夠的內存可以使服務器同時處理多個請求&#xff0c;避免因內存不足導致的卡頓或程序崩潰。 硬盤存儲方面&#xff0c;50GB…

基于SpringBoo的地方美食分享網站

作者&#xff1a;計算機學姐 開發技術&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源碼”。 專欄推薦&#xff1a;前后端分離項目源碼、SpringBoot項目源碼、Vue項目源碼、SSM項目源碼、微信小程序源碼 精品專欄&#xff1a;…

Solidity私有函數和私有變量區別,私有變量可以被訪問嗎

web3面試題 私有函數和私有變量區別&#xff0c;私有變量可以被訪問嗎 ChatGPT said: 在 Web3 開發&#xff0c;尤其是使用 Solidity 編寫智能合約時&#xff0c;關于私有函數和私有變量的區別是常見的面試題。下面是詳細解析&#xff1a; ? 私有函數&#xff08;Private Fu…

mongodb 安裝配置

1.下載 官網下載地址&#xff1a;MongoDB Community Download | MongoDB 2.使用解壓包 解壓包安裝&#xff1a;https://pan.baidu.com/s/1Er56twK9UfxoExuCPlJjhg 提取碼: 26aj 3.配置環境&#xff1a; &#xff08;1&#xff09;mongodb安裝包位置&#xff1a; &#xf…

多模態大語言模型arxiv論文略讀(十九)

MLLMs-Augmented Visual-Language Representation Learning ?? 論文標題&#xff1a;MLLMs-Augmented Visual-Language Representation Learning ?? 論文作者&#xff1a;Yanqing Liu, Kai Wang, Wenqi Shao, Ping Luo, Yu Qiao, Mike Zheng Shou, Kaipeng Zhang, Yang Yo…

[LeetCode 45] 跳躍游戲2 (Ⅱ)

題面&#xff1a; LeetCode 45 跳躍游戲2 數據范圍&#xff1a; 1 ≤ n u m s . l e n g t h ≤ 1 0 4 1 \le nums.length \le 10^4 1≤nums.length≤104 0 ≤ n u m s [ i ] ≤ 1000 0 \le nums[i] \le 1000 0≤nums[i]≤1000 題目保證可以到達 n u m s [ n ? 1 ] nums[…

前端面試寶典---閉包

閉包介紹 使用閉包&#xff1a; 在函數內聲明一個變量&#xff0c;避免外部訪問在該函數內再聲明一個函數訪問上述變量&#xff08;閉包&#xff09;返回函數內部的函數使用完畢建議閉包函數null;譯放內存 function createCounter() {let count 0;return function () {coun…

GPT4O畫圖玩法案例,不降智,非dalle

網址如下&#xff1a; 玩法1&#xff1a;吉卜力&#xff08;最火爆&#xff09; 提示詞&#xff1a;請將附件圖片轉化為「吉卜力」風格&#xff0c;尺寸不變 玩法2&#xff1a;真人繪制 提示詞&#xff1a;創作一張圖片&#xff0c;比例4:3&#xff0c;一個20歲的中國女孩…

4.12~4.14【Q】cv homework6

我正在寫GAMES101作業6&#xff0c;在這段代碼中&#xff0c;我十分想知道inline Intersection Triangle::getIntersection(Ray ray) 是由哪個函數&#xff0c;哪段代碼調用的&#xff1f;什么是Inline&#xff1f;詳細解釋&#xff0c;越細節越好 我正在寫GAMES101作業6&…

MATLAB雙目標定

前言&#xff1a; 現在有許多雙目攝像頭在出廠時以及標定好&#xff0c;用戶拿到手后可以直接使用&#xff0c;但也有些雙目攝像頭在出廠時并沒有標定。因而這個時候就需要自己進行標定。本文主要介紹基于matlab工具箱的自動標定方式來對雙目相機進行標定。 1、MATLAB工具箱標…