多环境和前后多环境实战

news2024/11/16 3:50:15

文章目录

  • 一.多环境
    • 1.1 什么是多环境
    • 1.2 多环境分类
      • 1.2.1 本地环境(自己的电脑)
      • 1.2.2 开发环境(远程开发)
      • 1.2.3 测试环境
      • 1.2.4 预发布环境
      • 1.2.5 正式环境
      • 1.2.6 沙箱环境(实验环境)
    • 1.3 如何实现
      • 1.3.1 抽象配置类
      • 1.3.2 配置文件化
      • 1.3.3 注入环境参数
  • 二.前端多环境
    • 2.1 基础
    • 2.2 分类
      • 2.2.1 umi框架
      • 2.2.2 其他框架
    • 2.3 实战
      • 2.3.1 环境分类
        • 2.3.1.1 开发环境
        • 2.3.1.2 线上环境
        • 2.3.1.3 serve
      • 2.3.2 多环境配置参数
      • 2.3.3 实战
  • 三.后端多环境
    • 3.1 基础
    • 3.2 分类
    • 3.3 实战
      • 3.3.1 在云服务器上安装配置mysql
      • 3.3.2 **idea连接线上数据库后的布置**
      • 3.3.3 配置环境
      • 3.3.4 打包运行
      • 3.3.5 线上数据库新用户注册

一.多环境

1.1 什么是多环境

多环境:指同一套项目代码在不同的阶段需要根据实际情况来调整配置并且部署到不同的机器上。

根据实际需要,将同一个项目(或同一套代码)按照一定方法进行区分,并将所需资源和项目本身部署到不同的机器上。不同环境的项目可以有 不同的行为 ,且能够 同时存在、互不影响

  1. 每个环境互不影响

  2. 区分不同的阶段:开发 / 测试 / 生产等

  3. 对项目进行优化:

    • 本地日志级别

    • 精简依赖,节省项目体积

    • 项目的环境 / 参数可以调整,比如 JVM 参数

      针对不同环境做不同的事情。

1.2 多环境分类

1.2.1 本地环境(自己的电脑)

localhost

一般用 local 标识,是指前端或后端独立开发、自主测试的环境。通常就是让项目和依赖在我们自己的电脑上运行,比如数据库、缓存、队列等各种服务,可能需要自己在本地搭建。

1.2.2 开发环境(远程开发)

大家连同一台机器,为了大家开发方便。

一般用 dev 标识,是指前端和后端(或者多个程序员)一起协作开发、联调的环境。通常将项目和依赖放在员工电脑可以直接访问的开发机上,不用自己搭建,直接跑起来项目,提高开发和协作效率。

对规模不大的团队来说,开发和本地环境其实有一套就够了,毕竟本地也可以连接公用的数据库等服务。

1.2.3 测试环境

(测试)开发 / 测试 / 产品,单元测试 / 性能测试 / 功能测试 / 系统集成测试,独立的数据库、独立的服务器。

一般用 test 标识,是指前端和后端开发和联调完成,做出完整的新功能后,交给测试人员去找 Bug 的环境。

通常在测试环境需要有独立的测试数据库和其他服务,让测试人员大显身手。每次修改完 Bug 后,也都要再次发布项目到测试环境,让测试同学重新验证。

1.2.4 预发布环境

预发布环境(体验服):和正式环境一致,正式数据库,更严谨,查出更多问题。

一般用 pre 标识,这是和线上项目最接近的环境,一般是测试验证通过、产品经理体验过后,才能将项目发布到这个环境。

实际上,预发布环境的项目调用的后端接口、连接的数据库、服务等都 和线上项目一致 ,和线上唯一的区别就是前端访问的域名不同。

正因如此,预发布环境看到的都是真实的用户数据,可以发现更多测试环境因为数据不足而没查出来的 Bug。

1.2.5 正式环境

正式环境(线上,公开对外访问的项目):尽量不要改动,保证上线前的代码是 “完美” 运行。

一般用 prod 标识,又叫线上环境,是给所有真实用户使用的环境。

因此不能随意修改,且发布项目到该环境时必须格外小心。线上的数据库、机器等资源一般也是由专业的运维来负责,想要登录机器、修改配置,都需要经过严格审批。

1.2.6 沙箱环境(实验环境)

为了做实验。

1.3 如何实现

遵循 3 个步骤:抽象配置类 + 配置文件化 + 注入环境参数。

1.3.1 抽象配置类

将项目代码中需要根据环境的变化而更改的变量整理到一个或多个配置类中,集中管理。

1.3.2 配置文件化

我们可以用专门的配置文件来维护配置,从而让用户修改配置更方便,不用再去找代码、改代码。

全网最全的springboot配置文件速成

无论是前端还是后端,大部分的多环境实现都是这个原理 —— 搞多套配置,所以总能在项目中看到类似的配置文件:

