多环境和前后多环境实战

文章目录

  • 一.多环境
    • 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.rhkb.cn/news/332381.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

引流500+创业粉,抖音口播工具

在抖音平台运营一个专注于口播的工具号,旨在集结超过500位热衷于创业的粉丝,这需要精心筹划的内容策略和周到的运营计划。首先,明确你的口播工具号所专注的领域,无论是分享创业经验、财务管理技巧还是案例分析,确保你所…

NL6621 实现获取天气情况

一、主要完成的工作 1、建立TASK INT32 main(VOID) {/* system Init */SystemInit();OSTaskCreate(TestAppMain, NULL, &sAppStartTaskStack[NST_APP_START_TASK_STK_SIZE -1], NST_APP_TASK_START_PRIO); OSStart();return 1; } 2、application test task VOID TestAp…

外卖小程序开发指南:从源码开始构建高效的外卖平台

今天,笔者将为您详细讲解如何从源码开始构建一个高效的外卖小程序,帮助您快速进入这一蓬勃发展的市场。 一、需求分析与设计 需求分析包括: 1.用户需求 2.市场需求 3.技术需求 二、前端开发 以下是开发步骤: -使用微信开发…

【论文阅读】Prompt Fuzzing for Fuzz Driver Generation

文章目录 摘要一、介绍二、设计2.1、总览2.2、指导程序生成2.3、错误程序净化2.3.1、执行过程净化2.3.2、模糊净化2.3.3、覆盖净化 2.4、覆盖引导的突变2.4.1、功率调度2.4.2、变异策略 2.5、约束Fuzzer融合2.5.1、论据约束推理2.5.1、模糊驱动融合 三、评估3.1、与Hopper和OSS…

使用梦畅闹钟,结合自定义bat、vbs脚本等实现定时功能

梦畅闹钟-每隔一段时间运行一次程序 休息五分钟bat脚本(播放音乐视频,并锁屏) chcp 65001 echo 回车开始休息5分钟 pause explorer "https://www.bilibili.com/video/BV1RT411S7Tk/?p47" timeout /t 3 /nobreak rundll32.exe use…

变分自动编码器(VAE)深入理解与总结

本文导航 0 引言1 起源1.1 自编码器的任务定义1.2 自编码器存在的问题1.3 VAE的核心思路 2 VAE的建模过程2.1 VAE的任务定义2.2 真实分布 ϕ \phi ϕ是什么,为什么要逼近这个分布的参数,如何做?2.3 “重参数化(Reparameterization…

前端开发工程师——数据可视化

canvas canvas绘制线段 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthd…

渗透工具CobaltStrike工具的下载和安装

一、CobalStrike简介 Cobalt Strike(简称为CS)是一款基于java的渗透测试工具&#xff0c;专业的团队作战的渗透测试工具。CS使用了C/S架构&#xff0c;它分为客户端(Client)和服务端(Server)&#xff0c;服务端只要一个&#xff0c;客户端可有多个&#xff0c;多人连接服务端后…

CST初级教程 六

本篇教程将以差分线为例&#xff0c;实例讲解参数化建模及参数扫描。 一 Project创建 点击New and Recent&#xff0c;再点击New Template 点击MICROVAVES & RF/OTICAL&#xff0c;然后在选中Circuit & Components。 点击对话框中Next按钮&#xff0c;在弹出对话框…

WPF之容器标签之Canvas布局标签

Canvas: 定义一个区域&#xff0c;可在其中使用相对于 Canvas 区域的坐标以显式方式来定位子元素。 实例 可以在子标签使用Canvas属性设置定位 <Canvas Width"500" Height"300"><StackPanel Width"100" Height"100"Backgro…

【C#】未能加载文件或程序集“CefSharp.Core.Runtime.dll”或它的某一个依赖项。找不到指定的模块。

欢迎来到《小5讲堂》 这是《C#》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 背景错误提示分析原因解决方法Chromium知识点相关文章 背景 最近在使…

c语言:模拟strlen(三种方法)最全版本

1.计数的方法 #include <stdio.h> #include <assert.h> int my_strlen(const char * str)//const的使用优化 {int count0;assert(str)while(*str){count;str;}return count; } 2.用指针的方法&#xff08;指针-指针&#xff09; #include <stdio.h> #incl…

unity开发Hololens 制作滑动框

一定要做到最后一步&#xff0c;才会有效果 1、创建空物体 ,并添加组件 创建空物体 命名ScrollingObjectCollection&#xff0c; 添加组件如下图 下面是各个组件展开的内容 2、在ScrollingObjectCollection 下面创建两个空物体&#xff0c;分别命名Container、Clipping…

MT3040 矩形覆盖

代码&#xff1a; #include <bits/stdc.h> using namespace std; typedef long long ll; const int N 3e5 10; int n, ans, d, w; stack<int> s; // 单调栈 // 如果楼高度类似121&#xff08;凸&#xff0c;两边相等&#xff0c;中间比两边的大&#xff09;&…

学 Python 具体能干什么?

Python 是一种功能强大、用途广泛的编程语言&#xff0c;因其简洁易读的语法和丰富的库生态系统而备受欢迎。学习 Python后&#xff0c;你可以从事以下几方面的工作&#xff1a; 1. Web 开发 Python 有很多流行的 Web 框架&#xff0c;如&#xff1a; Django&#xff1a;一个…

HTML与CSS的学习

什么是HTML,CSS&#xff1f; HTML(HyperText Markup Language):超文本标记语言。 超文本:超越了文本的限制&#xff0c;比普通文本更强大。除了文字信息&#xff0c;还可以定义图片、音频、视频等 标记语言:由标签构成的语言 >HTML标签都是预定义好的。例如:使用<a>…

2024/05/25学习记录

1、面经复习&#xff1a;前端广度 2、代码随想录刷题&#xff1a;动态规划 3、rosebush 完成input组件基础

HCIP的学习(22)

BGP优化 [r1-bgp]peer 12.0.0.2 default-route-advertise ---BGP下放缺省路由&#xff0c;无论本地的路由表中是否存在缺省路由&#xff0c;都会向对等体下发一条下一跳为本地的缺省路由&#xff0c;从而减少网络中路由数量&#xff0c;节省对等体的设备资源 BGP协议优先级 缺…

返回枚举类给前端

1. 前言 在实际开发过程中&#xff0c;前端的下拉框或者单选按钮的内容通常的需要和后端匹配的&#xff0c;故一般会由后端将下拉框的内容或单选框的内容传给前端&#xff0c;而这些内容在后端一般是由枚举类存储的&#xff0c;如果后端直接返回枚举类&#xff0c;返回结果将会…

idea2023的git从dev分支合并到主分支master

1.本地项目切换到主分支master 右键项目-git-Branches 依次点击项目-Remote-Origin-master-CheckOut 现在你的idea中的这个项目就是远程master分支的代码了。 2.合并dev分支到master 右击项目-git-Merge 选择origin-dev 点击Merge按钮&#xff0c;此时只是合并到本地的maste…