04-項目部署到Linux

来源:https://www.cnblogs.com/OnlyOnYourself-lzw/archive/2022/07/26/16519445.html
-Advertisement-
Play Games

三、項目部署 之前我們講解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文件是否正常輸出日誌
  • 停止項目
    • 直接殺死進程: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進程
  • 訪問項目

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 看《C++ Primer Plus》時整理的學習筆記,部分內容完全摘抄自《C++ Primer Plus》(第6版)中文版,Stephen Prata 著,張海龍 袁國忠譯,人民郵電出版社。只做學習記錄用途。 ...
  • 本文是在嘗試了刷新Maven項目、clean了Maven緩存並且重啟IDEA之後任然無法在Tomcat中找到子模塊對應的工件,這時就要試著模仿著自己創建一個模塊 父類的pom.xml模塊的配置,以及子模塊pom.xml的parent中寫的父模塊,這些都寫好了,在Tomcat中任然無法找到該模塊對應的 ...
  • 1 數組 1.1 數組概念 簡單來說,普通變數只能存取單個數據元素,與之不同,數組可以存取多個數據元素,記憶體中數組以順序結構存儲。 定義1:(數組) 同一類型數組中存取的元素類型相同,並且各個元素之間連續存儲。 1.2 整形數組 1.2.1 一維數組 (1)定義方式 類型說明符 數組名[常量表達式] ...
  • 多態 多態的定義 多態按字面的意思就是多種形態。當類之間存在層次結構,並且類之間是通過繼承關聯時,就會用到多態。C++ 多態意味著調用成員函數時,會根據調用函數的對象的類型來執行不同的函數。 簡單來說就是完成某個行為,不同的對象會產生不同的結果 多態的構成條件 1. 必須通過基類的指針或者引用調用虛 ...
  • 介紹 這是我隨手寫的一個小程式,希望大家能從中學習到 列表 與 open() 函數,感受Python的魅力! #代碼瀏覽 點擊查看代碼 #獲取圖書 #從文件中讀取圖書,並寫入列表 def getBook(): bookList =[] f = open("book.txt","r") tempLis ...
  • 一:背景 上一篇我們聊到了C++ 的 auto_ptr ,有朋友說已經在 C++ 17 中被棄用了,感謝朋友提醒,今天我們來聊一下 C++ 11 中引入的幾個智能指針。 unique_ptr shared_ptr weak_ptr 看看它們都怎麼玩。 二:三大智能指針詳解 1. unique_ptr ...
  • 強引用、軟引用、弱引用、虛引用 · 語雀 (yuque.com) 自 JDK1.2 開始,Java 提供了 4 種引用關係,以表示引用和實例對象的關係。 強引用“一直存活著” 強引用,就是我們最常見的普通對象引用。 只要強引用還存在,垃圾收集器永遠不會回收掉被引用的實例對象。 Object o = ...
  • 學生選課系統項目開發 1.項目需求 1. 創建北京、上海 2 所學校 2. 創建linux , python , go 3個課程 , linux\py 在北京開, go 在上海開 3. 課程包含,周期,價格,通過學校創建課程 4. 通過學校創建班級, 班級關聯課程、講師 5. 創建學員時,選擇學校, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...