部署¶
主要内容
本篇整理 Docker、Dockerfile、Compose、Vercel、GitHub Actions、CI/CD、域名、DNS、HTTPS、Web 服务器、IaC、Terraform、部署安全和飞书中的 Docker/CI/CD/域名思考题。
参考文档¶
Docker 容器化.md云基础设施.md域名、DNS 与 HTTPS 配置.mdLinux 服务器管理.md基础设施即代码IaC.mdDevSecOps 操作.md
部署链路¶
Docker¶
Docker 把应用和依赖打包成镜像,再以容器运行。它解决环境不一致问题。
核心概念:Image、Container、Dockerfile、Compose、Volume、Network。
Dockerfile 示例:
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
CMD ["npm", "start"]
Compose¶
Compose 编排多个服务,例如前端、后端、数据库、Redis。
services:
app:
build: .
ports:
- "3000:3000"
db:
image: postgres:16
volumes:
- db_data:/var/lib/postgresql/data
volumes:
db_data:
CI/CD¶
CI 是持续集成,CD 是持续交付/部署。基础流程:
GitHub Actions 用 workflow yml 描述。要注意 secret、token 权限和第三方 action 安全。
Vercel¶
Vercel 适合前端和 Next.js 部署:自动构建、预览环境、生产发布、HTTPS。它降低了初学者维护服务器的成本。
域名与 DNS¶
常见记录:
- A:域名到 IPv4。
- AAAA:域名到 IPv6。
- CNAME:域名到另一个域名。
- TXT:验证用途。
HTTPS 和 Web 服务器¶
Nginx/Caddy 常用于反向代理、证书、静态资源和路由。HTTPS 提供加密、防篡改和身份验证。
IaC¶
IaC 把基础设施写成代码。Terraform 可以通过 Provider 管理云平台资源。优点是可复现、可审查、可版本控制。
安全¶
不要把 .env、API key、secret 上传。CI 中要最小权限。镜像要扫描漏洞。容器不要无脑 root。部署日志不要打印 secret。
飞书思考题¶
Docker 提供隔离性,但开发者还需要关注哪些问题?¶
需要关注镜像体积、构建速度、容器权限、端口暴露、数据卷持久化、环境变量、secret、资源限制、日志、镜像漏洞和网络配置。隔离不是免维护。
项目提供 Dockerfile 和 docker-compose.yml 对新成员意味着什么?¶
意味着环境被代码化。新成员不需要手动安装一堆依赖,只要按统一命令启动,就能获得接近团队一致的开发环境。对项目维护来说,它减少口口相传的配置步骤,也方便 CI/CD 复用。
基础 CI/CD 至少包含哪些步骤?¶
至少包含依赖安装、格式/静态检查、测试、构建和部署条件。更完整的流程还应包括安全扫描、预览部署、分支保护、人工审批和生产部署。
最小可行上线流程中 Git、Vercel、GitHub Actions 分别起什么作用?¶
Git 管理代码版本;GitHub Actions 在提交后自动检查、测试和构建;Vercel 负责前端构建、托管、预览和生产发布。域名和 HTTPS 让服务能以可信地址对外访问。
知识卡片¶
镜像与容器¶
镜像是模板,容器是运行实例。同一个镜像可以启动多个容器。
Volume¶
容器删除后内部文件通常会消失。数据库等持久数据必须挂 volume。
Preview Deploy¶
预览部署让每个 PR 都有一个可访问环境,适合前端 UI、接口联调和产品验收。
CNAME¶
CNAME 把一个域名指向另一个域名。很多托管平台会要求配置 CNAME 到平台提供的地址。