Spring Boot框架開發的Java項目在CentOS7上的部署

需求:上級拿來一份Spring Boot框架開發的Java項目代碼讓我在服務器上運行起來,只說了一句該框架是自帶了Tomcat(不用從新安裝Tomcat),一份代碼下有兩個項目(一個管理端項目,一個用戶端項目,等會會細說)。我是一名運維,在上家公司只接觸過在Tomcat下部署Java項目,自帶Tomcat的沒接觸過,目前這個公司都是php軟件攻城獅,因此只能靠本身了。幸虧在一個學習交流羣裏碰到一位Java軟件攻城獅,在該攻城獅的熱心指導下項目成功運行。下面是詳細步驟,知識點擴展及總結將在最後寫出:php

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

tar xf jdk-8u144-linux-x64.tar.gz # 解壓JDK
vim /etc/profile # 配置環境變量,在該文件的最下面添加以下三行java

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

source /etc/profile # 使環境變量當即生效,而後在命令行輸入java -version 或javac,若是有正確輸出則表示JDK安裝成功
2.安裝maven(因我是在服務器上打包,故須要安裝maven,是一個採用純Java編寫的開源項目管理工具,具體用法請自行查閱資料)nginx

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

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

vim /etc/profile  # 配置環境變量,在該文件最下面添加以下兩行sql

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

source /etc/profile  # 使環境變量當即生效,而後在命令行輸入mvn -version或mvn -v,若是有正確輸出則表示maven安裝成功apache

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;
  }
}

進程管理腳本

 ```

#!/bin/sh
#chkconfig: 2345 16 93
#description:wms
## java env
export JAVA_HOME=/usr/local/src/jdk1.8.0_144
export JRE_HOME=$JAVA_HOME/jre

 

## service name
APP_NAME=bootlg_shop
APP_VERSION=0.0.2

 

SERVICE_DIR=$(cd `dirname $0`; pwd)
SERVICE_NAME=$APP_NAME-$APP_VERSION
JAR_NAME=$SERVICE_NAME-SNAPSHOT.jar
PID=$SERVICE_NAME\.pid

 

cd $SERVICE_DIR

 

case "$1" in
start)
nohup $JRE_HOME/bin/java -Xms512m -Xmx1024m -jar $JAR_NAME --spring.profiles.active=pro >/dev/null 2>&1 &
echo $! > $SERVICE_DIR/$PID
echo "=== start $SERVICE_NAME"
;;

 

stop)
kill `cat $SERVICE_DIR/$PID`
rm -rf $SERVICE_DIR/$PID
echo "=== stop $SERVICE_NAME"

 

sleep 3
P_ID=`ps -ef | grep -w "$SERVICE_NAME" | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "=== $SERVICE_NAME process not exists or stop success"
else
echo "=== $SERVICE_NAME process pid is:$P_ID"
echo "=== begin kill $SERVICE_NAME process, pid is:$P_ID"
kill -9 $P_ID

fi

;;

restart)
$0 stop
sleep 2
$0 start
echo "=== restart $SERVICE_NAME"
;;

*)
## restart
$0 stop
sleep 2
$0 start
;;

esac
exit 0

``` 

至此項目部署完畢,如下爲知識點擴展及總結:

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的路徑,有會的請留言給我,謝謝!

相關文章
相關標籤/搜索