abhisharmacode-hub/cloud-support-platform-infra

GitHub: abhisharmacode-hub/cloud-support-platform-infra

为运行在 GCP 上的实时客户支持平台提供涵盖部署自动化、安全加固与成本护栏的生产级基础设施方案。

Stars: 0 | Forks: 0

# 云部署与 DevOps 自动化 — 实时支持平台 这是一个生产级**实时客户 支持平台**(包含实时聊天、语音/视频通话、工单系统)的基础设施、部署和自动化展示,运行在 **Google Cloud** 上。 ![架构图](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/83b4d6a4a9161047.png) ## 概述 该平台通过实时聊天、WebRTC 语音/视频和工单系统,以 PWA 的形式为三种角色 —— **客户、客服人员和和管理员** 提供服务。我的重点工作是将其从应用代码转变为一个**安全、全天候在线、自动化部署**的生产系统。 **技术栈:** React · Node.js · MySQL · Socket.io · WebRTC · Nginx · PM2 · Cloudflare · GCP · GitHub Actions ## 为什么采用这种架构(关键决策点) | 决策 | 原因 | | --- | --- | | **GCP Compute Engine VM**(而非 Cloud Run / k8s) | 单台规格适配的 `e2-small` 实例即可同时运行 API、WebSocket server 和 MySQL,成本可预测且**没有冷启动** —— 这对于实时聊天/通话至关重要。Cloud Run 的缩容至零会增加连接延迟;对于单一服务而言,Kubernetes 会在运维上显得过于繁重。 | | **前端部署 Cloudflare,锁定源站** | 在边缘节点提供 TLS/HTTPS、WAF 和 DDoS 防护。VM 防火墙仅接受来自 **Cloudflare IP 范围**的流量,因此源站无法通过 IP 被直接访问 —— 从而消除了一整类攻击方式。 | | **Nginx 反向代理** | 负责 TLS 终止(Cloudflare Origin Cert)、为 Socket.io 提供 WebSocket 升级、处理大附件/录像的上传限制,并**还原真实客户端 IP**(`CF-Connecting-IP`),以便应用层面的 IP 规则和速率限制能够识别真实的访问者。 | | **使用 Identity-Aware Proxy (IAP) 进行 SSH** | **无公共 SSH**。管理员访问通过 Google IAP 隧道进行,因此端口 22 对互联网关闭,且访问权限与 Google 身份 + IAM 绑定。 | | **员工后台的应用级 IP 白名单** | 管理员/客服路由在登录时会受到办公 IP 的限制 —— 无需重新部署即可灵活更改,并记录了用于恢复的应急访问路径。 | | **GitHub Actions + 自托管 runner** | 推送到 `main` 分支会触发**构建门禁**(如果安装/构建失败,会在影响生产环境前报错),随后进行一次带有健康检查的**约 2 分钟零干预部署**。自托管 runner 使管道保持仅出站连接 —— 非常适合受严格限制的防火墙。 | | **Serverless 成本护栏** | 一个由 Cloud Billing **Budget → Pub/Sub → Cloud Function** 组成的切断开关,如果支出失控,会自动禁用沙箱项目的计费,并在生产环境中提供分级预算邮件警报。参见 [`cost-guardrail/`](cost-guardrail/)。 | | **每个用户仅限一个活动会话** | 采用“后登录者胜出”的会话控制策略(轮换 JWT id),确保同一凭证不能同时在两台设备上使用,且不会将真正的所有者拒之门外。 | ## CI/CD pipeline `git push main` → **构建门禁**(针对后端和前端执行 `npm ci` + 构建) → **部署** (`git pull --ff-only` → `deploy.sh`)。部署脚本会备份数据库、安装依赖、 重新构建前端,并在 PM2 下**优雅重载**实现近乎零停机,随后 运行健康检查。 - Workflow: [`ci-cd/deploy.yml`](ci-cd/deploy.yml) - 部署脚本: [`deploy.sh`](deploy.sh) ``` push → ┌─────────────┐ pass ┌──────────────────────────────┐ │ build gate │ ───────▶ │ backup DB → pull → build → │ │ (CI) │ │ pm2 reload → health check │ └─────────────┘ fail ✗ └──────────────────────────────┘ └─ stops here, prod untouched ``` ## 安全加固 - **无公共 SSH** —— 仅能通过 Google IAP 隧道访问。 - **锁定源站至 Cloudflare** —— VM 防火墙拒绝非 Cloudflare 流量。 - 在 Nginx 层**还原真实 IP**,确保白名单/速率限制不会被代理欺骗。 - **IP 白名单**保护的管理员和客服面板(登录时校验、可编辑,并带有应急恢复机制)。 - **单设备会话** + 通用错误信息 + 安全 headers (helmet) + API 速率限制。 ## 成本控制 参见 [`cost-guardrail/`](cost-guardrail/) 了解 serverless 预算切断开关 (Cloud Billing Budget → Pub/Sub → Cloud Run Function → Cloud Billing API)。生产环境 仅使用**警报**;沙箱项目会启用自动切断机制。 ## 仓库结构 ``` cloud-support-platform-infra/ ├── docs/architecture.png # system diagram ├── ci-cd/deploy.yml # GitHub Actions workflow (self-hosted runner) ├── nginx/site.conf # reverse proxy + Cloudflare real-IP + WebSocket ├── deploy.sh # zero-downtime deploy script └── cost-guardrail/ # GCP budget auto-shutoff (Pub/Sub + Cloud Function) ``` *已为作品集展示进行脱敏处理。在将上述任何内容应用于实际的生产基础设施之前,请将所有的 `example.com`、占位符 IP 以及 `*_ID` 替换为真实值。*
标签:GCP, MITM代理, WebRTC, 架构设计, 自定义脚本, 运维