云服务基础小册
要想将开发的软件项目转化为可以为大众提供服务的产品,就需要将项目部署到云服务的平台上。不同的软件项目,由于开发语言、项目类型等的不同,所需要使用到的云服务也会有所不同,本小册会通过一些实操性非常强的案例来穿针引线这些云服务。
小册说明
关于云服务,网上的教程有很多,但是这些教程都只是做云服务的产品、服务(比如CDN、云服务器等)做理论或概念上的枯燥讲解,这种教学方式和传统教学里的“PPT教学”、“黑板教学”没有什么不同,由于云服务所涉及的内容过多,这会让你陷入到囫囵吞枣的死记硬背中。
事实上如果你没有实际使用过CDN、云服务器,只看天花乱坠的讲解,你是很难真正理解它们的实际用途的。而且云服务是当前程序员发布产品必须掌握的基础技能,在企业生产实践中更需要的是你能够根据软件的实际需要,将云服务真正用起来。
HackWork致力于教更多用户开发企业真实场景下的全栈应用,那掌握云服务的开发部署方式以及相应的产品服务也是非常有必要的,在学习之前需要了解以下注意事项:
- 本小册会一步步引导你如何使用这些云服务,因此会要求你实际注册并购买一些常用的云服务产品,庆幸的是它们大多数都是免费的,但有些产品花 钱仍是难免的,比如域名。即便最终需要你花钱,本教程会指出不同方案的性价比,而这些费用也是由平台扣除,与本教程无关;
- 即便你没有扎实的编程基础,你也能按照本教程真实上线好几个项目,无需担心自己不懂代码,也就是说本教程会提供完整的项目源代码(都是开源的),你只需要按照步骤操作就可以了,当然学习一下《计算机基础知识》以及掌握一门全栈开发会更好;
部署软件的解决方案
将网站部署到云服务的解决方案主要可以分为几种类型,每种都有其优势和特定的使用场景。以下是一些常见的云部署解决方案:
1. 静态网站托管服务
静态托管通常用于托管 HTML、CSS、JavaScript 等前端资源的网站,内容是固定的,用户访问时直接由服务器返回。适合博客、静态网站和文档等。常用服务包括 GitHub Pages 和 Netlify,提供简便的部署流程。
2. 传统虚拟机部署
通常采用的是Linux云服务器,直接在云服务提供商的虚拟机(如AWS的EC2, Azure的虚拟机, 腾讯云的CVM)上 部署应用程序。这种方式提供了最大的灵活性和控制权,适合需要完全控制操作系统和软件栈的场景。它适合对运行环境有高度定制化需求的应用,但需要手动管理服务器的安全、扩展和维护工作。
3. Serverless云函数
允许开发者编写和部署代码函数,而不用管理服务器。代码只有在被调用时才会执行,按执行时间付费。适用于处理事件驱动的任务,如 API、文件处理和消息响应,帮助节省资源成本。这个既有AWS Lambda、Google Functions等云函数,也有Cloudflare、vercel提供的Edge Functions。
4、BaaS
BaaS 提供即用即取的后端功能,如数据库、身份验证、文件存储等。开发者无需自己构建和管理后端,直接调用云服务提供的 API。例如 Firebase、AWS Amplify、腾讯云云开发。BaaS 更适合快速开发应用原型或 MVP(最小可行产品)。
5. 容器化部署:
容器化部署将应用程序及其依赖打包到一个独立的容器中,确保一致性和可移植性。通过 Docker 容器来运行和管理应用。容器化适合微服务架构和需要在多个环境中运行的应用,具有良好的扩展性和灵活性。
6. 托管容器与PaaS
把已经构建的镜像交给 PaaS、Cloud Run、ECS Fargate 等平台,平台负责主机和调度,团队仍管理镜像、网络、身份、数据库和监控。它适合需要自定义后端运行时、但不希望维护虚拟机的项目。
7. Kubernetes平台
Kubernetes适合多服务、多团队需要统一发布、扩缩容、策略和自助平台的阶段。它的控制能力最强,同时运维与固定成本也最高。小项目不应因为流行而直接采用。
十个部分的学习地图
第1部分:静态网站托管
从 Docusaurus 构建产物开始,完成对象存储+CDN、域名DNS、Vercel、JAMStack和GitHub Actions。贯穿项目是个人技术手册。学完能独立发布一个HTTPS静态网站并回滚。
第2部分:云服务器部署
购买/连接Linux服务器,部署环境,使用Nginx返回静态文件和反向代理API,通过systemd守护进程、Certbot配置HTTPS,并在单机安全部署多个应用。
第3部分:Cloudflare云服务
用Pages发布站点,Pages Functions/Workers提供边缘API,D1保存关系数据,R2保存附件,Zero Trust Access/Tunnel保护后台。这是一条边缘全栈路线。
第4部分:Serverless云函数
从Lambda手工调用进入内存、超时、IAM、版本别名、CloudWatch,再由S3事件触发文件处理,以API Gateway提供HTTP接口,最后用SAM把基础设施自动化。
第5部分:Docker基础
理解镜像、容器、网络、卷、命令行、编程语言项目、多容器与现代应用方法论。这一部分原有内容较完整,是后续容器部署的基础。
第6部分:容器化全栈部署
构建非root多阶段镜像,推送ECR,用Compose部署前端、API、worker和PostgreSQL;完成健康检查、联调、迁移、备份、表单幂等、outbox和对象附件。
第7部分:统计、日志与通知
把应用变成可运营产品:结构化日志、隐私友好的产品统计、SLI/SLO监控告警、SNS/SES通知、SQS队列/定时任务,以及支付订单、回调验签、订阅和对账。
第8部分:BaaS全栈云服务
使用Amplify/Cognito/Data/Storage/Function/SES,在不自建服务器的情况下完成注册、授权数据、私人附件、邮件和分支部署,并实做数据导出与供应商退出。
第9部分:托管容器与Kubernetes
先比较PaaS、Serverless容器、Fargate和Kubernetes,再部署ECS Fargate;随后用kind学习Deployment/Service/Ingress/Secret/PVC/HPA,并讲清生产采用Kubernetes的门槛。
第10部分:生产安全与成本治理
汇总账号/IAM、网络/WAF、软件供应链、备份灾备、FinOps,并以活动报名与支付系统作为毕业项目,做架构决策、上线验收、Game Day和成本复盘。
推荐学习顺序
初学者按1→2→5→6学习,先理解文件、服务器和容器;再从3/4/8中选择边缘、Serverless或BaaS路线;第7和第10是任何生产方案都需要的运营与治理;第9应在掌握容器和网络后学习。
如果目标只是上线文档站,完成第1部分即可;想发布Node/Python后端,学习第2、5、6;希望少运维快速做MVP,学习第3或第8;事件处理/API突发流量学习第4;团队要管理大量容器服务再学习第9。