系統釋出上線
透過前幾章的學習,我們順利完成了應用的開發,僅僅完成框架搭建和功能開發是不夠的,我們還需要將應用釋出到伺服器上供客戶端訪問。本章中,我們將開始詳解應用的釋出。
釋出前準備在釋出應用前,我們需要進行釋出前的準備工作,比如伺服器、常用軟體的安裝和資料庫的建立等。
虛擬機器的安裝
在釋出應用之前,我們需要先準備伺服器,本書採用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.outecho "(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自動釋出系統。透過本章的學習,讀者可以獨立完成系統的構建和釋出工作。