springcloud实战:详解应用系统发布上线

2022-10-28 16:51:16 浏览数 (1)

系统发布上线

通过前几章的学习,我们顺利完成了应用的开发,仅仅完成框架搭建和功能开发是不够的,我们还需要将应用发布到服务器上供客户端访问。本章中,我们将开始详解应用的发布。

发布前准备

在发布应用前,我们需要进行发布前的准备工作,比如服务器、常用软件的安装和数据库的创建等。

虚拟机的安装

在发布应用之前,我们需要先准备服务器,本书采用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命令的,我们需要先安装它,输入以下命令即可完成安装:

代码语言:javascript复制
yum install -y net-tools

上面-y 的作用是无须提示,否则yum 会让你再次确认是否安装。安装完成后,输入ifconfig可以查看本机的P地址等信息,如图14-5所示。

2.Java

Spring Cloud是Java开发的一套微服务框架,因此在部署应用之前,必须安装Java运行环境。Java的安装很简单,只需要输入命令:

代码语言:javascript复制
yum install -y java

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

执行命令:

代码语言:javascript复制
java -version

可以查看当前Java环境的版本,如图14-6所示。

3.Nginx

Nginx 作为反向代理容器,已经成为了服务器部署必不可少的工具,因此,我们也需要大致了解Nginx的安装和部署,以便后面利用Nginx进行反向代理。

由于CentOS默认没有Nginx的 yum源,我们首先需要安装它:

代码语言:javascript复制
rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.
noarch.rpm

安装完成后,查看Nginx是否存在,如图14-7所示。

接着开始安装Nginx,输入命令:

代码语言:javascript复制
yum install -y nginx

然后启动Nginx :

代码语言:javascript复制
/sbin/nginx

在浏览器中输入虚拟机IP,可以看到如图14-8所示的界面。

如果无法访问,可以输入命令 systemctl stop firewalld关闭防火墙,并再次尝试访问。

4.Redis

Redis作为内存数据库,有着得天独厚的优势,本书中主要用于存储用户的 token 信息。当然,它也可以缓存一些经常使用又不经常发生变化的数据。

对于Redis 的安装,我们可以采用源码编译安装,具体步骤如下。

(1)在官网下载源码:

代码语言:javascript复制
wget http: / / download.redis.io/releases/redis-5.0.3.tar.gz

其中 wget是 Linux 的一个命令,用于访问网络,并下载对应的文件。如果提示未找到命令,则通过命令yum install wget -y安装wget。

(2)解压缩文件:

代码语言:javascript复制
tar -zxvf redis-5.0.3.tar.gz

其中tar命令是操作TAR格式压缩文件的命令,可以压缩和解压缩文件、文件夹。

(3)进入Redis目录:

代码语言:javascript复制
cd redis-5.0.3

(4)编译并安装Redis :

代码语言:javascript复制
make

如果提示gcc命令未找到,则需要先安装gcc,此时执行命令yum install gcc gcc -y 即可。(5)修改redis.conf文件,将daemonize no改为daemonize yes,这样可以让Redis开启守护进程(即后台运行进程),否则启动后按Ctrl C组合键会自动退出进程。

(6)启动Redis :

代码语言:javascript复制
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的安装也很简单,执行如下命令即可完成安装:

代码语言:javascript复制
yum install mariadb-server mariadb -y

首先,启动MariaDB并设置开机启动:

代码语言:javascript复制
systemctl start mariadb
systemctl enable mariadb

启动后,就可以使用MariaDB了。MariaDB默认没有密码,可以通过以下命令进入:

代码语言:javascript复制
mysql -uroot -p

回车后会提示输入密码,忽略它,再按一次回车即可进入 MariaDB的命令行界面。

可以先设置MariaDB的登录密码,具体操作如下:

代码语言:javascript复制
set password for 'root'@'localhost' = password( '要设置的密码');

6.RabbitMQ

RabbitMQ依赖Erlang,因此要先安装 Erlang。

(1)安装Erlang编译环境:

代码语言:javascript复制
yum -y install make gcc gcc-c   kernel-devel m4 ncurses-devel openssl-devel unixODBCunixODBC-devel httpd python-simplejson

(2)编译并安装Erlang :

