1. 程式人生 > >Spring Boot框架開發的Java專案在CentOS7上的部署

Spring Boot框架開發的Java專案在CentOS7上的部署

需求:上級拿來一份Spring Boot框架開發的Java專案程式碼讓我在伺服器上執行起來,只說了一句該框架是自帶了Tomcat(不用重新安裝Tomcat),一份程式碼下有兩個專案(一個管理端專案,一個使用者端專案,等會會細說)。我是一名運維,在上家公司只接觸過在Tomcat下部署Java專案,自帶Tomcat的沒接觸過,目前這個公司都是php軟體攻城獅,所以只能靠自己了。幸好在一個學習交流群裡碰到一位Java軟體攻城獅,在該攻城獅的熱心指導下專案成功執行。下面是詳細步驟,知識點擴充套件及總結將在最後寫出:

1.配置Java環境(建議用Oracle的JDK,系統自帶的openjdk用起來不穩定,具體原因請自行查閱資料)

tar xf jdk-8u144-linux-x64.tar.gz # 解壓JDK
vim /etc/profile # 配置環境變數,在該檔案的最下面新增如下三行

export JAVA_HOME=/path/to/java
export PATH=\$JAVA_HOME/bin:\$PATH
export CLASSPATH=.:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar

source /etc/profile # 使環境變數立即生效,然後在命令列輸入java -version 或javac,如果有正確輸出則表示JDK安裝成功
2.安裝maven(因我是在伺服器上打包,故需要安裝maven,是一個採用純Java編寫的開源專案管理工具,具體用法請自行查閱資料)

wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.0/binaries/apache-maven-3.6.0-bin.tar.gz  # 官網下載maven

tar xf apache-maven-3.6.0-bin.tar.gz # 解壓maven

vim /etc/profile  # 配置環境變數,在該檔案最下面新增如下兩行

export MAVEN_HOME=/path/to/apache-maven-3.6.0
export PATH=\$MAVEN_HOME/bin:\$PATH

source /etc/profile  # 使環境變數立即生效,然後在命令列輸入mvn -version或mvn -v,如果有正確輸出則表示maven安裝成功

3.修改專案配置

application.yml檔案定義了埠及所需載入的配置等資訊,我這裡載入的是application-pro.yml,該檔案裡又定義了日誌、資料庫及redis等等的資訊(因篇幅問題,截圖不完整)

在專案根目錄下的pom.xml裡定義了打包後的報名及打包格式等等的資訊

4.打包 (該過程簡單的話就是將程式碼編譯成位元組碼,讓java虛擬機器認識並能執行。mvn的具體用法請自行查閱資料)

在pom.xml檔案的同級目錄下執行mvn install,執行成功會出現‘’BUILD SUCCESS‘’這樣一行的資訊並且進入target目錄下可以看到打包生成的jar包。

 

5.部署管理(可以用java命令直接在命令列下啟動,亦可寫成管理指令碼啟動,啟動之前先執行sql,並確保資料庫及redis可正常連線,否則無法正常啟動)

命令列啟動方式:

我這裡為了後期管理方便又新建了一個build目錄,並將jar包和管理指令碼放在該目錄下,日誌檔案也會在該目錄下生成

 

管理方式:./server.sh start|stop|restart

可以先用ps -ef |grep java、ss -tunlp |grep PID檢視是否有程序及埠是否監聽,如果都正常,開頭說到我這一份程式碼下有兩個專案,訪問方式分別是:http://ip:port(管理端)、http://ip:port/a/b(使用者端) 

6.用nginx做代理訪問

管理端nginx配置:(訪問方式http://www.server.com)

server {
  listen 80;
  server_name www.server.com;  # 根據需要將域名換成所需要的即可
  charset utf-8;
  autoindex off;

  location / {
    proxy_pass http://ip:port;  # 根據需要將ip、port換成所需要的即可
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

使用者端nginx配置:(訪問方式http://www.user.com)

server {
  listen 80;
  server_name www.user.com;
  charset utf-8;
  autoindex off;

  location / {  # 因該使用者端專案不在預設路徑下,此location用來rewrite至專案路徑/a/b
    rewrite ^ /a/b;
  }

  location /a/b {  #
    proxy_pass http://ip:port;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }

  location ~ .(gif|jpg|jpeg|png|bmp|swf|css|js|images)$ {  # 因該使用者端專案不在預設路徑下,會造成訪問不到靜態檔案,此location用來匹配靜態檔案的訪問
    root /path/to/static;
  }
}

至此專案部署完畢,以下為知識點擴充套件及總結:

1.專案不用nginx做代理依然可以使用域名訪問,但此時需將埠改為80,並做域名解析

2.專案是打成jar還是war是有區別的,有興趣的可以進一步學習

3.目前訪問使用者端時域名後會自動補上路徑,例如我輸入http://www.user.com回車,瀏覽器會自動顯示http://www.user.com/a/b。現在有一個新需求想實現,就是我輸入http://www.user.com讓它訪問到http://www.user.com/a/b的頁面,但是想讓它在http://www.user.com的域名後不顯示/a/b的路徑,有會的請留言給我,謝謝!