微服务环境搭建

一. 前置条件

1.1 服务器、vpn和git申请

百度方法去申请就可以了....

1.2 创建git仓库做为微服务SCC配置中心

	Git scc配置中心的仓库要设置为公开属性

	把微服务平台的配置文件派生一份作为自己的git仓库,比如,https://gitfh.com/fh_HIS/XXX(当前项目开发环境配置中心)https://gitfh.com/xrchenggit/XXX-SCC(当前项目测试环境配置中心)

1.3 配置docker环境变量

	将docker.exe放置到某盘的Docker目录下(如D:\Docker\docker.exe),设置响应环境变量。
设置环境变量的方法:计算机→右键属性→高级系统设置→环境变量→系统变量→Path→编辑环境变量,在变量值中添加D:\Docker即可。(ps:也可以通过EnvironmentManager等第三方软件辅助设置)。

	使用docker操作服务器环境
方法一:在cmd命令行中设置命令,远程绑定docker:
Shirft+鼠标右键 → 在此处打开cmd窗口,进入指定路径(如E:\DoctorsWorkspace\IMCCMG)的命令行环境,设置服务器端口set DOCKER_HOST=tcp://xx.xxx.xxx.xxx:xxxx
注意:一定要先设置服务器端口,设置完成后建议输入docker ps -a命令查看当前运行服务,验证是否连入正确的服务器docker环境中。

方法二:安装SecureCRT.exe
即安装Windows下登录UNIX或Linux服务器主机的软件,连接指定服务器,进入命令环境。

1.4 设置dockerfile文件

FROM hub.skyinno.com/fcae/jre-mos:latest
MAINTAINER FAE Config Server "fae@fiberxxx.com"
ADD ./target/fae-ms-demo.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]

注释:fae-ms-demo.jar指的是项目在mvn clean install 后生成的jar包,Dockerfile中的命名一定要跟target下生成的jar包命名一致。

1.5 设置本地host和VPN

	利用SwitchHosts设置本地hosts:
手动更改hosts位置:C:\Windows\System32\drivers\etc
	安装OpenVPNGUI,并设置连接配置文件
设置本地host和安装本地VPN的目的是让我们可以用eclipse进行本地微服务开发调试。

1.6 熟悉相关docker命令

	容器相关操作
top 查看当前docker运行环境的cpu占用率
docker stats 查看所有容器使用cpu、内存、网络、io等情况
docker stats id/name 查看某容器状态情况

	服务相关操作
docker ps -a   列出所有的启动服务(常用)
docker start id/name (某个服务的ID或名称)开启已经打包的服务(常用)
注释:ID即CONTAINER 	ID,名称即CREATED 	NAMES

docker restart id(某个服务的ID)
docker stop 停止服务
docker rm 删除服务
docker run -i -d -e JAVA_OPTS="-Xmx512m -Xms512m" --link=scgo:sc 	--name=selfsystem hub.skyinno.com/hqgj/selfsystem  打包并启动服务
docker start name1 name2 ...  启动多个服务(注:不要用逗号隔开)


	镜像相关操作
docker images 列出所有镜像
docker rmi id	删除镜像
docker build -t hub.skyinno.com/hqgj/selfsystem ./imc-selfsystem构建镜像(./imc-selfsystem是对应路径)

	其他命令
ctrl+c 停止当前运行命令,返回命令行 
clear 清除命令行屏幕
docker logs(查看日志)
docker logs –f id [--tail=200] 服务日志(只查看最后200行)
free -h 查看整个服务器内存使用情况

二. 微服务环境部署

2.1 系统框架服务

2.1.1修改git上的APPLICATION.PROPERTIES配置文件

其中,fae-mc是针对各种基础微服务的配置文件夹,因此可以删除多余的实例fae文件夹,把demo文件夹改成你的项目名称(如imc),imc文件夹中可以加入对具体微服务的配置文件如(nursestation.properties)。

针对已经创建的SCC git仓库配置文件applicaion.properites修改参数如下:
① info.url 改为自己网关所在的ip地址
② spring.rabbitmq.addresses 改为自己的mp所在服务器地址
③ spring.cloud.consul.host 和spring.cloud.consul.port 改为自己的consul地址和对应的端口
④ spring.datasource.url 改为自己的数据库连接地址,spring.datasource.driver-class-name为相应的数据库类型。
⑤ spring.redis.host 和 spring.redis.database 改为自己的redis所在服务器地址和redis区
⑥ 修改application-dev.properties中的spring.redis.database和上面的保持一致

针对不同类型数据库(MySQL、Oracle、SQL Server)参数配置的补充说明:
	MySQL
