一、开发环境
在系统开发的经典模型,一般会分成 2 类 5 种环境:
- 【线下】本地环境(local)、开发环境(dev)、测试环境(test)
- 【线上】预发布环境(stage)、生产环境(prod)

- 每个环境、每个项目使用独立的二级域名
- 线下、线上各一套 MySQL 数据库,多个环境共享使用
- 每个环境对应一个配置文件,后端使用 application-{env}.yaml文件,前端使用 .env.{env}文件
友情提示:项目中暂时没有 test、stage、production 等环境的配置,需要自己创建。
另外,本文的 MySQL 数据库是基础设施的“泛指”,包括 Redis 缓存、MQ 消息队列,都需要线上线下独立。
1. 本地环境
后端工程师使用 application-local.yaml 配置文件,在本地电脑启动后端服务,连接线下 MySQL 数据库。考虑到不影响 dev、test 环境,会配置禁用定时任务、MQ 集群消费的执行。
前端工程师也会在本地电脑启动前端服务,一般不使用 .env.local 配置文件,而是使用 .env.dev 配置文件,访问 dev 环境的后端服务。如果需要和后端进行本地联调,可以使用 .env.local 配置文件。
2. 开发环境
dev 环境的用户是前端工程师、后端工程师,主要用于前后端的联调、又或者功能开发完后的自测。
一些公司可能不提供 dev 环境,直接使用 test 环境,适合团队规模较小的团队,可以降低服务器的成本。
不过,测试工程师可能比较反感 dev 和 test 环境不隔离,因为他们是按照测试用例,一轮一轮的进行验收。这个时候,如果前端或者后端工程师部署了 test 环境,“破坏”了他当前轮次的验收。
疑问:开发环境可以使用独立的 MySQL 数据库吗?
当然是可以的,提供更好的环境隔离性,避免开发阶段产生过多的脏数据,影响 test 环境的验收。
不过呢,这也带来额外的成本,部署程序到 test 环境时,需要做一次数据库的同步。
3. 测试环境
test 环境的用户是产品经理、测试工程师,主要用于他们的功能验收。
考虑到 test 环境的稳定性,一般建议由测试工程师使用 Jenkins 等工具,完成该环境的部署。具体的原因,上面 dev 环境已经解释了。
疑问:如果需要并行验收多个功能,怎么办?
并行验收多个功能时候,对应不同的 Git 分支,需要搭建多套测试环境。
4. 预发布环境
stage 环境的用户是产品经理、测试工程师,连接线上 MySQL 数据库,基于真实的数据,进行功能的全回归测试。
因为数据更加真实,且更具多样性,所以往往也会测试出较多的 Bug。比较好的解决方案,是将线上数据库定期脱敏,导入线下数据库。
考虑到 stage 环境的安全性,一般由技术经理、运维工程师进行部署。
一些公司可能不提供 stage 环境,直接上线到 production 环境,风险非常高,容易产生较多报错。
5. 生产环境
production 环境的用户是真实用户,即线上环境。一般发布上线时,会进行核心功能的快速测试,避免主流程存在问题。
考虑到 production 环境的问题排查效率,会给技术核心开放 MySQL 数据库的读权限。
二、HTTPS 证书
本小节,讲解如何在 Nginx 配置 SSL 证书,实现前端和后端使用 HTTPS 安全访问的功能。
考虑到各大云服务厂商的文档写的比较齐全,这里更多做汇总与整理。
😜 如果想要免费的 SSL 证书,请申请 DV 单域名证书。如果要配置多个域名,可以申请多个 DV 单域名证书。
1. 阿里云 SSL【最常用】
2. FreeSSL【最便宜】
FreeSSL.cn,一个提供免费 HTTPS 证书申请的网站。
《如何在 Nginx/Apache/Tomcat/IIS 自动部署证书?》
疑问:有没其它类似的平台?
OHTTPS:免费提供 HTTPS 证书,支持一键申请、自动更新、自动部署的功能。
3. 腾讯云 SSL
第一步,免费 SSL 证书申请流程
- 第二步,Nginx 服务器 SSL 证书安装部署
4. 华为云 SSL
- 第一步,SSL 证书申购流程
第二步,下载与安装 SSL 证书
三、服务监控
系统使用 Spring Boot Admin 和 SkyWalking 实现后端服务的监控。
1. Spring Boot Admin
注意,Spring Boot Admin 是内嵌在 yudao-server 后端项目中,无需单独启动。
1.1 配置
在 application-local.yaml配置文件中,通过 spring.boot.admin 配置项,设置 Spring Boot Admin 的配置。如下图所示:

疑问:prod 生产环境下,后端部署多个 JVM 进程时,spring.boot.admin.client.url 填写哪个 IP?第一步,在 Nginx 中配置 /admin 路径,转发到多个 JVM 的 IP 上,使用 backup参数实现主备。注意,该转发只允许内网访问,避免安全问题!!!
- 第二步,设置 spring.boot.admin.client.url 配置项,为 Nginx 的 内置 IP/admin 地址。
1.2 使用
① 访问 http://127.0.0.1:48080/地址,可以在 Spring Boot Admin 中,查看到应用与实例的列表。如下图所示:
友情提示:也可以通过前端的 [基础设施 -> Java 监控] 菜单。
② 点击ykkj-server 应用,再点击实例,可以查看到该实例的细节信息。如下图所示:
③ 点击 [日志 -> 日志文件] 菜单,查看该示例的日志内容。如下图所示:
点击 [日志 -> 日志文件] 菜单,可动态修改 Logger 的日志级别,方便排查线上的某些 BUG。如下图所示:
2. SkyWalking
注意,SkyWalking 需要单独启动,预计需要 4 核 8G 的硬件资源。2.1 配置
① 在 logback-spring.xml配置文件中,添加 SkyWalking 收集日志的 appender 配置。如下图所示:
② 修改 SkyWalking 在前端项目的 [基础设施 -> 监控平台] 对应的 skywaling/index.vue文件,调整为你 SkyWalking 的访问地址。如下图所示:


