| 🏗️ 独立开发者 DevOps 实战方案 10+ 产品一步到位 一套架构搞定全部运维 从零搭建生产级 DevOps 平台 · 月费仅 430 元 · 日常运维全 GUI
|
| Docker Swarm · Traefik · Nacos · Prometheus · Grafana · Jaeger · Sentry · Fastlane · Flyway · Portainer · CNB · Uptime Kuma · CDB · COS+CDN · OpenTelemetry |
| 📖 这篇文章能帮你解决什么? 😩 痛点 1:产品越来越多,每次上线手动改 Nginx、SSH 到服务器重启 😩 痛点 2:想用 K8s 但学习成本太高,Compose 又太简陋 😩 痛点 3:10 个产品 × 多环境,配置散落各处,改个参数翻半天 😩 痛点 4:出了问题全靠肉眼看日志,没有监控、没有链路追踪 ✅ 本文方案:基于 Docker Swarm + Traefik + Nacos 的完整 DevOps 平台,430 元/月跑 10+ 产品,日常运维全 GUI。 |
▎ 一、核心选型:为什么是 Swarm + Traefik + Nacos?
选型核心原则:够用、省心、可扩展。不追新技术,不过度设计。
🐳 1.1 容器编排:Docker Swarm 胜出
| 方案 | 学习成本 | 运维成本 | 10+ 产品 | 结论 |
|---|---|---|---|---|
| Docker Compose | 低 | 低 | ❌ 无滚动更新 | 淘汰 |
| Docker Swarm ⭐ | 中低 | 低 | ✅ 完全够 | ✅ 选这个 |
| Kubernetes | 高 | 中高 | ✅ 但用不上 | 过度设计 |
| 💡 Swarm 核心优势:和 Compose 命令兼容,切 Swarm 只换部署命令。但给你零停机滚动更新、容器崩溃自动恢复、一条命令加节点、Portainer 原生支持。 |
🌐 1.2 入口代理:Traefik 碾压 Nginx
10+ 产品 × 2 环境 = 20+ 域名路由。Nginx 手写配置,每加一个产品改 nginx.conf 然后 reload。Traefik 自动发现 Docker 服务,加容器自动配路由和 HTTPS。
| 能力 | Nginx | Traefik |
|---|---|---|
| 新增产品 | 手写配置 + reload | ✅ 自动,加 label 即可 |
| HTTPS 证书 | 手动 certbot | ✅ 自动 Let's Encrypt |
| Docker 服务发现 | ❌ 不支持 | ✅ 原生支持 |
| 10+ 产品维护 | 配置又臭又长 | ✅ label 散落管理 |
| ⚠️ 结论:必须现在上 Traefik。Nginx 管 20 个域名是给自己找麻烦。 |
🧩 1.3 全栈组件选型总览
| 组件 | 选型 | 核心理由 |
|---|---|---|
| 代码+CI/CD | CNB | 国内快、免费额度大 |
| 容器编排 | Docker Swarm | 滚动更新+自动恢复+多节点 |
| 入口代理 | Traefik | 自动 HTTPS+Docker 服务发现 |
| 配置中心 | Nacos | Web 统一管理+实时生效 |
| 监控告警 | Prometheus+Grafana | 开源标准,社区 Dashboard 现成 |
| 链路追踪 | Jaeger+OpenTelemetry | Java Agent 零代码接入 |
| 可用性监控 | Uptime Kuma | 轻量,HTTP/SSL/DNS 全覆盖 |
| 数据库迁移 | Flyway | 代码和 schema 版本绑定 |
| 崩溃监控 | Sentry | SaaS 免费版,零搭建 |
| 移动端 CI/CD | Fastlane | 统一管理签名+证书+上传 |
▎ 二、架构全图:一眼看懂整个平台
从 Mac 开发环境到腾讯云 CVM,从代码提交到生产部署:
| 🖥️ 开发环境 · YOUR MAC IDE 写代码 → Docker Desktop 本地调试 → git push | ||
| ⬇ git push | ||
| 🚀 CI/CD · CNB (cnb.cool) 10+ 产品仓库 → Docker 构建 → 推 TCR(版本标签) | ||
| ⬇ 内网推送镜像 | ||
| ☁️ 腾讯云 CVM · 4C8G · Docker Swarm 集群 | ||
| 🔀 TRAEFIK · 唯一入口 · 80/443 自动 HTTPS · 自动路由 · 自动服务发现 | ||
| ⬇ 自动分发流量 | ||
| 📦 PRODUCT-A backend:8080 | 📦 PRODUCT-B backend:8080 | 📦 PRODUCT-N backend:8080 |
| Swarm Secret 注入 · 滚动更新零停机 · 容器崩溃自动重启 · 失败自动回滚 | ||
| 🛠️ 平台服务层 Portainer 图形管理 Prometheus 监控 Grafana 告警 Nacos 配置 Jaeger 追踪 Uptime Kuma 可用性 Redis 缓存 | ||
| 🔗 腾讯云托管:CDB · COS · CDN · CLS · TCR | ||
▎ 三、新增产品:全程 GUI,不进服务器
新增一个产品,全程鼠标操作,不敲一行命令。
| 步骤 | 操作 | 怎么做 |
|---|---|---|
| 1 | Portainer 部署 | Portainer → App Templates → 选模板 → 填域名 → Deploy |
| 2 | DNS 配置 | DNSPod → 添加 A 记录 → CVM 公网 IP |
| 3 | 创建数据库 | CDB Web → CREATE DATABASE product_b |
| 4 | Nacos 配置 | Nacos Web → 创建命名空间 → 添加配置文件 |
| ✅ | 完成! | Traefik 自动 HTTPS + 自动路由。全程鼠标,不进 CVM。 |
▎ 四、Docker Stack 编排:一次部署,全部起来
📦 基础设施一键部署
一条命令,Traefik + Portainer + Prometheus + Grafana + Nacos + Jaeger + Uptime Kuma + Redis 全部起来:
| # 一条命令部署全部基础设施 docker stack deploy -c /app/stacks/infra.yml infra # 确认所有服务 running docker service ls # infra_traefik 1/1 traefik:v3.1 # infra_portainer 1/1 portainer/portainer-ce:lts # infra_prometheus 1/1 prom/prometheus:v2.53 # infra_grafana 1/1 grafana/grafana:11.1 # infra_nacos 1/1 nacos/nacos-server:v2.3.2 # infra_jaeger 1/1 jaegertracing/all-in-one:1.58 # infra_redis 1/1 redis:7-alpine |
🔧 产品 Stack 模板(Portainer 一次创建,永久复用)
在 Portainer 创建模板后,新增产品填表单 → 点部署,不写 yml。
| # 模板变量用 {{}} 包裹 services: {{product}}-test: image: ccr.ccs.tencentyun.com/ns/{{product}}:latest deploy: update_config: order: start-first # 先起新再停旧 failure_action: rollback # 失败自动回滚 |
▎ 五、监控体系:新产品零配置自动监控
| 🔥 核心亮点:Prometheus 自动发现 Swarm service,新产品自动接入监控,不改配置文件。 |
| # prometheus.yml · Docker Swarm 自动发现 - job_name: 'spring-boot-apps' metrics_path: '/actuator/prometheus' dockerswarm_sd_configs: - host: unix:///var/run/docker.sock role: services |
| Dashboard | 模板 ID | 用途 |
|---|---|---|
| Node Exporter Full | 1860 | 服务器全面监控 |
| Docker Container | 14282 | 容器监控 |
| Traefik 2 | 17347 | 入口流量监控 |
▎ 六、链路追踪:零代码接入 OpenTelemetry
Spring Boot 不需要改一行 Java 代码,Dockerfile 加一个 Java Agent:
| FROM openjdk:17-slim ADD .../opentelemetry-javaagent.jar /app/ ENTRYPOINT ["java", "-javaagent:/app/opentelemetry-javaagent.jar", "-Dotel.exporter.otlp.endpoint=http://jaeger:4317", "-Dotel.service.name=product-a-backend", "-jar", "/app/app.jar"] |
| 🔍 零代码改造效果: • 每个 HTTP 请求自动生成 Span(含 traceId) • 数据库查询自动记录 Span(含 SQL) • Redis 操作自动记录 Span • 跨服务调用自动透传 traceId |
Jaeger 调用链示例:
| Traefik (50ms) └─ product-a-backend (48ms) ├─ MySQL SELECT (12ms) │ └─ SELECT * FROM orders WHERE user_id = ? ├─ Redis GET (2ms) │ └─ Key: cache:user:12345 └─ 支付宝 API (30ms) └─ POST https://openapi.alipay.com/... |
▎ 七、数据库迁移:Flyway 安全分级
| 分类 | 文件名前缀 | 操作类型 | CI 行为 |
|---|---|---|---|
| 安全迁移 ✅ | *__safe_* | ADD COLUMN、CREATE TABLE | 自动执行 |
| 危险迁移 ⚠️ | *__danger_* | DROP COLUMN、MODIFY COLUMN | CI 阻断 |
| 💡 核心原则:只增不改,生产环境不执行破坏性变更。删字段留到大版本配合停机窗口。 |
▎ 八、一键回滚:三种方式,全部图形化
| 🖥️ 方式一 Portainer Web 选服务 → 改版本标签 零停机回滚 | 🤖 方式二 Swarm 自动 健康检查失败 自动回滚 | ⌨️ 方式三 命令行 docker service rollback product-a_product-a-backend |
📋 回滚完整检查清单(10 项)
| # | 检查项 | 工具 |
|---|---|---|
| 1 | 后端镜像回滚 | Portainer |
| 2 | 配置回滚 | Nacos 历史版本 |
| 3 | 数据库兼容性 | Flyway |
| 4 | 前端资源回滚 | COS 版本控制 |
| 5 | APK version.json | COS 控制台 |
| 6 | Feature Flag 关闭 | Nacos |
| 7 | 定时任务兼容 | 代码审查 |
| 8 | 第三方回调协议 | API 文档 |
| 9 | 验证回滚 | Grafana+Uptime |
| 10 | 记录回滚原因 | 发布记录表 |
▎ 九、GUI vs CLI:日常运维不进命令行
| 🎯 设计原则:搭建时 CLI 一次性配置,日常运维全走 GUI,非平台级故障不进命令行。 |
| 操作 | 怎么搞 | 方式 |
|---|---|---|
| 发布新版本 | git tag → CNB 自动构建 → Swarm 零停机更新 | 自动 |
| 回滚 | Portainer → Services → 改版本标签 | GUI |
| 加新产品 | Portainer → App Templates → 填表单 | GUI |
| 改配置 | Nacos → 改配置 → 实时生效 | GUI |
| 看崩溃 | Sentry → Issues | GUI |
| 看日志 | CLS → 搜索 → SQL 分析 | GUI |
| 加节点 | docker swarm join --token xxx | CLI |
▎ 十、月成本:430 元跑 10+ 产品
| 项目 | 月费 |
|---|---|
| 腾讯云 CVM 4C8G | 250 元 |
| CDB 云数据库(基础版 1C1G) | 60 元 |
| COS + CDN | 50 元 |
| CLS 日志 | 30 元 |
| CNB(免费版 160 核时/月) | 0 元 |
| TCR 容器镜像(个人版免费) | 0 元 |
| Traefik/Portainer/Prometheus/Grafana/Nacos/Jaeger/Uptime Kuma | 0 元 |
| Sentry SaaS(免费版) | 0 元 |
| 域名 × 10+ | ≈ 40 元 |
| 合计 | ≈ 430 元/月 |
▎ 十一、设计原则:防止系统无限膨胀
| 🚫 不引入新组件 10 个平台容器已是上限 | ⚙️ Nacos 只做配置 Swarm 接管服务发现 | 📋 配置 Git 管理 变更可追溯可回滚 |
| 🖱️ 能 GUI 不进 CLI 日常运维全 Web | 🔄 能做一次不做两次 模板+自动发现 | 📐 预留不提前买单 架构预留不过度 |
▎ 十二、能力清单:30+ 能力全覆盖
| ✅ 已覆盖能力清单 ✅ 代码托管+CI/CD(CNB) ✅ 容器编排+滚动更新(Swarm) ✅ 零停机发版 ✅ 自动/手动回滚 ✅ 自动 HTTPS+路由(Traefik) ✅ 服务自动发现 ✅ Secret 管理(Swarm Secrets) ✅ 统一配置中心(Nacos) ✅ 指标监控+告警(Prometheus+Grafana) ✅ 容器指标自动发现 ✅ 可用性监控(Uptime Kuma) ✅ 崩溃监控(Sentry) ✅ 日志聚合(CLS) ✅ 链路追踪(Jaeger+OpenTelemetry) ✅ 结构化日志 ✅ 数据库迁移安全分级(Flyway) ✅ 数据库备份+跨地域容灾(CDB) ✅ 移动端 CI/CD(Fastlane) ✅ APK/IPA 版本治理(COS+version.json) ✅ 前端静态部署+CDN ✅ 多 CVM 扩展预留 ✅ 环境隔离后期拆分 ✅ 配置 Git 管理 ✅ 灾难恢复脚本 ✅ 完整回滚检查清单 ✅ 发布记录 ✅ 备份演练制度 ✅ 资源容量规划 ✅ 安全基线 |
▎ 十三、关键决策速查表
| 决策点 | 选了 | 没选 | 理由 |
|---|---|---|---|
| 容器编排 | Swarm | K8s | 不需要 K8s 的复杂度 |
| 入口代理 | Traefik | Nginx | 20+ 域名手动改配置不可持续 |
| 配置中心 | Nacos | .env | Web 统一管理+Feature Flag |
| 链路追踪 | Jaeger | — | Java Agent 零代码接入 |
| 数据库 | CDB | 自建 | 自带备份+主从+回档 |
| 扩展方式 | Swarm 多节点 | — | 一行 join 命令 |
▎ 十四、风险边界:诚实面对方案的局限
| V1 定位:单机低成本生产级运维方案 目标是可维护、可恢复,不承诺全链路高可用。适合独立开发者维护 3~15 个产品。 |
| 风险点 | 当前方案 | 边界说明 |
|---|---|---|
| Docker socket 暴露 | IP 白名单折中 | 长期建议 VPN 或零信任 |
| Redis 单实例 | AOF 持久化 | 只做可重建数据,关键落 CDB |
| Nacos standalone | 单容器运行 | 挂了不影响已运行应用 |
| 备份一致性 | tar 打包 Volume | 关键配置已通过 Git 管理 |
| 🎯 一句话总结 Docker Swarm + Traefik + Nacos + Prometheus + Grafana + Jaeger + Uptime Kuma + Flyway + Fastlane + Sentry 430 元/月 · 10+ 产品 · 30+ 能力 · 日常运维全 GUI 现在搭建好,未来只做加法,不做重来。 |
| 如果这篇文章对你有帮助 ⭐ ❤️ 💬 点赞 · 收藏 · 评论 |
2189

被折叠的 条评论
为什么被折叠?



