NAVIGATION SYS
首页折腾手记造点东西投资笔记做点音乐想点事情

NCC-1701-D // SYSTEM ONLINE

Deep Space Viewport
造点东西

AI开发配置系统(一):告别手动Lucky配置:我为什么要自己造一个ConfigBridge

舸扬
造点东西
发布: 2025-11-09
更新: 2026-01-23
标签configbridge系列配置管理
AI开发配置系统(一):告别手动Lucky配置:我为什么要自己造一个ConfigBridge
本文字数:3135预计阅读:8 分钟

我是舸扬。记录 AI 探索日记与生活思考。在速成时代,坚持每篇文章都是一次深潜。行者开路,不随前尘。

当你有 10 个 Web 服务分布在 3 台服务器上,每个服务都需要 4 份不同的配置文件时,你还能忍受手动复制粘贴吗?这篇文章介绍我开发的项目 ConfigBridge——一个专治"多服务 × 多服务器"配置噩梦的管理系统。

TL;DR(太长不看版)

  • 我的烦恼:十几个自建服务,分布在多台服务器上,每新增一个服务就要手动写 4 份配置文件
  • 痛点一句话:配置文件太多、太分散、改一次要登录好几台机器
  • 我造了个工具:ConfigBridge——只需填写「服务名 + 子域名 + 端口」,一键生成所有配置
  • 效果:从 30 分钟重复劳动 → 3 秒钟一键搞定

我是谁,我在折腾什么

我是舸扬,一个 Homelab 玩家,我的"实验室"里跑着十几个自建服务:博客、笔记系统、密码管理器、RSS 阅读器、监控面板、媒体中心、个人网盘……

但我的服务器环境有点特殊:主力机只有 IPv6 公网地址

在 2026 年,虽然 IPv6 普及率持续提升,但仍有大量用户的网络环境只支持 IPv4。还有的商业服务器(不想点名)开通 ipv6 的流量还要付额外费用,虽然不太贵,但是吃相实在不太好看。这意味着,如果我只部署在 IPv6 服务器上,相当一部分用户根本无法访问

我的解决方案是经典的 FRP 穿透(FRP 是一种内网穿透工具,可以理解为「网络传话人」——当用户无法直接访问你的服务器时,FRP 帮你中转请求):

  • 服务器 A(IPv6 公网):服务实际运行的地方
  • 服务器 B(IPv4 公网):FRP 中转站,专门帮 IPv4 用户「传话」

用户访问时:

  • 支持 IPv6 → DNS 解析到 A → 直连(延迟最低)
  • 不支持 IPv6 → DNS 解析到 B → FRP 帮忙转发到 A → 照样能访问

理论完美,但实际操作时,我陷入了配置地狱。

老朋友 Lucky:好用,但不够用

在开始自己造轮子之前,我用的是 Lucky——一款国产的反向代理工具。

Lucky UI

/// Lucky UI ///

Lucky 的优点

  • 上手快:图形界面,点点鼠标就能配置
  • 功能全:反向代理、HTTPS 证书、DDNS(动态域名解析,让域名自动跟着 IP 变)一站式搞定
  • 单机友好:如果你只有一台服务器,Lucky 真的很香

但,当我的服务越来越多时,问题来了

痛点 1:没有"模板"概念

每次新增服务,我都要从头填写:域名、端口、后端地址、SSL 配置……即使 90% 的配置都是重复的。

痛点 2:多机器?不存在的

Lucky 是单机工具。我的服务器 A 和服务器 B 各需要独立配置,没有任何联动。如果有多域名,也要分别配置。(注意看我这个图里的配置,每个服务我都手动配了两次,连复制功能都没有)

这意味着,新增一个服务我需要:

  1. 登录服务器 A,在 Lucky 里配置反向代理
  2. 登录服务器 A,手写 FRP 客户端配置
  3. 登录服务器 B,在 Lucky 里配置反向代理
  4. 登录服务器 B,修改 FRP 服务端配置

4 份配置,分布在 2 台机器上,每份都要手动写。

痛点 3:配置散落各处,无法集中管理

想看看现在部署了哪些服务?登上每台机器,打开 Lucky 后台,或者去 /etc/nginx/sites-available/ 里翻一翻。

想改个全局配置(比如换域名)?挨个机器挨个服务改。

我有 10 个服务,分布在 3 台服务器上。这是 30+ 次重复操作。

一个疯狂的想法:自己造一个

某天凌晨,我又新部署了一个服务,想着又要配置一大堆反向代理,脑子里冒出一个念头:

