首頁>技術>

系統釋出上線

透過前幾章的學習,我們順利完成了應用的開發,僅僅完成框架搭建和功能開發是不夠的,我們還需要將應用釋出到伺服器上供客戶端訪問。本章中,我們將開始詳解應用的釋出。

釋出前準備

在釋出應用前,我們需要進行釋出前的準備工作,比如伺服器、常用軟體的安裝和資料庫的建立等。

虛擬機器的安裝

在釋出應用之前,我們需要先準備伺服器,本書採用Linux系統作為伺服器的作業系統。下面演示瞭如何在本地安裝 Linux 虛擬機器。

(1)安裝VMware (下載地址: https://www.vmware.com/ )。

(2)下載Linux作業系統CentOS,其下載地址為http://isoredirect.centos.org/centos/7/isos/x8664/CentOS-7-x8664-Minimal-1810.iso。

(4)建立完成後,進入CentOS安裝介面,稍等片刻,你將看到如圖14-1所示的介面。

然後開始設定安裝分割槽,如圖14-3所示。

如果安裝好虛擬機器後,網路沒有連線成功,可以按照以下方式配置。

(1)將網絡卡設定為橋接模式(( Bridged Adapter )並重啟虛擬機器。

(2)登入虛擬機器。

(3)執行命令vi /etc/sysconfig/network,新增內容:NETWORKING=yes。

(4)執行命令vi /etc/sysconfig/network-scripts//ifcfg-enpes3 ( enpes3為網絡卡名字,讀者的計算機可能不一致),將ONBOOT設定為yes。

(5)重啟網絡卡: service network restart。(如果提示啟動失敗,可以嘗試切換成NAT模式。)

(6)執行命令ifconfig可以檢視IP。若提示ifconfig 命令沒有找到,則需要執行yum installnet-tools -y來安裝該命令。

(7)再次執行命令ifconfig即可看到內網IP,然後執行ping www.baidu.com來判斷是否有網路。

Linux常用命令

本文的應用釋出基於Linux作業系統,因此有必要簡單介紹一下常用的Linux命令,對Linux命令很熟悉的讀者可以略過。

cd: change directory的簡寫,用於改變目錄,如 cd /usr。ls: list的簡寫,用於顯示當前目錄所有的子目錄和檔案。ll:展示子目錄和檔案的詳細資訊。cp: copy 的簡寫,用於複製檔案,如 cp a.txt /root/ .。scp:遠端複製檔案。mv: move的簡寫,用於移動或重新命名檔案,如mv a.txt b.txt用於將a.txt重新命名為b.txt。ps: process status 的簡寫,用於檢視程序,如ps -ef。pwd: print working directory的簡寫,用於列印工作目錄。yum install:從yum源下載並安裝軟體,如 yum install java。rpm -ivh:安裝RMP格式的檔案,如 rpm -ivh java.rpm。vi:編輯檔案,如vi a.txt。Linux作業系統預設為命令模式,按下鍵盤上的字母Ⅰ能夠進入編輯模式,按下Esc鍵可以回到命令模式。在命令模式下,輸入命令就能執行相應操作,常用的操作有wq(儲存並退出)、dd(刪除整行)、x(刪除游標指向的字元)、/字元(查詢指定字元)。

安裝常用軟體

本節將安裝系統釋出所需的常用軟體。前面已經介紹了Linux軟體的安裝,本節將利用這些命令來安裝常用軟體。

1.ifconfig

CentOS mini版本是沒有安裝ifconfig命令的,我們需要先安裝它,輸入以下命令即可完成安裝:

yum install -y net-tools

上面-y 的作用是無須提示,否則yum 會讓你再次確認是否安裝。安裝完成後,輸入ifconfig可以檢視本機的P地址等資訊,如圖14-5所示。

2.Java

Spring Cloud是Java開發的一套微服務框架,因此在部署應用之前,必須安裝Java執行環境。Java的安裝很簡單,只需要輸入命令:

yum install -y java

就可以從yum源安裝最新Java,目前版本是Java 1.8。

執行命令:

java -version

可以檢視當前Java環境的版本,如圖14-6所示。

3.Nginx

Nginx 作為反向代理容器,已經成為了伺服器部署必不可少的工具,因此,我們也需要大致瞭解Nginx的安裝和部署,以便後面利用Nginx進行反向代理。

由於CentOS預設沒有Nginx的 yum源,我們首先需要安裝它:

rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

安裝完成後,檢視Nginx是否存在,如圖14-7所示。

接著開始安裝Nginx,輸入命令:

yum install -y nginx

然後啟動Nginx :

/sbin/nginx

在瀏覽器中輸入虛擬機器IP,可以看到如圖14-8所示的介面。

如果無法訪問,可以輸入命令 systemctl stop firewalld關閉防火牆,並再次嘗試訪問。

4.Redis

Redis作為記憶體資料庫,有著得天獨厚的優勢,本書中主要用於儲存使用者的 token 資訊。當然,它也可以快取一些經常使用又不經常發生變化的資料。

對於Redis 的安裝,我們可以採用原始碼編譯安裝,具體步驟如下。

(1)在官網下載原始碼:

wget http: / / download.redis.io/releases/redis-5.0.3.tar.gz

其中 wget是 Linux 的一個命令,用於訪問網路,並下載對應的檔案。如果提示未找到命令,則透過命令yum install wget -y安裝wget。

(2)解壓縮檔案:

tar -zxvf redis-5.0.3.tar.gz

其中tar命令是操作TAR格式壓縮檔案的命令,可以壓縮和解壓縮檔案、資料夾。

(3)進入Redis目錄:

cd redis-5.0.3

(4)編譯並安裝Redis :

make

如果提示gcc命令未找到,則需要先安裝gcc,此時執行命令yum install gcc gcc++ -y 即可。(5)修改redis.conf檔案,將daemonize no改為daemonize yes,這樣可以讓Redis開啟守護程序(即後臺執行程序),否則啟動後按Ctrl+C組合鍵會自動退出程序。

(6)啟動Redis :

cd src./redis-server ../redis.conf

執行完成後,如果出現如圖14-9所示的資訊,則說明Redis 啟動成功。

我們可以啟動Redis客戶端,測試Redis是否正常,如圖14-10所示。

Redis 的預設啟動埠是6379,本書只展示了Redis單機版,它同樣支援主從結構和分散式結構,Redis預設無密碼登入,可以透過redis.conf設定密碼、主從同步、讀寫最佳化等。

5. MariaDB

CentOS 7已經將MySQL從預設的程式列表中移除,安裝MySQL可能會有問題,因此我們選擇MariaDB。

MariaDB是MySQL的一個分支,主要由開源社群維護,採用GPL授權許可。開發這個分支的原因之一是:甲骨文公司收購了MySQL後,可能會將MySQL閉源,因此社群採用分支的方式來避開這個風險。

MariaDB完全相容MySQL,因此可以輕鬆替換 MySQL.

MariaDB的安裝也很簡單,執行如下命令即可完成安裝:

yum install mariadb-server mariadb -y

首先,啟動MariaDB並設定開機啟動:

systemctl start mariadbsystemctl enable mariadb

啟動後,就可以使用MariaDB了。MariaDB預設沒有密碼,可以透過以下命令進入:

mysql -uroot -p

回車後會提示輸入密碼,忽略它,再按一次回車即可進入 MariaDB的命令列介面。

可以先設定MariaDB的登入密碼,具體操作如下:

set password for 'root'@'localhost' = password( '要設定的密碼');

6.RabbitMQ

RabbitMQ依賴Erlang,因此要先安裝 Erlang。

(1)安裝Erlang編譯環境:

yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixODBCunixODBC-devel httpd python-simplejson

(2)編譯並安裝Erlang :

#下載Erlang原始碼包wget http: //erlang.org/download/otp_src_19.2.tar.gz#解壓縮檔案tar -xzvf otp_src_19.2.tar.gzcd otp_src_19.2#配置編譯環境./configure --prefix=/usr/local/erlang --enable-smp-support --enable-threads --enable-sctp--enable-kernel-poll --enable-hipe --with-ssl --without-javac#編譯並安裝make && make install#配置Erlang環境變數vim /etc/profile#在檔案最下面加入Erlang環境變數export PATH=$PATH:/usr/local/erlang/bin#使環境變數生效source /etc/profile

vim是 Linux的編輯器,可使用命令yum install -y vim安裝。

安裝好Erlang後,安裝並部署RabbitMQ,具體步驟如下。

(1)下載並安裝RabbitMQ:

cd /usr/localwget http://www .rabbitmq . com/releases/rabbitmq-server/v3.6.1/rabbitmq-server-generic-unix-3.6.1.tar.xzxz -d rabbitmq-server-generic-unix-3.6.1.tar.xztar -xvf rabbitmq-server-generic-unix-3.6.1.tar

(2)配置RabbitMQ環境變數,編輯/etc/profile並增加RabbitMQ環境變數:

vim /etc/profile#設定 RabbitMQ環境變數export PATH=$PATH:/usr/local/rabbitmq_server-3.6.1/sbinsource /etc/profile

(3)啟動RabbitMQ服務:

rabbitmq-server -detached

其中-detached表示開啟守護程序。

(4)安裝RabbitMQ的Web管理外掛:

mkdir /etc/rabbitmqrabbitmq-plugins enable rabbitmq_management

(5)配置防火牆策略,允許外部訪問15672和5672這兩個埠:

firewall-cmd --permanent --add-port=15672/tcpfirewall-cmd --permanent --add-port=5672/tcpsystemctl restart firewalld

RabbitMQ的預設埠為5672,網頁管理介面的預設埠為15672。

開啟瀏覽器,輸入 http://IP:15672,可以看到如圖14-11所示的介面。

網頁預設無法訪問,我們還需要建立管理使用者並設定許可權:

#設定使用者名稱和密碼,這裡都設定為adminrabbitmqctl add_user admin adminrabbitmqctl set_permissions -p / admin".*"".*"".*"rabbitmqctl set_user_tags admin administrator

這樣我們就可以登入網頁管理介面了,如圖14-12所示。

7.Elasticsearch

Elasticsearch 5.0以上版本提高了安全級別,它不允許root使用者啟動,因此我們需要建立一個使用者來安裝並啟動它,命令如下:

useradd espasswd es

其中,useradd命令表示增加使用者,passwd命令表示為指定使用者設定登入密碼。

如果想要設定es 使用者的許可權,可以輸入命令:

visudo

然後加入一行程式碼,其中ALL表示擁有所有許可權:

root ALL=(ALL)   ALLes ALL=(ALL)     ALL

想要切換使用者時,可以輸入:

su - escd

接下來,我們就可以按照下面的步驟安裝Elasticsearch了。(1)下載Elasticsearch軟體包:

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.4.tar.gZ

(2)解壓縮軟體包:

tar -zxvf elasticsearch-6.5.4.tar.gz

(3)修改Elasticsearch配置:

cd elasticsearch-6.5.4/configvim elasticsearch.yml

修改network.host如下:

#0.0.0.日表示不限制IP,也可以輸入具體IP,這樣只有設定的IP才能請求network.host: e.8.0.0

(4)切換到root使用者,修改sysctl.conf:

vim /etc/sysctl.conf

在最下面新增一下內容:

vm.max_map_count=262144

使用如下命令使sysctl.conf生效:

sysctl -p

(5)修改檔案/etc/security/limits.conf,在該檔案最下面新增以下內容:

*hard nofile65536*soft nofile 65536*soft nproc 4096* hard nproc 4096

這裡需要注意的是,*也要加上。

(6)回到es使用者,啟動Elasticsearch:

cd elasticsearch-6.5.4/bin./elasticsearch -d其中,-d表示開啟守護程序。

(7)關閉防火牆:

systemctl stop firewalld

(8)驗證 Elasticsearch。透過瀏覽器訪問地址IP:9200,如果看到如圖14-13所示的介面,說明Elasticsearch啟動成功。

編譯、打包、釋出

在編譯打包之前,我們可以先將部落格系統的MySQL指令碼匯入虛擬機器的資料庫中,並將資料來源修改成虛擬機器的資料庫連線地址,再將RabbitMQ、Elasticsearch和Redis修改成虛擬機器的地址。

由於我們基於Spring Boot,所以需要透過Spring Boot提供的Maven外掛來打包。修改pom.xml檔案,增加以下內容:

然後在每個微服務工程中都加入以上程式碼,並修改finalName和 mainclass。

透過Maven編譯打包應用很簡單,執行下面的命令即可:

mvn cleanmvn install

利用IDEA視覺化介面更加方便,如圖14-14所示。

安裝完成後,我們可以在工程檔案下看到一個target目錄,裡面包含了.jar檔案,這就是我們要釋出的應用程式。

將jar包上傳到伺服器指定目錄(本書為/app ),透過命令nohup java -jar *.jar &即可啟動應用程式。(“*”為萬用字元,需要替換為具體的包名。)

利用Jenkins 實現持續整合

Jenkins是Java開發的一種開源的持續整合工具,用於執行重複的工作以解放生產力。它旨在提供一個開放易用的軟體平臺,使軟體的持續整合變為可能。

The leading open source automation server, Jenkins provides hundreds of plugins to support building,deploying and automating any project.

大致含義是說:作為領先的開源自動化伺服器,Jenkins提供了數百個外掛用以支援構建、部署和自動化專案。

安裝並配置Jenkins

本節將在虛擬機器 CentOS上安裝並配置Jenkins,安裝方式有多種,本文采用yum安裝。

(1)配置yum源:

wget -o /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.reporpm --import https:/ljenkins-ci.org/redhat/jenkins-ci.org.key

(2)安裝Jenkins :

yum install jenkins -y

稍等片刻,Jenkins就將安裝完成。

(3)修改/etc/sysconfig/jenkins,設定預設埠為8888,如:

JENKINS_PORT="8888"

(4)啟動Jenkins :

service jenkins start

啟動完成後,在瀏覽器中輸入 http://1P:8888,可以看到如圖14-15所示的介面。

選擇Install suggested plugins(安裝推薦的外掛)開始安裝外掛,期間請保持網路暢通,安裝外掛比較耗時,一段時間後,你將看到如圖14-17所示的介面。

(5)安裝Jenkins常用外掛。

本書的實戰專案是透過Maven構建的,我們也希望透過Jenkins 從 Git倉庫拉取原始碼,而且可以自動編譯和上傳到Linux伺服器並自動啟動。Jenkins 採用外掛的思想,上述的這些動作都需要安裝相應的外掛來完成。

經過分析,我們至少需要 Maven、SSH和 Git外掛。由於Git外掛在安裝 Jenkins時已預設安裝,這裡只需要安裝Maven和 SSH相關外掛即可。

接著,使用同樣的方法安裝SSH Plugins 和 Publish Over SSH這兩個外掛即可。(6)配置Jenkins全域性應用伺服器。

Jenkins無法操作/root目錄,因此建議讀者最好新建一個目錄,這裡新建了一個名叫/app的目錄。

(7)配置全域性工具。

Maven可以從 Apache官網下載並解壓到指定目錄即可(下載地址: http://mirrors.hust.edu.cn/apache/maven/maven-3/3.6.0/binaries/apache-maven-3.6.0-bin.tar.gz )。Git需要安裝,安裝命令為yum install -y git。我們透過 yum安裝的Java比較分散,不方便在Jenkins 設定,因此需要再單獨下載JDK,並解壓到指定目錄(下載地址: https://www.oracle.com/technetwork/cn/javaljavase/downloads/jdk8-downloads-2133151-zhs.html ) ,我們下載以tar.gz格式結尾的檔案即可。

建立任務

本節以註冊中心register為例,講述如何透過Jenkins快速部署應用,其他服務方法類似。

在“原始碼管理”中選擇Git,並設定倉庫地址(Repository URL),選擇Credentials。因為第一次建立時沒有使用者,所以需要新增一個使用者,如圖14-23所示。

這裡輸入Git倉庫對應的使用者名稱和密碼即可。在Pre Steps選項卡中設定構建前的命令,Root POM一欄輸入pom.xml,Goals and options 一欄輸入clean package,如圖14-24所示。

在圖14-26中我們輸入了執行命令(Exec command ),該執行命令為構建成功後在伺服器執行的指令碼,我們需要事先再伺服器建立register.sh 指令碼檔案,並輸入以下shell程式碼:

#!/bin/shpsid=0APP_PORT=8101APP_NAME=/ app/blog/register/target/register.jarcheckpid(){javaps=`/ app/jdk1.8.0_191/bin/jps -1I grep $APP_NAME*if[ -n "$javaps" ]; thenpsid=" echo $javaps I awk '{print $1}“elsepsid=0fi}start() {checkpidif[ $psid -ne 0];thenecho "=====三=當=教自===============日=臺==="echo "warn : $APP_NAME already started! (pid=$psid)"echo "=====出===============-=========="elseecho -n "Starting $APP_NAME ..."#-DlogFn=active指的是生產日誌檔名為activenohup java -jar $APP_NAME >nohup.out&#echo "(pid=$psid)[OK]"checkpidif[$psid -ne e];thenecho "(pid=$psid)[OK]”elseecho "[Failed]"fifi}stop(){checkpid[$psid -ne 0 ]; thenecho -n "Stopping $APP_NAME ...(pid=$psid)kill -9$psidif[$?-eq 0]; thenecho "[OK]"elseecho "[Failed]"ficheckpidif [ $psid -ne 0 ]; thenstopfielseecho " ===============二=日=============='echo "warn: $APP_NAME is not running"echo "=====三三====蘭=三三當=三日日==========="fi}status(){checkpidif[ $psid -ne 0 ];thenecho "$APP_NAME is running! (pid=$psid)"elseecho "$APP_NAME is not running"fi}case "$1" in'start')start;;'stop ')stop;;'restart')stopstart;;'status')status;;*)echo "Usage:$0 {startlstopIrestartlstatuslinfo}"exit 1esacexit 0

上述為Java應用通用的啟動指令碼,可選引數有 start、 stop、restart、status 和info,設定同的引數表示呼叫不同的函式。讀者需要修改APP NAME、APP_PORT和 javaps的值,其中APP_NAME為要啟動的應用全路徑,APP_PORT為啟動埠,javaps為jps路徑(jps為JVM監控程式)。

構建專案

判斷構建成功的依據是,觀察 Build History構建進度左邊的圓點,藍色為成功,黃色為不穩定,紅色為失敗。

構建成功後,訪問地址IP:8101即可進入註冊中心介面。

小結

本章進人了系統釋出階段,先介紹了Linux作業系統的安裝與操作,然後介紹了專案的編譯與打包,最後講解了如何透過Jenkins自動釋出系統。透過本章的學習,讀者可以獨立完成系統的構建和釋出工作。

13
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 什麼是Web Shell