1.3.3 注入环境参数

到目前为止,其实我们还是在代码中写了 死值 ,来告诉程序应该加载哪个名称的配置文件。

比如在本地开发时,加载application-dev.yml开发完成后、正式上线前,再改代码为加载 application-prod.yml

但这样不仅麻烦,而且可能忘了修改,把开发环境的项目发布到了线上。

最理想的效果应该是:无论项目要切换到哪个环境,整个项目都完全不用修改。

因此,我们可以将 指定环境 这件事放到最后,在通过命令去打包或者启动项目时,将环境参数写进去。

举个例子,我们在启动 java 项目时,给系统变量传递不同参数:

java -jar user-center-backend-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod

二.前端多环境

2.1 基础

区分开发环境和线上环境,同时根据应用的不同的前端框架进行不同的部署。

2.2 分类

对于前端项目来讲,开发环境和线上环境还有一些区别,比如说项目的配置。

2.2.1 umi框架

●开发环境:config.dev.ts
●生产环境:config.prod.ts
●公共配置:config.ts 不带后缀

2.2.2 其他框架

此外,不同的项目(框架)都有不同的配置文件,umi 的配置文件是 config.ts,可以在配置文件后添加对应的环境名称后缀来区分开发环境和生产环境。

不同的框架或多或少有一些区别,可以直接查看官方文档,比如umi框架,参考文档:https://umijs.org/zh-CN/docs/deployment

2.3 实战

2.3.1 环境分类

2.3.1.1 开发环境

开发环境 localhost:8000

localhost就是本机。在请求一个网页资源的时候,首先把这些网站的文件,拿到自己的浏览器里,之后,如果说这个网页还需要依赖什么文件,我们都是从自己的电脑上发出的请求,所以这个localhost,其实请求的是我们自己的电脑。

启动方式:npm run start(本地启动,监听端口、自动更新)

2.3.1.2 线上环境

线上环境 已经备案的域名

build就是构建,现在主流的前端项目基本上都是要做构建的,这个构建过程中它做了哪些事情?他就是把咱们写的的代码,各种资源,JS、CS、HTML文件,全部做一些压缩、混淆,去给它做一个编排,然后做一些删减、精简之类的,把它全部打包成一个目录里。

修改前端的全局请求配置文件(src/plugins/globalRequest.ts),把请求地址(baseUrl)改成自己的真实请求地址,注意区分本地和线上环境。

修改前端的全局请求配置文件(src/plugins/myAxios.ts),把请求地址(baseUrl)改成自己的真实请求地址,注意区分本地和线上环境。

**启动方式:**npm run build(项目构建打包),可以使用 serve 工具启动(npm i -g serve)

2.3.1.3 serve

serve使用

前端打包后,有时需要将打包好的项目跑一下看看效果,这时就可以使用 serve 工具,在本地启动一个静态文件服务器。

全局安装 serve

npm install --global serve

运行 serve

方式1:进入到打包好的项目目录下,一般为 dist 或者 build,直接运行 serve 即可。

方式2:在项目根目录运行

serve -s dist

在浏览器输入 http://localhost:3000 即可查看到你打包好的项目。

修改端口

serve -s dist -p 10007

2.3.2 多环境配置参数

项目使用了 umi 框架,本地开发调试时执行 start 命令,会自动传入参数 NODE_ENV = development;当我们运行umi build 命令的时候,其实umi框架已经帮我们把 NODE_ENV = production 传入进来了。

app.tsx里有个 process.env.NODE_ENV,可以在前端的请求配置文件中,通过判断 process.env.NODE_ENV 是否为 production 来指定不同的请求域名。

2.3.3 实战

  1. 修改前端的全局请求配置文件(src/plugins/globalRequest.ts),把请求地址(baseUrl)改成自己的真实请求地址,注意区分本地和线上环境。

现在对里面的umi-request请求库,做一些额外的配置,我们可以用prefix。

prefix:前缀。prefix就是可以指定我们每次请求的前缀,就可以改变咱们每次请求前面的这些地址,就是什么域名端口之类的。

  1. 使用 build 命令打包一下。npm run build(项目构建打包)。 打包之后,我们能够看见这个文件的大小,之后做性能优化什么的,可以从这个大小下手,就是看你怎么样写代码,能够把这个项目的体积能够搞的更小一些。通过build打包得到dist文件。
  2. serve。我们现在可以在本地去运行一下这个项目。

vscode:右键这个dist文件夹->在集成终端中打开。
webstrom:右键这个dist文件夹->Open In -> Terminal
或者直接cd到这个目录里

在dist文件中输入serve。

  1. 访问地址。serve得到网址。

登录local地址,查看Request URL为线上地址。