driverClass:com.mysql.jdbc.Driver
jdbcUrl:jdbc:mysql://192.xxx.0.1:3306/yourDBName
注:192.168.0.1是你的数据库ip地址,yourDBName指的是你的数据库名。
	Oracle
 (thin模式)
driverClass:oracle.jdbc.driver.OracleDriver
jdbcUrl:jdbc:oracle:thin:@192.xxx.0.1:xxxx:SID实例名
	SQL Server
driverClass:com.microsoft.sqlserver.jdbc.SQLServerDriver(2005版本及以后)	jdbcUrl:jdbc:sqlserver://192.168.0.1:1433;databasename=yourDBName
注:yourDBName指的是你的数据库名。

2.1.2FAE服务相关配置

主要针对fae-ms文件夹中文件的相关设置
① gateway.properties
fae.ms.includes=\
i18n,\
lookup,\
...
imcweb,\
medicine
将要涉及的服务依次填入includes中去,新加的服务务必填入!

若前端页面打包到imc-web中,则还需要在gateway中进行如下配置(只需要配置一次就可以了):
zuul.routes.web.path=/**
zuul.routes.web.serviceId=imcweb
(若需要开启框架默认的web界面时这里填写的是web)

注释掉需要鉴权的地址
#fae.filter=/,/index.html
② gateway-dev.properties
fae.ms.includes配置同gateway.properties
③ devops.properties和devops-dev.properties
需要开启权限扫描的服务配置其中即可
④ swagger.properties和swagger-dev.properties
需要开启的swagger服务配置其中即可
⑤ 不要漏掉网关相关配置参数,防止网关因找不到相关服务循环扫描导致docker环境崩溃
zuul.servletPath=/services参数不要漏写

2.1.3部署平台基础服务

注意点一:consul、redis、rabbitmq、scgo四个基础服务必须要最先启动,只有保证了基础服务的正常运行,其他服务才能稳定运行。
注意点二:每次启动服务,都要实时检查它们是否成功启动,一是通过docker ps -a命令排查(up状态);二是在consul控制中心查看服务是否正常运行(绿色)consul(http://10.110.200.106:8500/ui/#/dc1/services)。

基础服务启动顺序:
① consul控制中心服务启动
docker run -d -p 8500:8500 --name=dev-consul hub.skyinno.com/common/consul:latest
② scgo配置中心服务启动
docker run -i -d -h scgo --name=scgo -p 8888:8888 hub.skyinno.com/fcae/sc:v1.2 --git=https://gitfh.com/minxiaoxiaogit/IMCCMG-SCC
配置中心主要是配置其他平台基础服务和具体业务服务,红色地址部分指向的是最新的控制中心派生地址。此时,服务器中微服务启动后,会找到该仓库地址进行相关参数配置。
http://10.110.200.107:8888/  是否成功运行 →  {"message":"Not Found"}
③ redis缓存服务启动(不在consul中显示)
docker run -d -p 6379:6379 -v /data:/data --name=my-redis hub.skyinno.com/common/redis:latest redis-server
④ rabbitmq消息队列服务启动(不在consul中显示)
docker run -d --hostname my-rabbit --name some-rabbit -p 15672:15672 -p 5672:5672 hub.skyinno.com/common/rabbitmq:3.6.8-management

 2.1.4部署平台FAE服务

① gateway网关服务启动
docker run -i -d -e JAVA_OPTS="-Xmx2048m -Xms2048m" --link=scgo:sc --name=gateway -p 8080:80 hub.skyinno.com/fcae/gateway:V1.0.4-RELEASE
注意一:网关gateway服务需要设置内存2048M(最小值,防止内存溢出);其中V1.0.4-RELEASE是当前微服务版本号,这里可根据实际情况选择微服务版本。还要在consul中查看网关是否启动成功。
注意二:这一步一定要检查gateway的启动状态是否成功,在SecureCRT或consul中查看它的状态!!如果gateway启动失败,后面的系统服务都会随之启动失败。
② security安全服务
docker run -i -d -e JAVA_OPTS="-Xmx512m -Xms512m" --link=scgo:sc --name=security hub.skyinno.com/fcae/security:V1.0.4-RELEASE
Security是关于系统登录的相关服务
③ menu菜单服务
docker run -i -d -e JAVA_OPTS="-Xmx512m -Xms512m" --link=scgo:sc --name=menu hub.skyinno.com/fcae/menu:V1.0.4-RELEASE
web页面的菜单显示
④ lookup字典表服务
docker run -i -d -e JAVA_OPTS="-Xmx512m -Xms512m" --link=scgo:sc --name=lookup hub.skyinno.com/fcae/lookup:V1.0.4-RELEASE
⑤ i18n国际化服务
docker run -i -d -e JAVA_OPTS="-Xmx512m -Xms512m" --link=scgo:sc --name=i18n hub.skyinno.com/fcae/i18n:V1.0.4-RELEASE
⑥ swagger(API)服务
docker run -i -d -e JAVA_OPTS="-Xmx512m -Xms512m" --link=scgo:sc --name=swagger hub.skyinno.com/fcae/api:V1.0.4-RELEASE
⑦ attachment附件管理服务
docker run -i -d -e JAVA_OPTS="-Xmx512m -Xms512m" --link=scgo:sc --name=attachment hub.skyinno.com/fcae/attachment:V1.0.4-RELEASE
⑧ openvpn虚拟网络服务(重要),服务器自身配置,找服务器相关人员配置解决。注:在删除、重启所有服务时,切勿删除!!补充:配置vpn的目的在于通过专用通道加密传输框架中特定的lookup字典数据。
⑨ 框架默认网络服务web(可选,框架默认前端服务)
docker run -i -d -e JAVA_OPTS="-Xmx512m -Xms512m" --link=scgo:sc --name=web hub.skyinno.com/fcae/web:latest

2.2 业务微服务 

2.2.1配置新服务

① 网关gateway.properties, gateway-dev.properties等文件中添加新服务(必须)
② API swagger.properties等文件中添加新服务(需要swagger接口注释的)(可选)
③ 权限设置devops.properties等文件中添加新服务(如无权限设置,不管此项)(可选)

2.2.2修改Dockerfile文件

进行docker运行环境参数设置,复制原有的Dockerfile文件到新服务中

ADD ./target/imc-nursestation-1.0.0.jar app.jar

修改红色部分为自己通过mvn install命令打包的jar名

实际上,mvn install打包的jar名是在改项目的pom文件中设置如下图所示:

2.2.3构建新的微服务镜像

docker build -t hub.skyinno.com/yourProjectName/nursestation ../imc-nursestation
其中,hub.skyinno.com/yourProjectName/nursestation是你自定义的镜像名(需要上传docker的);而imc-nursestation是当前项目文件夹名,如下图所示。
注意:该命令是在项目目录下通过cmd命令执行docker命令的!!

2.2.4启动新服务

docker run -i -d -e JAVA_OPTS="-Xmx512m -Xms512m" --link=scgo:sc --name=nursestation  hub.skyinno.com/hqgj/nursestation
注:若服务启动成功,则可以在consul界面看到自己的服务

2.3 前端web设置

以上是两个项目的web服务结构图,不同之处在于前端打包生成的资源文件不同。以右边 glg项目为例,我们把通过npm run build打包的资源文件全部放置到gl-web的微服务资源文件中:

写法一(推荐):

gl-web微服务开始运行之前,启动类通过引用框架两种方法(index() staticResourceHandler()方法)来加载前端首页访问地址及前端资源文件。其中,index.setResource(resourceLoader.getResource("classpath:static/index.html"));  是设置前端首页界面; 而locations.add(resourceLoader.getResource("classpath:static/")); 是设置前端所有静态资源的访问位置。之所以出现staticResourceHandlert()方法是想把static/static下的资源文件单独过滤出来,为它们的资源文件加上正确的路径名,防止前端页面某些图片不能正常显示

在StaticResourcesHandlert类中, @Url(...)是将指定类型的资源文件映射到staticResourceHandlert下,Url()括号内的路径指的是前端设置的路径,而不是打包文件的目录。static文件夹中的图片资源在加载时是按照当前目录访问/aa.png,它的实际路径为static/**.png。因此,需要在每个静态资源路径上加上”static/”,保证图片资源的正常访问与读取。添加”static/”路径的代码如下所示:      request.setAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE, "static/" + path); 

2.3.2前端web微服务打包

前端打包分两种情况,一种是将前端打包资源文件放置到如imcweb的微服务上单独运行;另一种是通过服务器的Tomcat运行前端资源文件。后者直接把打包好的资源文件,整个复制粘贴到服务器Tomcat目录中,路径为/opt/apache-tomcat-8.5.15/webapps/ROOT/。以下主要针对imcweb服务运行的状况进行说明,选择第二种方式运行前端资源文件的可跳过2.3和4.3节。
前端打包步骤:
① pull刷新本地代码,前端打包之前一定要记得下拉刷新本地代码,避免更新代码被覆盖。
② npm run build打包前端代码
③ 复制build文件夹(如build-0104-1715)(前端打包生成的文件夹)中所有内容,包括所有子文件及子文件夹,粘贴到imc-web(目录如E:\DoctorsWorkspace\IMCCMG\imc-web\src\main\resources\static\)中去(static下直接放置所有资源文件)。 
④ 直接执行相关bat脚本文件  (mvn clean install imcweb),并打包上传(见2.2内容)imcweb服务,启动运行该服务。
前端打包注意事项:
① 在npm run build打包过程中一定要确认build日志的正确性,保证前端页面的正常显示。
② 在本地运行调试页面时,需要处理跨域请求的问题,这里采用代理方式解决。(如何代理具体问前端)
③ dva前端登录界面这里就是引用的相对路径,打包后的部分资源文件会放在static下

2.3.3双前端web微服务设置

1.	关于框架web项目的部署结构
一个web项目static下面需匹配多个应用实例名:
2.	通过web服务中的静态资源处理类区分静态资源路径
3.	zuul拦截所有请求
(以第一个web服务为主,himpweb)
zuul.routes.web.path=/**
zuul.routes.web.serviceId=himpweb

4.	前端设置相应路径参数
①修改全局打包路径
5.	备注
双web前端由最厉害的闵潇潇开发研制,还有一种方法是部署多个web微服务,此处就不提到了。如有任何疑问,可咨询潇潇咯。

 

三. 微服务操作补充说明

3.1 利用日志查看检错

要经常利用docker logs -f serviceId(微服务Id) --tail=200检查出错点。
查看网关日志:
因为几乎所有服务都要通过网关,所以docker logs -f gateway(或网关Id) --tail=200经常用于排查错误的第一步。通过查看网关日志确定具体的问题服务,并解决问题。
查看业务服务日志:
对于具体的业务服务问题(无法正常启动等),查看该服务具体日志确定错误。

3.2 docker停止与删除微服务

	停止与删除微服务
docker stop serviceId/serviceName 停止微服务
docker rm id  删除微服务
docker rmi id	删除镜像
这里需要注意的是,我们必须先要停止服务后才能删除服务,服务没停止时是无法删除服务的。对于系统框架服务,在没有删除镜像的情况下直接打包,docker默认原来镜像打包,删除镜像之后才会重新下载新的镜像进行打包。

	关闭微服务顺序
业务微服务 → 基础微服务 → gateway服务 → scgo配置中心服务 → consul控制中心。
需要注意的是,千万不要删除VPN服务或镜像!

	重新打包新服务
在某微服务已存在的情况下,我们要重新打包并覆盖新微服务,应按以下过程进行:
① docker stop oldService	停止旧服务
② docker rm oldService	删除旧服务
③ docker rmi oldService	删除旧服务镜像
④ docker build newService ....	打包新服务镜像
⑤ docker run newService ....	打包并启动新服务
对比说明:在2.2.3节中启动新服务是在改服务不存在的情况下操作,而本节因为该服务已存在,打包覆盖新服务需首先停止删除旧服务!!

3.3部署多个服务对应多个数据库

 

例如:正常情况下,主要微服务走的默认用户 glg的oracle数据库,但是我新建testhimp的微服务,连接的是另一个用户 glg_himp的oracle数据库。

这时候需要在scc中增加设置,如下所示:

 

glHIMP文件夹中对应application-himp.properties。这个文件中就配置新的 glg_himp 的 oracle数据库。

此时,对应本地的spring-boot工程中,修改bootstrap.properties即可。

四. 微服务常见问题汇总

4.1 登录报错问题

涉及到登录报错,无法正常登录进入系统页面。一般有三种错误:
① 前端在打包时出错,页面无法正常加载
② 跟登录相关的服务(security相关)出错或没有成功打包到服务器上去
③ 其他错误,通过gateway排查问题

4.2 服务重启顺序排查

① 控制中心consul→配置中心scgo→网关gateway→其他业务服务
其中,网关gateway和其他服务是在配置中心设置的, 对于启动服务的命令:
docker run -i -d -e JAVA_OPTS="-Xmx2048m -Xms2048m" -e ENV="dev" --link=scgo:sc --name=charge hub.skyinno.com/hqgj/charge  命令中出现scgo:sc,说明这些服务都依赖于配置中心,因此配置中心的重启应写在它们前面;而gateway对于其他业务服务起到转发过滤的作用,启动顺序应仅次与scgo。
② 如无必要,不要删除或重启openvpn服务。
③ 在gateway修改单个服务设置时,只需要重启gateway和指定服务即可。

 4.3微服务请求报错

	网络请求报错响应Response:
{"timestamp":1523609938657,"status":500,"error":"Internal Server Error","exception":"com.netflix.zuul.exception.ZuulException","message":"GENERAL"}
这种情况有多种原因引起。
可能是微服务尚未完全启动成功,需等待片刻,让微服务完全正常启动才能发起url请求;
可能是网关没有添加某服务的通过条件;
可能是请求的API字符有不对。

......更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值