通过前几章的学习,我们顺利完成了应用的开发,仅仅完成框架搭建和功能开发是不够的,我们还需要将应用发布到服务器上供客户端访问。本章中,我们将开始详解应用的发布。
发布前准备在发布应用前,我们需要进行发布前的准备工作,比如服务器、常用软件的安装和数据库的创建等。
虚拟机的安装
在发布应用之前,我们需要先准备服务器,本书采用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。
(3)打开VMware,点击“创建新的虚拟机”并将CentOS安装到VMware。
(4)创建完成后,进入CentOS安装界面,稍等片刻,你将看到如图14-1所示的界面。
点击“继续”后选择“安装位置”,如图14-2所示。
然后开始设置安装分区,如图14-3所示。
选中“本地标准磁盘”,点击“完成”按钮,回到安装界面,然后点击开始安装,CentOS开始安装,如图14-4所示。
系统在默认情况下没有设置密码,点击“ROOT密码”,设置你的ROOT密码。稍等片刻,系统安装完成,重启虚拟机后即可开始你的Linux之旅。
如果安装好虚拟机后,网络没有连接成功,可以按照以下方式配置。
(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开发的一种开源的持续集成工具,用于执行重复的工作以解放生产力。它旨在提供一个开放易用的软件平台,使软件的持续集成变为可能。
Jenkins官方网站( https://jenkins.io/)是这样描述的:
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所示的界面。
如果界面上提示Please waiting while Jenkins is getting ready to work,说明Jenkins正在配置,请耐心等待,配置完成后会自动跳转到如图14-15所示的界面。如果始终停留在这个界面,则请检查网络,并重启Jenkins。
输入Jenkins安装密码°,点击Continue按钮,进入插件安装界面,如图14-16所示。
选择Install suggested plugins(安装推荐的插件)开始安装插件,期间请保持网络畅通,安装插件比较耗时,一段时间后,你将看到如图14-17所示的界面。
点击Save and Continue按钮将进入Jenkins主页,如图14-18所示。
(5)安装Jenkins常用插件。
本书的实战项目是通过Maven构建的,我们也希望通过Jenkins 从 Git仓库拉取源码,而且可以自动编译和上传到Linux服务器并自动启动。Jenkins 采用插件的思想,上述的这些动作都需要安装相应的插件来完成。
经过分析,我们至少需要 Maven、SSH和 Git插件。由于Git插件在安装 Jenkins时已默认安装,这里只需要安装Maven和 SSH相关插件即可。
依次点击“系统管理”→“插件管理”→“可选插件”,搜索关键字maven integration,找到对应插件,选中 Maven Integration plugin复选框,点击直接安装即可,如图14-19所示。
接着,使用同样的方法安装SSH Plugins 和 Publish Over SSH这两个插件即可。(6)配置Jenkins全局应用服务器。
依次点击“系统管理”→“系统设置”,找到Publish over SSH,设置应用要部署的服务器信息,如图14-20所示。
Jenkins无法操作/root目录,因此建议读者最好新建一个目录,这里新建了一个名叫/app的目录。
服务器登录密码要点击“高级”按钮才能出来,并且勾选Use password authentication,or use adifferent key复选框。
(7)配置全局工具。
依次点击“系统管理”→“全局工具配置”,进入配置界面,根据如图14-21所示配置Maven、JDK和Git。
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快速部署应用,其他服务方法类似。
点击“新建任务”,输入任务名,选择构建一个Maven 项目,然后点击“确定”按钮,进入任务配置界面,如图14-22所示。
在“源码管理”中选择Git,并设置仓库地址(Repository URL),选择Credentials。因为第一次创建时没有用户,所以需要添加一个用户,如图14-23所示。
这里输入Git仓库对应的用户名和密码即可。在Pre Steps选项卡中设置构建前的命令,Root POM一栏输入pom.xml,Goals and options 一栏输入clean package,如图14-24所示。
紧接着,在Post Steps点击Add post-build step右面的下拉列表,选择Send files or execute commandsover SSH,开始设置构建后的操作,如图14-25和图14-26所示。
最后,点击“保存”按钮,任务即创建完成。
在图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监控程序)。
构建项目
回到Jenkins首页,在右边的列表中点击刚才创建的任务,进入如图14-27所示的界面。
点击“立即构建”即可。第一次构建可能比较耗时,因为Jenkins需要从Maven下载各种依赖包。在 Build History中可看到当前的构建进度。
点击当前的构建进度,可以进入控制台,Jenkins 会实时刷新日志,如图14-28所示。
判断构建成功的依据是,观察 Build History构建进度左边的圆点,蓝色为成功,黄色为不稳定,红色为失败。
构建成功后,访问地址IP:8101即可进入注册中心界面。
小结本章进人了系统发布阶段,先介绍了Linux操作系统的安装与操作,然后介绍了项目的编译与打包,最后讲解了如何通过Jenkins自动发布系统。通过本章的学习,读者可以独立完成系统的构建和发布工作。
本文给大家讲解的内容是springcloud实战:详解应用系统发布上线 下篇文章给大家讲解的是springcloud实战:使用Kubernetes部署分布式集群;觉得文章不错的朋友可以转发此文关注小编;感谢大家的支持!