这个请求的地址由本地地址变成线上地址,也就是说,我们通过了一个环境变量就成功区分出了本地以及线上项目,那如果你要加入测试环境,可以如法炮制。

三.后端多环境

3.1 基础

后端就是提供了用户的增删改查、登录注册。用户的增删改查的数据是存在本地的mysql数据库,上线是要把这个数据库地址改成一个远程的地址,起码要公网可访问,或者说自己的前/后端项目部署的那个服务器能访问。

后端多环境主要更改:

  • 依赖的环境地址
    • 数据库地址
    • 缓存地址
    • 消息队列地址
    • 项目端口号
  • 服务器配置

3.2 分类

后端怎么去区分不同的环境?这种模式就跟前端是一样的,基本上所有的项目都是这种模式,通过在配置文件后面加一个后缀来区分环境,那后端项目也一样。

我们后端的SpringBoot 项目,通过 application.yml(配置文件) 添加不同的后缀来区分配置文件

application.yml就是公共的配置,公共配置就是任何环境它都会加载这个配置,所以像一些什么mybatis-plus这种框架层面的,就任何环境都一样的配置,就写在公共配置里就好了;

3.3 实战

3.3.1 在云服务器上安装配置mysql

  1. 在云服务器中用yum来安装配置mysql。
  2. 使用宝塔面板安装mysql。

参考上面文章,在云服务器上安装配置mysql。

3.3.2 idea连接线上数据库后的布置

参考上面文章,IDEA连接服务器mysql,进入控制台,创建数据库。

3.3.3 配置环境

application.yml配置如下图:

复制application.yml,粘贴到resources包下,重命名为application-prod.yml

mybatis-plus等公共配置保持不变,改变datasource设置,将datasource改变为线上数据库配置。

去改一下线上的配置文件,url可以去修改那里查看复制,后面加上要连接的数据库就可以了。

3.3.4 打包运行

现在要测试一下,在本地运行生产环境的项目,对于Springboot的项目就要打一个jar包
点击右侧maven->Lifecycle->鼠标左键双击package

会出现一个报错,说有一个单元测试没通过,一般情况下,在项目上线之前肯定要执行一遍单元测试的,单元测试就是要保证咱们项目运行的时候是没有问题,不过现在改有点麻烦,我们以打包为主。

点击小闪电图标,让它跳过单元测试,然后再双击package。

target包下出现构建好的jar包

快速进入终端

运行jar包,并传入上线环境参数

java -jar user-center-backend-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod

里面有一行The following 1 profile is active: “prod”,这里就是说咱们目前的这个prod的配置文件已经生效了

3.3.5 线上数据库新用户注册

去看一下访问的是哪个数据库,只要是线上的数据库就OK了,我们现在让前端项目来对接一下,把前端项目重启。

重启后,前端页面会弹出未登录,输入账户密码,点击登录,后端报错了。

往下滑,显示数据库查不到这个用户,成功连接上线上数据库,只不过我们还没在这个线上数据库插入数据罢了。

继续验证是否连接上线上数据库,注册一个用户,然后进行登录。

服务器中的数据库中多出了一个注册的新用户,后端多环境完成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1699026.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Git--本地仓库

文章目录 工作区和暂存区工作区(Working Directory)版本库(Repository) 初始化git仓库添加文件到版本库步骤 查看修改内容查看工作区和暂存区状态已add文件已修改/新增 的未add文件git跟踪修改原理 查看提交历史版本回退撤销修改撤…

C++/ cuda kernel中的模版元编程识别 kernel 模版的数据类型

1,模版元编程 模板元编程是一种利用 C 模板系统在编译时进行计算和生成代码的技术。其原理基于模板特化、递归、模板参数推导等特性,通过模板实例化和展开,在编译时生成代码,以实现在编译期间进行复杂计算和代码生成的目的。 2&am…

化学中的不确定性。

化学中的不确定性TOC 基于元素分析的无机化学的理论大厦应该说早已落成了,但是却仍然存在着一些列的难解甚至是无解问题,这些大多是在使用理论解释现象时遇到的困难,有些则是在生产实践中生产工艺和生产工序设计和优化中发现的问题。于是&…

音视频开发8 音视频中SDL的使用,SDL 在windows上环境搭建,SDL 使用 以及 常用 API说明,show YUV and play PCM

1.SDL简介 SDL(Simple DirectMedia Layer),是一个跨平台的C语言多媒体开发库。 支持Windows、Mac OS X、Linux、iOS、Android 提供对音频、键盘、鼠标、游戏操纵杆、图形硬件的底层访问 很多的视频播放软件、模拟器、受欢迎的游戏都在使用…

【移动云】云端赋能——数字化时代游戏与工作的新境界