💡 如果有个工具,能让我只输入 服务名 + 子域名 + 端口,就自动生成所有需要的配置文件,该多好啊!

我想要的是:

  • 模板化:写一次模板,复用 N 次
  • 变量化:不同服务器用不同的变量值,但共享同一套模板
  • 中心化:在一个地方管理所有服务和配置

于是,ConfigBridge 诞生了。

ConfigBridge 是什么?

ConfigBridge 是一个 Web 服务配置管理系统,专治"多服务 × 多服务器"配置噩梦。

ConfigBridge 管理界面

/// ConfigBridge 管理界面 ///

核心理念

TERMINAL
模板化 + 变量化 + 中心化
  • 模板化:用 Jinja2 语法(一种模板语言,用 {{ 变量名 }} 的方式占位)定义配置模板,一套模板适配多种场景
  • 变量化:通过变量系统,同一个模板在不同服务器上生成不同的配置
  • 中心化:所有服务、服务器、模板、变量都在一个 Web 界面集中管理

产品定位

适合场景
不适合场景
多台服务器需要统一配置管理只有一台服务器、几个服务
服务数量 10+手动配置就能搞定的简单场景
需要 Nginx + FRP 等多种配置联动只需要简单的反向代理
追求配置可复用、可追溯不在意配置管理的临时项目

模块功能详解

好,接下来我带你逐一看看 ConfigBridge 的核心模块。如果你只想快速了解整体效果,可以先跳到后面的「我的典型使用场景」那一节,看完再回来细读也不迟。

1. 服务管理

功能:定义你的 Web 服务,设置基本信息,关联到目标服务器。

