react 访问后端_React前端服务与SpringBoot后台服务部署至映射后的中继服务器实现互联网可访问...

想必这个题目就让人很头疼,我刚拿到这个需求的时候也是真的懵逼。原始需求是需要让我把内网开发后的项目部署后实现互联网可访问。背景:公司是军工企业,内部所有的开发环境都不允许连接互联网,且仅留出几个IP通过中继做到内网网段后进行远程上网或代理上网。那么一头雾水的我开始了撞南墙模式。尝试了很久搞出了一套适合公司内部的部署方式......心累......

1、实现内网服务器中继

针对需求做了认真的分析后发现直接将当前项目部署至互联网服务器上是最方便最稳妥的方案(天真脸*_*),但是提交接入互联网的申请后被驳回,上级认为这样安全性就得不到保证,最重要的数据源需要保密存储不能部署到外网。那这样的话除了通过将服务部署至数据库所在网段外别无它法。无线中继原理

但分析业务后得出结论数据库所在网段无法直连互联网。因此只能促使我使用中继服务将其与互联网的网段通过专用交换机连接,之后再通过非常给力的运营部小伙伴的协助进行了注册,成功将研发网段中继到了有权限访问外网的IP上。但是该IP经过验证分析直接接通互联网也存在安全隐患,因此又进行了外网的端口映射,最终占据映射的端口才得以将内网服务展示到外网并实现访问数据及openlayer数据图层。(以上的分析因为没有样例项目做对照,所以存在闭门造车的嫌疑,还望大神指出不足)

可行性分析与技术论证完成了,接下来就要开始项目的打包部署了,由于开发过程是在windows环境下进行的,而部署服务器为linux环境,因此我们所有的微服务都建议打成jar包。不使用war包的原因是SpringBoot的每项微服务在jar包中均自带tomcat可随jar包的启动而启动,而且jar包执行方便。因此为何使用jar包就不言而喻了。

2、服务配置及打包

以本篇为例,共需要六项服务为整体项目提供支持,它们分别为SpringEurake平台,gateway路由分发服务,configcenter注册中心,tail消费者服务,service接口提供服务,react前端服务这六项。假如需要构建新的数据源可以参照下方的文章:兔先森:SpringBoot配置pg新数据源及接口开发手册​zhuanlan.zhihu.com

这篇文章实现了在同网段下进行新数据源的配置,同时实现了新的数据接口,构建新数据源存在问题时可以参考下。

其中需要配置的文件为application.yml或者bootstrap.yml,路径在根目录下的resource文件夹下。

SpringEurake平台的配置内容如下所示:

spring:

application:

name: eureka-service

server:

port: 7070

eureka:

client:

register-with-eureka: false

fetch-registry: false

instance:

hostname: shipTail1

server:

enable-self-preservation: false

eviction-interval-timer-in-ms: 4000

以上是SpringEurake平台的配置内容,需要注意端口号不要占用映射的端口,平台服务不需要配置IP。

configcenter注册中心配置如下:

spring:

application:

name: configCenterService

#执行使用SVN

profiles:

active: subversion

cloud:

config:

server:

svn:

uri: https://1.1.1.1/svn/web/shiptail/configProperties

username: anzp

password: anzp

#指定svn目录下的某个文件夹作为配置仓库 默认为trunk

default-label: config

server:

port: 7078

eureka:

client:

serviceUrl:

# defaultZone: http://mq:7070/eureka/,http://mongodb:7070/eureka/

注册中心需要注意服务端口不要占用映射端口,同时与其他端口要保持差异性。服务IP在本例中做了类分布式处理。最后部署到外网服务器需要将serviceUrl改为部署到的外网IP(要严格准确)。

gateway服务分发中心配置如下:

spring:

application:

name: gateway

server:

port: 7075

zuul:

routes:

api-a:

