Skip to content
跳到项目内容
全部项目
公司基础设施/阶段验证

VPN 订阅与自动部署

从员工开户到整机安装的可验证闭环

Hysteria2ShadowsocksSSO幂等安装Docker Compose
订阅账号 · 创建、停用与个人链接01 / 01

项目速览

业务背景

员工订阅由脚本和文档分散维护时,开户、离职停用与权限审批缺少统一入口。项目将订阅生命周期管理与代理服务部署一起交付,让管理员能在界面操作,也能明确判断一台服务器是否安装完成。

负责范围
  • 订阅账号增删查改与凭据轮换
  • 企业 SSO、权限申请与审批
  • 双协议代理与独立订阅链接
  • 安装预检、故障恢复与备份还原
17 项

单元测试

本机、验证服务器与 CI 通过;覆盖安装状态和关键管理行为。

2 × 3 轮

真实协议传输

验证服务器回环隔离环境,HY2 与 SS 各传输 3 次 500 KiB 数据,回传 SHA-256 一致;不作为公网吞吐测试。

失败 → 重试

恢复与证书演练

构建故障后重跑保留状态,备份恢复到独立容器通过;测试 CA 完成 HTTP-01 与续期换证。

01

核心业务

员工入职需要独立订阅,离职需要撤销访问,管理员还要知道谁修改过账号。最初依赖脚本开户、文档记录和手工复制链接;随着双协议接入与企业登录加入,账号状态、实际代理授权和管理员权限必须一起管理。

项目提供两种部署模式:登记模式仅维护已有订阅地址,独立模式同时部署管理服务和代理。两者的停用语义不同:移除登记不会撤销外部代理账号;独立模式则能够关闭订阅、拒绝认证并断开代理会话。安装器围绕目标配置与实际状态对账,只有最终验证通过才报告完成。

01订阅生命周期
创建、查询、编辑、停用和删除账号;每人独立链接,支持轮换链接与两种协议的密码。
02管理权限
密码登录与可选企业 SSO;管理员审批申请,操作员管理订阅,权限撤销后后续 API 请求重新校验。
03双协议接入
Hysteria2 为主节点,Shadowsocks / WebSocket / TLS 为回退节点,订阅内容由账号状态生成。
04部署与恢复
安装前检查参数、端口和已有数据;安装后核验服务、证书与回执,中断后按同一参数重试。
02

技术栈

管理服务
Python 标准库SQLite原生 Web 界面
访问与认证
NginxTLS企业 SSO角色权限
代理
Hysteria2 / QUICShadowsocks / WebSocket / TLS
部署
ShellDocker ComposeCertbotJSON 回执
03

系统架构与部署

管理 API、个人订阅和代理认证共用账号状态。Hysteria2 通过内部认证访问管理服务,Shadowsocks 回退经 TLS / WebSocket 接入;外部 SSO 只提供身份,角色权限由应用判断。

管理应用

Python / SQLite

保存账号、角色、申请与审计;容器使用非 root 身份、只读根文件系统,不挂载宿主 Docker socket。

代理运行时

Hysteria2 / Shadowsocks

独立模式创建双协议配置,账号停用与凭据轮换同步到实际认证路径。

HTTPS 入口

Nginx / TLS

承载管理、订阅与 WebSocket 回退,支持已有证书、测试证书或 ACME 签发。

安装控制

Shell / Compose / systemd timer

固定制品版本与摘要;ACME 续期钩子仅作用于本项目,健康检查失败可回退证书副本。

04

核心业务链路

员工从申请到获得订阅

  1. 1企业身份登录
  2. 2申请权限
  3. 3管理员审批
  4. 4创建订阅
  5. 5复制个人链接

身份属于配置的企业并不自动获得管理权。初始管理员按稳定身份标识配置;其他员工提交申请,管理员批准后才获得对应角色。订阅采用无 .yaml 后缀的路径,并保留旧后缀别名;日常编辑不改变链接。

