跳转至

部署

主要内容

本篇整理 Docker、Dockerfile、Compose、Vercel、GitHub Actions、CI/CD、域名、DNS、HTTPS、Web 服务器、IaC、Terraform、部署安全和飞书中的 Docker/CI/CD/域名思考题。

参考文档

  • Docker 容器化.md
  • 云基础设施.md
  • 域名、DNS 与 HTTPS 配置.md
  • Linux 服务器管理.md
  • 基础设施即代码IaC.md
  • DevSecOps 操作.md

部署链路

本地开发 -> Git 提交 -> CI 检查 -> 构建 -> 部署 -> DNS -> HTTPS -> 监控

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 是持续交付/部署。基础流程:

push/PR -> install -> lint -> test -> build -> scan -> deploy preview -> deploy production

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 到平台提供的地址。