因业务需求,有多台云服务器包括移动云服务器、阿里云服务器、都是只能公网访问。
服务器1:3x.x.x.x2
服务器2:3x.x.x.xx7
服务器3:4x.x.x.x0
服务器4:4x.x.x.x5
微服务技术选型是zuul-gateway作为网关,nacos作为配置管理中心,redis作为缓存,mysql作为数据,fastdfs作为文件存储系统,nginx作为web服务器
一、服务器3
服务器3 搭建nacos服务、redis服务、zuul-gateway服务。
nacos 搭建配置 略
nacos配置中心截图预览
redis 搭建配置 略
zuul-gawate 配置分为三个,bootstrap.yml 和nacos配置的api-gateway配置和其他微服务共用common.yml配置
bootstrap.yml
server:port: 10001undertow:buffer-size: 1024direct-buffers: truespring:application:name: api-gatewaycloud:nacos:config:server-addr: ip:port #服务器3的ip和nacos启动的端口file-extension: ymlnamespace: xxxx #nacos的命名空间shared-configs:- data-id: common.ymlgroup: DEFAULT_GROUPrefresh: falsediscovery:namespace: xxxx #nacos的命名空间 跟上面的namespace一样server-addr: ip:port #服务器3的ip和nacos启动的端口 跟上面server-addr一样ip: ip #服务器3的IPport: 10001 #该服务使用的端口,跟上面的port一样servlet:multipart:enabled: truemax-file-size: 512MBmax-request-size: 512MBfile-size-threshold: 0http:multipart:location:xxp #临时目录# 添加ribbon的超时时间设置ribbon:ReadTimeout: 600000ConnectTimeout: 600000zuul:host:connect-timeout-millis: 600000socket-timeout-millis: 600000hystrix:command:default:execution:isolation:thread:timeout-in-milliseconds: 600000
api-gateway配置
zlt:oauth2:token:store:type: redissecurity:ignore:# 忽略认证的地址httpUrls: >/api-demo/**,/api-demouser/**auth:urlPermission:#是否开启url级别权限enable: true#配置只进行登录认证,不进行url权限认证的apiignoreUrls: >/api-testuser/menus/tree#白名单includeClientIds:- testrenew:#是否开启token自动续签(目前只有redis实现)enable: true#白名单includeClientIds:- testgateway:#网关动态路由dynamicRoute:enabled: truezuul:ribbon-isolation-strategy: threadribbon:eager-load:enabled: truethreadPool:useSeparateThreadPools: truethreadPoolKeyPrefix: api-gateway#关闭重试retryable: falseignored-headers: Access-Control-Allow-Credentials,Access-Control-Allow-Origin,Access-Control-Allow-Methodsadd-host-header: trueroutes:demo:path: /api-demo/**service-id: demo-centerstrip-prefix: truesensitive-headers: '*'custom-sensitive-headers: truedemouser:path: /api-demouser/**service-id: demouser-centerstrip-prefix: truesensitive-headers: '*'custom-sensitive-headers: truessl-hostname-validation-enabled: falsehystrix:threadpool:default:coreSize: 100maximumSize: 2000allowMaximumSizeToDivergeFromCoreSize: truemaxQueueSize: -1command:default:execution:isolation:thread:timeoutInMilliseconds: 60000swagger:butler:auto-generate-from-zuul-routes: truegenerate-routes: demo,demouserapiDocsPath: v2/api-docsserver:tomcat:max-swallow-size: -1spring:http:multipart:location: /xx/xxx/xxp #临时目录max-file-size: 512MBmax-request-size: 512MB
common.yml配置
#### nacos(注册中心和配置中心)地址spring:cloud:nacos:server-addr: ip:port #nacos的ip和端口号username: nacos账号password: nacos密码##### redis配置# 连接池最大连接数(使用负值表示没有限制)##### redis配置redis:host: redis的ipport: redis的端口password: redis的密码timeout: 5000lettuce:pool:max-active: 20# 连接池最大阻塞等待时间(使用负值表示没有限制)max-wait: -1# 连接池中的最大空闲连接max-idle: 10# 连接池中的最小空闲连接min-idle: 0##### druid配置#连接池配置(通常来说,只需要修改initialSize、minIdle、maxActivedatasource:druid:initial-size: 10max-active: 500min-idle: 10# 配置获取连接等待超时的时间max-wait: 60000#打开PSCache,并且指定每个连接上PSCache的大小pool-prepared-statements: truemax-pool-prepared-statement-per-connection-size: 20validation-query: SELECT 'x'test-on-borrow: falsetest-on-return: falsetest-while-idle: true#配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒time-between-eviction-runs-millis: 60000#配置一个连接在池中最小生存的时间,单位是毫秒min-evictable-idle-time-millis: 300000filters: stat,wall# WebStatFilter配置,说明请参考Druid Wiki,配置_配置WebStatFilter#是否启用StatFilter默认值trueweb-stat-filter:enabled: trueurl-pattern: /*exclusions: "*.js , *.gif ,*.jpg ,*.png ,*.css ,*.ico , /druid/*"session-stat-max-count: 1000profile-enable: truesession-stat-enable: false# StatViewServlet配置#展示Druid的统计信息,StatViewServlet的用途包括:1.提供监控信息展示的html页面2.提供监控信息的JSON API#是否启用StatViewServlet默认值truestat-view-servlet:enabled: true#根据配置中的url-pattern来访问内置监控页面,如果是上面的配置,内置监控页面的首页是/druid/index.html例如:http://127.0.0.1:9000/druid/index.htmlurl-pattern: /druid/*#允许清空统计数据reset-enable: truelogin-username: Druid监控的账号login-password: Druid监控的密码##### 允许bean覆盖main:allow-bean-definition-overriding: true##### spring-boot-actuator配置management:endpoints:web:exposure:include: "*"endpoint:health:show-details: always########################## application级别通用配置 ############################### ribbon配置## 从注册中心刷新servelist的时间 默认30秒,单位msribbon:ServerListRefreshInterval: 15000## 请求连接的超时时间 默认1秒,单位msConnectTimeout: 30000## 请求处理的超时时间 默认1秒,单位msReadTimeout: 30000## 对所有操作请求都进行重试,不配置这个MaxAutoRetries不起作用 默认false#ribbon.OkToRetryOnAllOperations=true## 对当前实例的重试次数 默认0#ribbon.MaxAutoRetries=1## 切换实例的重试次数 默认1MaxAutoRetriesNextServer: 0##### feign配置feign:sentinel:enabled: truehystrix:enabled: falseokhttp:enabled: truehttpclient:enabled: falsemax-connections: 1000max-connections-per-route: 100client:config:feignName:connectTimeout: 30000readTimeout: 30000##### mybatis-plus配置#字段策略 IGNORED:"忽略判断",NOT_NULL:"非 NULL 判断"),NOT_EMPTY:"非空判断"mybatis-plus:global-config:db-config:field-strategy: NOT_NULL#逻辑删除配置logic-delete-value: 1logic-not-delete-value: 0# 原生配置configuration:map-underscore-to-camel-case: truecache-enabled: falselog-impl: org.apache.ibatis.logging.stdout.StdOutImpl##### elasticsearch配置zlt:elasticsearch:uris: ip:port #elasticsearch的IP和端口username: elasticsearch的账号password: elasticsearch的密码##### fastDFS配置fdfs:web-url: ip:port #fdfs的web访问的ip和端口trackerList: ip:port #fdfs的tracker服务的ip和端口##### 日志链路追踪trace:enable: true##### 负载均衡隔离(version隔离,只适用于开发环境)ribbon:isolation:enabled: false
二、服务器1
服务器配置demo服务,配置包括bootstrap.yml 和nacos配置的demo-center配置和其他微服务共用common.yml配置
bootstrap.yml 配置
server:port: 10002spring:application:name: demo-centermain:allow-bean-definition-overriding: truecloud:nacos:config:server-addr: ip:port#nacos的地址 服务器3的IP和nacos启用的端口file-extension: yml #配置文件格式namespace: xxxx#nacos命名空间 代指某个环境shared-configs:- data-id: common.ymlgroup: DEFAULT_GROUPrefresh: falsediscovery:namespace: xxxxx#nacos命名空间 代指某个环境 跟上面namespace一致,同时跟gateway以及新增的服务一致server-addr: ip:port#nacos的地址 服务器3的IP和nacos启用的端口ip: ip#服务器1的IPport: 10002 #该服务使用的端口,跟上面的port一样
demo-center配置
spring:datasource:url: jdbc:mysql://ip:port/demo" />&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai#mysql 的ip和地址 服务器2(部署mysql服务)username: user#mysql数据的账号password: password #mysql数据的密码driver-class-name: com.mysql.cj.jdbc.Driver#不使用common.yml的reids配置的话,可自行配置redis,如使用common.yml配置中的redis,注释即可redis:host: ip #redis的ipport: port #redis的端口password: pwd #redis的密码mybatis-plus:mapper-locations: classpath:/mapper/*Mapper.xml#实体扫描,多个package用逗号或者分号分隔typeAliasesPackage: com.xx.demo.modelglobal-config:db-config:id-type: autologic-delete-field: flaglogic-delete-value: 1logic-not-delete-value: 0zlt:swagger:enabled: truetitle: demo测试中心description: demo测试中心接口文档1version: 1.0base-package: com.xx.demo.controllercache-manager:configs:- key: menusecond: 300- key: usersecond: 1800#多租户配置tenant:enable: trueignoreTables:- demo_user- demoignoreSqls:# 用户关联角色时,显示所有角色- com.xx.demouser.mapper.xxMapper.findxx# 用户列表显示用户所关联的所有角色- com.xx.demouser.mapper.xxRoleMapper.findRolesxxx#审计日志audit-log:enabled: truelog-type: dbdatasource:driver-class-name: com.mysql.cj.jdbc.Driverjdbc-url: jdbc:mysql://ip:port/alogs?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai#mysql 的ip和地址 服务器2(部署mysql服务)username: user#mysql数据的账号password: password #mysql数据的密码
三、服务器2
服务器2部署mysql数据库服务
四、服务器4
服务器4部署demo-user服务、ngxin服务器、fastdfs服务、demo服务。
五、启动运行
启动redis服务、mysql服务、nacos服务、api-gewate服务、demo服务,可在nacos管理后台看到如下截图
demo服务
服务1:ip为服务1的ip公网地址,端口则是配置bootstrap.yml配置文件中的端口
服务2:ip为服务4的ip公网地址,端口则是配置bootstrap.yml配置文件中的端口
api-gateway服务
ip为服务3的ip公网地址,端口则是配置bootstrap.yml配置文件中的端口
六、验证服务是否正常访问
先访问demo服务器是否可被访问,例如demo写了一个url为demo/test,则通过浏览器或者postman访问
http(s)/ip:port/demo/test,是否正常。(ip和port为服务1的ip地址以及demo服务启动的端口)
在访问通过网关访问服务是否正常,例如:http(s)/ip:port/api-demo/demo/test,是否正常。(ip和port为服务3的ip地址以及api-gateway启动的端口)
确保demo服务两个服务均能访问后、可关闭其中一个服务,通过访问网关访问demo服务,正常
七、注意事项
确保启动的服务器服务启动的端口均能被其他服务器访问,可通过阿里云、移动云的控制台的云主机安全组来先限制端口访问权限,可保证端口暴露在外的安全隐患。
也可以通过服务器的防火墙限制ip访问端口
也可以通过虚拟专用通道构建局域网来限制端口访问。