离职停用与凭据泄露处理

  1. 1定位账号
  2. 2停用或轮换
  3. 3更新代理授权
  4. 4检查订阅与连接
  5. 5留存审计

独立模式停用后拒绝新认证并处理已有连接;轮换会同时更新订阅令牌与两种协议密码。删除后旧订阅返回 404。登记模式无法控制外部代理,因此界面与文档明确区分其权限范围。

首次安装中断后的恢复

  1. 1预检
  2. 2安装依赖与证书
  3. 3构建启动
  4. 4最终核验
  5. 5写入完成回执

一次故障注入让 Compose 构建以退出码 73 失败,回执记录失败阶段。恢复命令后使用原参数重跑,最终核验通过,已有账号、管理员和 TLS 摘要保持一致。该机制解决重复执行的一致性,不承诺把所有安装副作用作为一个事务回滚。

05

关键机制与取舍

01账号状态必须落实到实际访问

约束
只让页面显示“停用”,仍可能留下有效订阅或已连接的代理会话。
做法
独立模式将订阅生成、认证拒绝、Shadowsocks 配置与 Hysteria2 会话断开纳入生命周期操作;所有管理 API 按当前角色重新校验,不依赖登录时的旧权限快照。
效果
界面、订阅入口和代理认证具有对应的撤销行为;外部订阅登记保持明确的控制边界。

02幂等安装先保护已有状态

约束
重复执行若重新生成密码、覆盖数据库配置或抢占其他服务端口,会把恢复操作变成第二次故障。
做法
--check 先核验主机、参数、模式、端口与项目归属。已有状态与目标冲突时停止;数据库存在而配置缺失时也停止。参数、环境文件和回执原子写入,下载支持续传并核对摘要。
效果
重试保留已建立的身份与证书;不确定状态有明确报错,避免静默重置。

03命令退出成功还不够

约束
容器进程存在,并不能证明数据库、代理监听、证书和续期配置都正确。
做法
--verify 对照模型和实际端口,检查应用与数据库健康、代理状态、TLS 主机名 / 私钥 / 有效期 / 权限、续期定时器及钩子。每次执行保留私有日志与 running / failed / complete 回执,失败记录阶段、行号与退出码。
效果
只有最终验证通过才能标记 complete。SIGTERM / SIGINT 可记录失败;掉电或 SIGKILL 可能留下 running,需要下次检查判断。
06

AI 协作开发

Codex 协助把运维流程整理成管理应用与安装器,人工确定业务范围、权限规则和现有服务的保护边界,结果由代码检查、真实协议与故障注入共同验证。

  • 流程实现

    从脚本到管理闭环

    整理账号生命周期、SSO 角色与申请审批,补齐界面操作、审计和部署文档。

  • 工程约束

    用确定状态约束重试

    把参数冲突、项目归属、摘要校验与状态回执写进程序,不依靠 Agent 记住执行顺序。

  • 验收证据

    主动制造失败再恢复

    执行协议传输、浏览器增删改、构建故障注入、备份恢复及测试 CA 续期,分别记录通过范围。

自动生成与命令成功不代替上线验收;真实裸机、公网链路和长期容量的结论必须由对应环境提供证据。

07

阶段成果

  • 交付可在页面管理订阅与权限的独立系统,同时提供代理部署、检查、验证和恢复入口。
  • 在初始没有 Docker 与应用的 Debian 容器中完成冷安装;使用嵌套 Docker 验证,仍共享宿主内核,不能替代真实裸机重装与 systemd 开机验收。
  • 测试 CA 的签发与续期已经演练;公网 ACME、云安全组与 UDP 连通、多用户长期稳定性仍需在目标环境分别验证。现有生产代理服务未参与此次安装验证。

继续浏览

VPN 订阅与自动部署 · 订阅账号 · 创建、停用与个人链接
100%
VPN 订阅与自动部署放大预览

订阅账号 · 创建、停用与个人链接

别急,先让缓存热一下。