代码语言:javascript复制
#下载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:

代码语言:javascript复制
cd /usr/local
wget http://www .rabbitmq . com/releases/rabbitmq-server/v3.6.1/rabbitmq-server-generic-unix-3.6.1.tar.xz
xz -d rabbitmq-server-generic-unix-3.6.1.tar.xztar -xvf rabbitmq-server-generic-unix-3.6.1.tar

(2)配置RabbitMQ环境变量,编辑/etc/profile并增加RabbitMQ环境变量:

代码语言:javascript复制
vim /etc/profile
#设置 RabbitMQ环境变量
export PATH=$PATH:/usr/local/rabbitmq_server-3.6.1/sbin
source /etc/profile

(3)启动RabbitMQ服务:

代码语言:javascript复制
rabbitmq-server -detached

其中-detached表示开启守护进程。

(4)安装RabbitMQ的Web管理插件:

代码语言:javascript复制
mkdir /etc/rabbitmq
rabbitmq-plugins enable rabbitmq_management

(5)配置防火墙策略,允许外部访问15672和5672这两个端口:

代码语言:javascript复制
firewall-cmd --permanent --add-port=15672/tcp
firewall-cmd --permanent --add-port=5672/tcp
systemctl restart firewalld

RabbitMQ的默认端口为5672,网页管理界面的默认端口为15672。

打开浏览器,输入 http://IP:15672,可以看到如图14-11所示的界面。

网页默认无法访问,我们还需要创建管理用户并设置权限:

代码语言:javascript复制
#设置用户名和密码,这里都设置为admin
rabbitmqctl add_user admin admin
rabbitmqctl set_permissions -p / admin".*"".*"".*"
rabbitmqctl set_user_tags admin administrator

这样我们就可以登录网页管理界面了,如图14-12所示。

7.Elasticsearch

Elasticsearch 5.0以上版本提高了安全级别,它不允许root用户启动,因此我们需要创建一个用户来安装并启动它,命令如下:

代码语言:javascript复制
useradd es
passwd es

其中,useradd命令表示增加用户,passwd命令表示为指定用户设置登录密码。

如果想要设置es 用户的权限,可以输入命令:

代码语言:javascript复制
visudo

然后加入一行代码,其中ALL表示拥有所有权限:

代码语言:javascript复制
root ALL=(ALL)   ALL
es ALL=(ALL)     ALL

想要切换用户时,可以输入:

代码语言:javascript复制
su - es
cd

接下来,我们就可以按照下面的步骤安装Elasticsearch了。(1)下载Elasticsearch软件包:

代码语言:javascript复制
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.4.tar.gZ

(2)解压缩软件包:

代码语言:javascript复制
tar -zxvf elasticsearch-6.5.4.tar.gz

(3)修改Elasticsearch配置:

代码语言:javascript复制
cd elasticsearch-6.5.4/config
vim elasticsearch.yml

修改network.host如下:

代码语言:javascript复制
#0.0.0.日表示不限制IP,也可以输入具体IP,这样只有设置的IP才能请求
network.host: e.8.0.0

(4)切换到root用户,修改sysctl.conf:

代码语言:javascript复制
vim /etc/sysctl.conf

在最下面添加一下内容:

代码语言:javascript复制
vm.max_map_count=262144

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

代码语言:javascript复制
sysctl -p

(5)修改文件/etc/security/limits.conf,在该文件最下面添加以下内容:

代码语言:javascript复制
*hard nofile65536
*soft nofile 65536
*soft nproc 4096
* hard nproc 4096

这里需要注意的是,*也要加上。

(6)回到es用户,启动Elasticsearch:

代码语言:javascript复制
cd elasticsearch-6.5.4/bin
./elasticsearch -d
其中,-d表示开启守护进程。

(7)关闭防火墙:

代码语言:javascript复制
systemctl stop firewalld

(8)验证 Elasticsearch。通过浏览器访问地址IP:9200,如果看到如图14-13所示的界面,说明Elasticsearch启动成功。

编译、打包、发布

在编译打包之前,我们可以先将博客系统的MySQL脚本导入虚拟机的数据库中,并将数据源修改成虚拟机的数据库连接地址,再将RabbitMQ、Elasticsearch和Redis修改成虚拟机的地址。