path: /shiptail/service/**

service-id: shipTail

api-b:

path: /shiptail/weball/**

service-id: shipHtml

api-c:

path: /shiptail/indeed/**

service-id: cargoHtml

max:

host:

connections: 500

host:

socket-timeout-millis: 60000

connect-timeout-millis: 60000

eureka:

client:

serviceUrl:

#defaultZone: http://mongodb:7070/eureka/,http://mongodb2:7070/eureka/,http://mq:7070/eureka/

##timeout config

hystrix:

command:

default:

execution:

timeout:

enabled: true

isolation:

thread:

timeoutInMilliseconds: 60000

ribbon:

ReadTimeout: 60000

ConnectTimeout: 60000

MaxAutoRetries: 0

MaxAutoRetriesNextServer: 1

eureka:

enabled: true

需要注意的是要为前端项目预留出前端项目的部署路径path: /shiptail/indeed/**(服务访问地址与path一致),服务名称service-id: cargoHtml,也要注意端口不要占用映射端口,同时与其他端口不要相同。 serviceUrl也要配置成部署到的外网IP!

tail消费者服务配置如下

spring:

application:

name: shipTail

datasource:

driverClassName: org.postgresql.Driver

url: jdbc:postgresql://1.1.1.1:5432/postgres

username: postgres

password: postgres

jackson:

default-property-inclusion: non_null

server:

port: 9072

# tomcat:

# max-threads: 50

eureka:

client:

serviceUrl:

#defaultZone: http://mongodb:7070/eureka/,http://mongodb2:7070/eureka/

instance:

prefer-ip-address: true

feign:

hystrix:

enabled: true

# compression:

# request:

#enabled: true # 配置请求GZIP压缩

# mime-types: text/xml,application/xml,application/json

# min-request-size: 2048

#response:

#enabled: true # 配置响应GZIP压缩

# min-request-size: 2048

client:

config:

feignName:

connectTimeout: 10000

readTimeout: 10000

hystrix:

command:

default:

execution:

timeout:

enabled: true #执行是否启用超时

isolation:

thread:

timeoutInMilliseconds: 10000 #命令执行超时时间

ribbon:

ReadTimeout: 60000

ConnectTimeout: 60000

也要注意端口不要占用映射端口,同时与其他端口保持差异性。 serviceUrl也要配置成部署到的外网IP!

service接口提供服务配置如下:

spring:

application:

name: NewshipcargoService

cloud:

config:

profile: dev

uri: http://1.1.1.1:7078/

label: config

name: application

jackson:

default-property-inclusion: NON_NULL

server:

port: 8029

eureka:

client:

serviceUrl:

#defaultZone: http://mq:7070/eureka/,http://mongodb:7070/eureka/

instance:

prefer-ip-address: true

也要注意端口不要占用映射端口,同时与其他端口保持差异。 serviceUrl也要配置成部署到的外网IP!重要的事情说三遍......

react前端服务配置如下:

spring:

application:

name: cargoHtml

server:

port: 7077

eureka:

client:

serviceUrl:

# defaultZone: http://mongodb:7070/eureka/,http://mongodb2:7070/eureka/,http://mq:7070/eureka/

前端服务特别要注意的是application下的name需要和gateway下面的service-id一致,同时要注意端口不要占用映射端口,同时与其他端口保持差异。 serviceUrl也要配置成部署到的外网IP!重要的事情说n遍......

到此为止,所有的服务就已经配置完成了。

3、项目打包及部署

在配置了私服后,我们可以通过右键项目选择Run As,再选择Maven Install进行项目打包,打包模式为jar包。本次操作需要将本地文件拷贝到局域网内的其他服务器上,因为本地研发网段11与10均为1网段的中继,因此可以通过scp命令进行文件传输,将打完的jar包传输至数据库所在网段的服务器上,命令为

把当前一个文件copy到其他服务器的指定文件夹下:

scp /home/******.jar root@192.168.1.1:/home/root

同时假如安装了xftp5的话,可以连接到指定服务器,打开指定路径可视化工具将jar包拖入即可。移动六项服务后的结果如下所示:

随后通过

java -jar *************.jar

命令即可启动项目。

假如想要服务的执行保证可持续化可以使用

nohup java -jar **************.jar

命令启动项目,这样项目就可在后台持续运行,命令行中断项目也不会终止项目的运行,除非使用命令杀死占用相应端口的进程。

至此我的服务就已经部署到做了映射的中继服务器上,外网可以持续访问。其实难点不多,困扰作者的只是经验太少,没有一个能指路的老师。不过我相信越努力,越幸运,不要被环境影响改变自己的初心。部署顺利

Happy Hacking!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值