前言 在当今这个信息化、数字化的时代,云计算、大数据和人工智能等前沿技术已经深入到我们生活的方方面面。作为我国通信行业的领军企业,中国移动凭借其在5G技术领域的领先优势,推出了基于移动云计算技术的云业务品牌——移动云。移动云以云操…

CSS浮动(CSS从入门到精通学习第四天)

css第04天 一、其他样式 1、圆角边框 在 CSS3 中,新增了圆角边框样式,这样我们的盒子就可以变圆角了。 border-radius 属性用于设置元素的外边框圆角。 语法: border-radius:length; 参数值可以为数值或百分比的形式如果是正方形&…

Win11系统CMD乱码

1. 背景 在打包前端代码的时候,看到系统控制台中竟然出现了乱码。想到之前就曾经出现过因为影响不大就一直放着没管。今天有空就把问题解决掉吧。 2. 解决过程 2.1 问题定位 在命令行中执行 chcp,看到返回结果如下 Active code page: 936936 代表的…

浅谈金融行业数据安全分类分级

数据安全管理是一项从上而下的、多方配合开展的工作。在进行数据安全管理组织架构建设时,需要从上而下建设;从而全面推动数据安全管理工作的执行和落地;以保证数据安全的合法合规、并长效推动业务的发展和稳定运行。 金融行业机构应设立数据…

五种独立成分分析(ICA)

代码原理及流程 代码实现了混合信号的独立成分分析(ICA)过程,主要包括以下几个步骤: 原始语音信号读取与显示:首先读入原始的两个语音信号(music.wav和man.wav),并显示在图中的第一和第二个子图中。混合声…

ROS参数服务器

一、介绍 参数服务器是用于存储和检索参数的分布式多机器人配置系统,它允许节点动态地获取参数值。 在ROS中,参数服务器是一种用于存储和检索参数的分布式多机器人配置系统。它允许节点动态地获取参数值,并提供了一种方便的方式来管理和共享配…

redis--消息队列

分类 生产者消费模式 发布者订阅模式 生产者消费模式 在生产者消费者(Producer/Consumer)模式下,上层应用接收到的外部请求后开始处理其当前步骤的操作,在执行完成后将已经完成的操作发送至指定的频道(channel)当中,并由其下层的应用监听…

Java筑基(三)

Java筑基(三) 一、final概念1、案例1:采用继承:2、案例2:final修饰的类不可以被继承:3、案例3:final修饰的类不能有子类,但是可以有父类4、final修饰构造方法5、final修饰普通方法6、…

《Python源码剖析》之pyc文件

前言 前面我们主要围绕pyObject和pyTypeObject聊完了python的内建对象部分,现在我们将开启新的篇章—python虚拟机,将聚焦在python的执行部分,搞懂从“代码”到“执行”的过程。开启新的篇章之前,你也许会有一个疑惑:我…

aws 接入awsIOT平台的证书签发逻辑

参考资料 https://aws.amazon.com/cn/blogs/china/certification-vending-machine-intelligent-device-access-aws-iot-platform-solution/ IoT 设备与 AWS IoT Core 的 MQTT 通信使用基于证书的 TLS 1.2双向认证体系。所谓的双向认证,即意味着 IoT 设备端需安装 …

制作电子画册速成攻略,快来试试

​当今社会,数字媒体日益普及,电子画册作为一种崭新的展示方式,受到了越来越多人的青睐。它不仅形式新颖,互动性强,而且制作起来也并不复杂。想知道如何快速掌握制作电子画册的技巧吗?我来教你吧。 接下来&…

代码随想录-Day20

654. 最大二叉树 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值。 递归地在最大值 左边 的 子数组前缀上 构建左子树。 递归地在最大值 右边 的 子数组后缀上 构建右子树。 返回 nums…

cmake编译redis6.0源码总结

1配置clion使用cygwin模拟linux环境,先下载cygwin后配置 2导入源码,配置cmake文件 由于redis是基于Linux上的Makefile,所以Windows上需要配置CMakeLists.txt使用cmake工具编译运行。github上已经有人尝试编写CMakeLists.txt文件&#xff0c…

<Python实际应用>用yolov9实现垃圾检测

公司一个项目需要在无人机巡检的画面中识别垃圾和汽车,正好听闻yolov9最新出炉,于是试了一下采用yolov9来搭建该项目 1.下载和部署 下载yolov9:GitHub地址:GitHub代码下载地址 配置环境可以参考之前关于yolov5的文章 Yolov5自学笔记之一-…

计算机毕业设计 | springboot+vue房屋租赁管理系统(附源码)

1,绪论 1.1 课题来源 随着社会的不断发展以及大家生活水平的提高,越来越多的年轻人选择在大城市发展。在大城市发展就意味着要在外面有一处安身的地方。在租房的过程中,大家也面临着各种各样的问题,比如需要费时费力去现场看房&…