核心字段

  • 服务名称(如 nextcloud
  • 子域名(如 cloud,最终拼接成 cloud.example.com
  • 端口(服务实际监听的端口,如 8080
  • 关联服务器(这个服务要部署到哪些机器)

configbridge 服务详情

/// configbridge 服务详情 ///

每个服务只需要填这 4 个字段,剩下的交给模板和变量系统。

2. 服务器管理

功能:定义你的服务器,设置连接信息和环境特征。

核心字段

  • 服务器名称(如 server-a
  • IP 地址 / 主机名
  • SSH 凭证(SSH 是远程登录协议,让你用命令行连接服务器;这里填登录信息,用于后面的远程部署功能)

configbridge 服务器详情

/// configbridge 服务器详情 ///

我这里在本地ssh设置里配置了免密登录,设置了别名,推荐这样设置,保证关键信息的安全。

3. 配置模板管理

功能:用 Jinja2 模板语法定义配置模板,一套模板适配多种场景。(前面提过,Jinja2 就是用 {{ 变量 }} 占位,生成时自动替换成真实值。)

模板类型

  • Nginx 反向代理模板
  • FRP 客户端模板
  • FRP 服务端模板
  • 任何你需要的配置文件模板

我的 Nginx 模板示例

configbridge nginx 模板详情

/// configbridge nginx 模板详情 ///

4. 变量系统(四层优先级)

这是 ConfigBridge 最核心的设计——四层变量优先级系统

为什么需要它?

问题:同一个服务,在不同服务器上的配置可能有细微差别。

比如:

  • 在 server-a 上,backend_port = 8080(服务实际端口)
  • 在 server-b 上,backend_port = 8081(FRP 转发端口,不是原始端口!)

如果为每个场景单独写模板,模板数量会爆炸。

解决方案:四层变量覆盖

优先级
变量层级
查找逻辑示例(以 backend_port 为例)
最终取值
1 (最高)服务-服务器变量nextcloudserver-b 上的特定配置:80818081
2服务器变量server-b 上所有服务的默认值:(未定义)-
3服务变量nextcloud 在所有服务器上的默认基准值:8080-
4 (最低)全局变量整个平台的默认兜底值:(未定义)-

变量管理界面

/// 变量管理界面 ///

我的变量配置

层级
变量
说明
全局base_domainexample.com所有服务共用的根域名
服务器 (server-a)ssl_key_path/root/certSSL 证书路径
服务器 (server-b)frp_tokenxxxFRP 认证 token
服务 (nextcloud)is_webdav_configtrue是否启用 WebDAV相关配置
服务-服务器 (nextcloud @ server-b)backend_port8081在 B 上用 FRP 转发端口

5. 一键生成

功能:点击按钮,自动为所有关联的服务器生成配置文件。

生成过程

  1. 读取服务的基本信息(名称、子域名、端口)
  2. 获取该服务关联的所有服务器
  3. 对于每个服务器:
    • 查找适用的配置模板
    • 按四层优先级合并变量
    • 渲染模板,生成最终配置
  4. 保存到本地目录

生成结果(以 nextcloud 为例)

TERMINAL
storage/ ├── server-a/ │ ├── nginx/ │ │ └── nextcloud.conf ← IPv6 版 Nginx,listen [::]:80 │ └── frp/ │ └── nextcloud.toml ← FRP 客户端,localPort=8080 └── server-b/ └── nginx/ └── nextcloud.conf ← IPv4 版 Nginx,proxy_pass 端口=8081

从 4 份手动配置,到 1 次点击自动生成,这就是 ConfigBridge 的价值。

我的典型使用场景

让我用一个完整的例子展示 ConfigBridge 如何工作。

场景

  • 服务器 A:IPv6 公网,实际运行服务
  • 服务器 B:IPv4 公网,FRP 中转
  • 目标:部署 Nextcloud,让 IPv4 和 IPv6 用户都能通过 cloud.example.com 访问

配置前(手动方式)

  1. 在 server-a 上写 Nginx 配置(IPv6 监听)
  2. 在 server-a 上写 FRP 客户端配置
  3. 在 server-b 上写 Nginx 配置(注意 proxy_pass 端口要改成 FRP 转发端口!)
  4. 在 server-b 上改 FRP 服务端配置

4 份配置,2 台机器,无数次 SSH。

配置后(ConfigBridge 方式)

  1. 在 ConfigBridge 中创建服务 nextcloud,填写:子域名 cloud,端口 8080
  2. 关联 server-a 和 server-b
  3. 选取每个服务器分别配置好的固定模板(我默认Frp端口和原端口一致)
  4. 点击 "生成配置"

3 秒钟,4 份配置全部生成,放在本地目录里等你取用。

更多功能

除了上述核心模块,ConfigBridge 还提供了一系列实用功能,让配置管理更加高效。

6. 远程部署

功能:通过 SSH 将配置文件自动推送到目标服务器,告别手动 SCP(SCP 是命令行传文件的工具,每次都要敲一长串命令,很烦)。

工作流程

  1. 生成配置文件后,点击 "部署" 按钮
  2. 系统通过 SSH 连接到目标服务器
  3. 自动备份原配置文件到指定目录(防止误操作)
  4. 将新配置文件写入目标路径
  5. 可选执行重载命令(如 nginx -s reload。但我不一般不用自动重载,我一般会手动nginx -t检查一下,以防万一语法错误生成失败惹了大麻烦,别问我怎么知道的)

部署前再也不用担心"改错了回不去"——原配置文件自动备份,一键回滚

7. 配置版本控制

功能:记录每次配置模板的变更历史,支持查看差异和一键回滚。

实际场景

某天你改了 Nginx 模板,加了一行配置,结果服务挂了。

没有版本控制?只能靠记忆恢复,或者祈祷备份还在。

有 ConfigBridge?打开模板历史,看到所有版本,一键回滚到上一个稳定版。

版本信息包含

  • 修改时间
  • 修改说明(可选填写)
  • 完整模板内容
  • 与上一版的差异对比

8. 批量操作

功能:一键为所有服务重新生成配置文件。

典型场景

  • 修改了模板,需要让所有使用该模板的服务同步更新
  • 修改了全局变量(如 base_domain),需要重新生成所有配置
  • 新增了一台服务器,需要为所有服务生成该服务器的配置

一键操作,批量搞定,再也不用一个一个服务点进去。

配置批量生成部署

/// 配置批量生成部署 ///

结语:从手动到自动,配置管理的效率革命

回顾这个项目的初衷:

我只是想让"新增一个服务"这件事,从 30 分钟的重复劳动,变成 3 秒钟的一键操作

ConfigBridge 做到了。

而这套系统的诞生,离不开 AI 的辅助——我将在后续文章中详细讲述。

📚 AI开发配置系统系列导航

这是本系列的第一篇。

下一篇:AI开发配置系统(二):我与AI的72小时:从零打造ConfigBridge

如果你也有"多服务 × 多服务器"的配置管理痛点,ConfigBridge 可能正是你需要的工具

📌 项目信息

项目
详情
项目名称ConfigBridge 配置管理系统
解决问题多服务 × 多服务器的配置集中管理
典型场景IPv6/IPv4 混合环境、FRP 穿透、Nginx 反向代理
技术栈FastAPI + Vue 3 + SQLAlchemy + Jinja2

🎯 如果这篇文章对你有帮助,欢迎点赞、收藏、转发!有任何问题或建议,欢迎在评论区交流。

END OF LOG_
ID: CONFIGBR