1.
概述与目标
目标:在美欧两地VPS上实现可复现、低延迟的前端构建与部署流程。
小分段:a) 保证构建一致性 b) 最小化上线窗口 c) 快速回滚
2.
仓库与分支策略
步骤:1) 采用 monorepo 或按服务拆分;2) 分支:main/release、develop、feature/*、hotfix/*;3) PR 模板强制 lint/test。
示例命令:git flow 或约定式提交(conventional commits)便于自动化生成版本。
3.
环境与配置管理
步骤:1) 各环境使用不同 env 文件 (.env.prod.eu, .env.prod.us);2) 构建时注入 REGION 环境变量;3) 使用 config map 或静态 JSON 做运行时可切换配置。
建议:避免把敏感信息写入 repo。
4.
VPS 基础准备(US/EU)
步骤:1) 系统:Ubuntu 22.04;2) 安装 Docker、docker-compose、nginx;3) 创建 deploy 用户、上传公钥(ssh-copy-id user@vps);4) 配置防火墙(ufw allow 22,80,443)。
命令示例:ssh-copy-id -i ~/.ssh/id_rsa.pub deploy@vps-us.example
5.
CI 设计(以 GitHub Actions 为例)
步骤:1) 流水线阶段:checkout → cache(node_modules) → lint → test → build → artifact publish → deploy;2) 并行化测试(matrix)覆盖不同 locale;3) 使用 actions/cache 提速。
YAML 关键点:on: [push,pull_request];jobs.build.steps 包含 uses: actions/setup-node 和 npm ci、npm run build。
6.
构建产物与制品仓库
步骤:1) 将构建产物打包为 tar.gz 或 docker image;2) 推送至私有 registry(Docker Hub/Harbor)或 artifact 存储(S3/MinIO);3) 在部署阶段从 registry 拉取。
命令示例:docker build -t registry.example/app:sha-${{ github.sha }} . && docker push ...
7.
部署策略:蓝绿与金丝雀
步骤:1) 蓝绿:准备 v2,在 Nginx 上切流量;2) 金丝雀:先 5% 流量到新版本,监控指标后逐步放量;3) 快速回滚:保留上一个 image/tag 并在 1 分钟内切回。
工具:使用 nginx upstream 和权重,或 Traefik、HAProxy。
8.
跨区差异化部署与 DNS
步骤:1) 为 US/EU 各自配置 env 与构建参数;2) 使用 GeoDNS(如 Cloudflare Load Balancing)按用户地理就近路由;3) CDN(Cloudflare/Fastly)做静态缓存并设置分区级缓存策略。
提示:部署后在各区刷新 CDN 缓存(API 调用)。
9.
凭证与密钥管理
步骤:1) CI 使用 Secrets(GitHub Secrets、GitLab CI Variables)存储 registry 凭证和 SSH 私钥;2) VPS 上使用 deploy key 做拉取或通过 CI 执行 ssh deploy;3) 高敏感信息建议使用 HashiCorp Vault/KMS。
安全注意:定期 rotate keys 并限制 key 权限。
10.
健康检查、监控与日志
步骤:1) 部署健康端点 /healthz,CI 部署后等待 200 返回;2) 集成 Prometheus + Grafana 监控响应时间与错误率;3) 日志集中:Filebeat → ELK 或 Loki。
回滚触发:错误率超过阈值自动触发 pipeline 回滚。
11.
自动化与基础设施即代码
步骤:1) 使用 Terraform 管理 VPS、DNS、负载均衡配置;2) 使用 Ansible 部署运行时配置与 docker-compose 文件;3) 将部署脚本放入 repo,CI 执行 ansible-playbook -i hosts deploy.yml。
示例:terraform apply 后 CI 调用 ansible 部署。
12.
问答1
问:如何在美国和欧洲保持构建产物一致性? 答:使用相同的 build 容器镜像(在 CI 中固定 node/npm 版本),把构建过程打包为 Dockerfile,在 CI 里构建并推送镜像,两区直接拉取同一镜像,保证一致性。
13.
问答2
问:在两地部署如何应对时差和紧急回滚? 答:设定“跨区维护窗口”与自动化回滚:CI 中配置监控告警(如 SLO 超限触发 webhook),自动触发回滚 job;同时用轮班值班与透明发布日志减少时差影响。
14.
问答3
问:常见故障排查步骤是什么? 答:第一步查看 CI 日志与构建 artifact;第二步在对应 VPS 用 docker ps / docker logs 检查容器;第三步验证健康检查和 CDN 缓存;必要时回滚到上一个稳定 tag 并分析变更点。
来源:大前端团队协作案例美国和欧洲vps大前端环境下的CI/CD设计