从结果来看,这是一个十分简单的小项目,能做的只是通过 UI 创建和维护 Azure Cloud 资源。 但是从过程来看,这是一次标准的渐进式开发,是我最擅长的领域。
并且项目没有开源,有点空口无凭的感觉。 但是因为和几个朋友分享过,朋友们夸我做的不错,于是我决定还是分享出来吧。
TL;DR
- Staging 1: Manual in Azure Portal
- 有熟练使用 Azure Portal 的技术者可以使用,且需要几个小时。
- Staging 2: Command Line instead of Manual
- 会使用 Command Line 的技术者都可以使用,只需要几分钟。
- Staging 3: UI instead of Command Line
- 任何人都可以使用,异步处理,一分钟以内完成。
Staging 1: Manual in Azure Portal
只有熟练使用 Azure Portal 的技术者可以使用,且需要几个小时。
SmartCompany 是一个前后端分离的项目,backend 使用 Javalin 提供 REST API,frontend 使用 React 提供 SPA,然后将两者通过 docker-compose 整合在一起,部署在 Azure。
先说一下,我刚刚加入项目的时候,是怎么创建和维护 Azure Cloud 资源的吧。
我们有一个 README 文件,里面记录了:
- 如何将 docker-compose 发布到 Azure App Service。
- 如何创建 Azure CosmosDB。
- 如何创建 Azure Storage
- 如何创建 DNS。
- 如何将它们整合到一起。
如果你需要创建一个环境,就可以一边看着 README,一边打开 Azure Portal UI 操作了。
Staging 2: Command Line instead of Manual
会使用 Command Line 的技术者都可以使用,只需要几分钟。
因为团队中几乎所有工程师都专注于 Backend 或者 Frontend,我加入了后,DevOps 就由我顺便承担了。 而且我太笨了,我几乎无法通过 README 成功启动一个复杂的项目。(我从大学就发现自己这方面的问题了, Network 课程的实操课全是😭)
由于我的动手能力真的太差了,我一直是 Command Line 的忠实用户。 于是我创建了一个 terraform 文件,大致如:https://gist.github.com/ThaddeusJiang/2473709158c4b3f57455fdd920c31304
从此之后,我创建环境基本上只需要:
$ terraform plan
$ terraform apply
不过,很遗憾这个阶段,还是只有我一个人使用这个项目。 后来我将这个项目交接给其他小伙伴,现在已经有 48 Commits 了。nice 👍
Staging 3: UI instead of Command Line
任何人都可以使用,异步处理,一分钟以内完成。
我们做一个 SaaS 产品,SaaS 产品的标配就是注册即用。由于我们是 ToB SaaS,每个潜在客户都需要有专门的 Sales 和 Support 支持。 为了更好地符合这种业务流程。我们有一个特殊的要求:“那就是 Sales 和 Support 同事可以创建,更新,停用客户的环境(or Account)”。
因为 Sales 和 Support 并不是技术者,让他们使用 Command Line 太过于强人所难了。 所以我创建了一个 Web App,目的是“提供简单易用的 UI 创建和维护环境,不需要使用命令行”。
从技术角度,这个 Web App 有什么?
- Azure Functions: 创建 Serverless App 并提供 REST API。
- Next.js: 创建 SPA 提供 UI。
- GitHub Actions: CICD for API。
- Vercel: CICD for UI,并通过 Vercel Functions 提供 Auth 认证。
- Terraform: 创建 mojito-admin 所需要 Infrastructure。
我会尽快开源代码的,https://github.com/ThaddeusJiang/mojito-admin
最后
DevOps 工作不仅仅是创建 DB 和 App,还包括 monitoring,backup/restore 等等, 本着自动化一切的基本原则,我计划将剩余的 DevOps works 也都整合到 mojito-admin。
由于我个人能力和精力有限,并且项目更需要我做一些 业务梳理和功能设计的工作,我实在是分身乏术。 非常欢迎对我提到的这些工作感兴趣的朋友加入我们团队,关于我们团队的一些信息,请查看我的 Tweets 如果想进一步欢迎邮件联系我。