根据实际需要,将一个项目(同一套代码)按照一定方法进行区分,将其与所需资源部署到不同的机器上。不同环境上的项目可以有不同的行为,保证能够同时存在,互不影响。
不同的团队有不同的区分,这里仅作参考学习。
- 本地环境(自己的电脑localhost)
- 开发环境(远程开发,大家连接同一台机器,开发方便)
- 测试环境(测试,单元测试、性能测试、功能测试、系统集成测试,独立的数据库,服务器)
- 预发布环境(体验服,和正式环境一致,正式的数据库,更严谨,可以排查更多问题)
- 生产环境/线上环境(prod,对外公开访问,尽量确保项目“没问题”、不改动)
- 沙箱环境(实验环境)
- …
针对不同环境做不同的事,优势:
- 每个环境互不影响
- 区分不同的阶段(开发/测试/生产)
- 对项目进行优化
a. 日志级别
b. 精简依赖,节省项目体积(如生产环境就可以去掉开发/测试环境所需的一些依赖)
c. 不同的项目环境,根据环境质量,可以调整不同的参数(如jvm)
但是,环境也不是区分的越多越好,毕竟搭建环境是需要资源的!
本地环境
一般使用local
标识,指前端或后端独立开发,自主测试的环境。通常就是我们自己的电脑,将项目所需的依赖、数据库、缓存、队列等服务都搭建到自己的电脑上。
开发环境
一般用dev
标识,指前后端(或多个开发人员)一起协作开发、联调的环境。通常提供一个大家都可访问的开发机器,不用自己搭建环境,提高开发和协作效率。
一般来说,开发和本地环境有一套就OK了,本地环境也可以连接公用的``数据库等资源服务。
测试环境
一般用test
标识,指项目开发完成,做出完整的功能,让测试人员去找bug的环境。通常测试环境需要独立的数据库等服务,且每次修改完bug,都要将项目再次发布到测试环境,重新测试。
预发布环境
一般用pre
标识,和线上环境最接近的环境,一般是测试通过,产品经理体验过后,才能将项目发布到这个环境。实际上,预发布环境和线上环境的后端接口、数据库、服务等都和线上项目一致,唯一的区别就是前端访问的域名不同。因此,预发布环境看到的都是真实的用户数据,可以发现更多测试环境因数据不足查不出的bug。
生产环境
一般用prod
标识,也叫线上环境,提供给所有真实用户访问使用的环境。因此不能随便修改,发布项目也需格外小心。线上的数据库、机器等资源一般也是由专业的运维来负责,想要登录机器、修改配置等等都需经过严格审批。
前端
用了umi框架,yarn build
时会自动传入NODE_ENV === 'production'
参数,start NODE_ENV 参数为 development
- 启动方式:
yarn build
将项目打包,再将其上传到服务器,配合nginx发布即可。本地模拟生产环境可以先使用npm i -g serve
安装serve,再切换到打包后的目录(dist)下,执行serve
命令即可访问
- 项目配置(不同框架有不同的配置文件,umi的配置文件是config,可根据配置文件后缀来区分不同环境,参考umi官网)
- 开发环境:config.dev.ts
- 生产环境:config.prod.ts
- 公共配置:config.ts
后端
Spring Boot项目,通过application.yml添加不同后缀来区分:
- application.yml:公共配置
- application-dev.yml:开发环境
- application-prod.yml:生产环境
# 打包构建,跳过测试
mvn package -DskipTests
# 运行
java -jar ./fuser-center-backend-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod
# 后台运行
nohup java -jar fuser-center-backend-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod &
主要是改:
- 依赖的环境地址:
- 数据库地址
- 缓存地址
- 消息队列地址
- 项目端口
- 服务器配置