由于我们基于Spring Boot,所以需要通过Spring Boot提供的Maven插件来打包。修改pom.xml文件,增加以下内容:

代码语言:javascript复制
<build>
<!--打包后的文件名-->
<finalName>register</finalName><resources>
<resource>
<directory>src/main/resources</directory><filtering>true</filtering>
</resource>
</resources><plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId><configuration>
<!--应用启动的主函数-->
<mainclass>com.lynn.blog.register.RegisterApplication</mainClass></configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal></goals>
</execution>< /executions></plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId><version>2.5</version>
<configuration>
<encoding>UTF-8</encoding>
<useDefaultDelimiters>true</useDefaultDelimiters></configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.18.1</version>
<configuration>
<!--编译时跳过单元测试类,默认为false -->
<!--我建议这里设置为true,否则在编译时,如果有单元测试类,就会自动执行,
这带来的坏处是:一是运行单元测试,增加编译时长;二是如果单元测试类有改变数据库数据的代码,尤其是删除数据,可能会带来灾难性的后果 --><skipTests>true</skipTests>
</configuration>
</plugin>
<plugin>
<groupid>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>2.3.2</version>
<configuration>
<!--编译环境为JDK1.8 --><source>1.8</source>
<target>1.8</target></configuration>
</plugin>
</plugins>
</build>

上述代码在前面的章节已作相应介绍,这里不再解释。

然后在每个微服务工程中都加入以上代码,并修改finalName和 mainclass。

通过Maven编译打包应用很简单,执行下面的命令即可:

代码语言:javascript复制
mvn clean
mvn 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源:

代码语言:javascript复制
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 :

代码语言:javascript复制
yum install jenkins -y

稍等片刻,Jenkins就将安装完成。

(3)修改/etc/sysconfig/jenkins,设置默认端口为8888,如:

代码语言:javascript复制
JENKINS_PORT="8888"

(4)启动Jenkins :

代码语言:javascript复制
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代码:

代码语言:javascript复制
#!/bin/sh
psid=0
APP_PORT=8101
APP_NAME=/ app/blog/register/target/register.jar
checkpid(){
javaps=`/ app/jdk1.8.0_191/bin/jps -1I grep $APP_NAME*if[ -n "$javaps" ]; then
psid=" echo $javaps I awk '{print $1}“else
psid=0
fi
}
start() {
checkpid
if[ $psid -ne 0];then
echo "=====三=当=教自===============日=台==="
echo "warn : $APP_NAME already started! (pid=$psid)"echo "=====出===============-=========="
else
echo -n "Starting $APP_NAME ..."
#-DlogFn=active指的是生产日志文件名为activenohup java -jar $APP_NAME >nohup.out&#echo "(pid=$psid)[OK]"
checkpid
if[$psid -ne e];then
echo "(pid=$psid)[OK]”else
echo "[Failed]"
fi
fi
}
stop(){
checkpid
[$psid -ne 0 ]; then
echo -n "Stopping $APP_NAME ...(pid=$psid)kill -9$psid
if[$?-eq 0]; then
echo "[OK]"
else
echo "[Failed]"fi
checkpid
if [ $psid -ne 0 ]; then
stop
fi
else
echo " ===============二=日=============='
echo "warn: $APP_NAME is not running"
echo "=====三三====兰=三三当=三日日==========="
fi
}
status(){
checkpid
if[ $psid -ne 0 ];then
echo "$APP_NAME is running! (pid=$psid)"else
echo "$APP_NAME is not running"
fi
}
case "$1" in
'start')
start;;'stop ')
stop;;'restart')
stopstart;;'status')
status;;
*)
echo "Usage:$0 {startlstopIrestartlstatuslinfo}"exit 1
esac
exit 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实战:详解应用系统发布上线

  1. 下篇文章给大家讲解的是springcloud实战:使用Kubernetes部署分布式集群;
  2. 觉得文章不错的朋友可以转发此文关注小编;
  3. 感谢大家的支持!

本文就是愿天堂没有BUG给大家分享的内容,大家有收获的话可以分享下,想学习更多的话可以到微信公众号里找我,我等你哦。

0 人点赞