diff --git a/README.md b/README.md index 73884ec..de91343 100644 --- a/README.md +++ b/README.md @@ -1,48 +1,42 @@ # 关注的代码库合集(Codebase Collection) -> 用途:聚合我们关注 / 追踪的代码库,通过 **Git 子模块(submodule)** 统一管理。 +> 用途:聚合我们关注 / 追踪的代码库。外部代码库**镜像同步到 git.vanusys.com**(保证国内/内网可达),合集中通过 Git 子模块统一引用。 > 更新日期:2026-08-16 +> 相关文档:[分类方案](分类方案.md) · [镜像同步方案](同步方案.md) ## 收录清单 -> 待补充。格式约定: +> 分类见 [分类方案.md](分类方案.md);镜像状态:`待建远程镜像` = git.vanusys.com 上还没有镜像仓库。 -| 名称 | 子模块路径 | 仓库地址 | 用途 | 关注原因 | 备注 | -|------|-----------|---------|------|---------|------| -| (示例)LiveKit | livekit/livekit | https://github.com/livekit/livekit | SFU 视频会议服务 | 自建媒体服务器核心 | 外部仓库,考虑镜像 | +| 名称 | 分类 | 子模块路径 | 镜像地址(git.vanusys.com) | 上游地址 | 用途 | 关注原因 | 镜像状态 | +|------|------|-----------|---------------------------|---------|------|---------|---------| +| Astryx | frontend | frontend/astryx | VanuSystems/facebook-astryx | https://github.com/facebook/astryx | Meta 开源设计系统(可定制、Agent-ready) | AI 前端 / 设计系统方向,官网可跟踪 | 待建远程镜像 | ## 使用说明 -- **首次克隆**(含全部子模块): +- **首次克隆**(含全部子模块,全部走内部镜像,无需外网): ```bash git clone --recursive <合集仓库地址> ``` -- **拉取全部子模块最新代码**(跟随上游): +- **跟随上游最新代码**(更新子模块引用后需提交): ```bash git submodule update --remote - ``` - -- **新增一个代码库**: - - ```bash - git submodule add <仓库地址> <子模块路径> - git commit -m "chore: 收录 <名称>" - ``` - -- **更新子模块引用并提交**: - - ```bash git add . git commit -m "chore: 同步子模块引用" ``` -## 收录规范(建议) +- **新增一个代码库**(完整流程见 [分类方案.md](分类方案.md) 收录流程): -- **内部仓库**(git.vanusys.com 上):直接以子模块收录。 -- **外部开源仓库**(GitHub 等): - - 优先在 git.vanusys.com 建立镜像后再收录,避免子模块依赖外部网络(国内服务器拉取 GitHub 可能超时); - - 或仅在本表登记地址与用途,不强制挂子模块。 -- 子模块只记录**提交引用**,不会自动跟随上游改动,需定期 `git submodule update --remote` 同步。 + ```bash + git submodule add <内部镜像地址> <分类>/<仓库名> + git commit -m "chore: 收录 <名称>" + ``` + +## 收录规范 + +- **子模块一律指向内部镜像地址**(git.vanusys.com),不直接指向 GitHub —— 保证合集在宁波/内网环境可完整 clone。 +- **镜像维护**:运行 `tools/sync-mirrors.ps1` 或服务器定时任务(见 [同步方案.md](同步方案.md)),定期把上游变更推到内部镜像。 +- 子模块记录的是**提交引用**,不会自动跟随上游,需定期执行 `git submodule update --remote` 并人工确认提交。 diff --git a/tools/sync-mirrors.ps1 b/tools/sync-mirrors.ps1 new file mode 100644 index 0000000..2163b47 --- /dev/null +++ b/tools/sync-mirrors.ps1 @@ -0,0 +1,43 @@ +# 代码库镜像同步脚本(GitHub 外部仓库 -> git.vanusys.com 内部镜像) +# 用法: +# 1. 按下方 $Mirrors 表登记镜像(镜像工作区目录 + 内部镜像地址) +# 2. 首次:git clone --mirror <上游> <工作区目录> +# 3. 之后:本脚本 fetch 上游并 push --mirror 到内部 +# 建议配合 Windows 任务计划程序每日/每周运行;也可移植到香港服务器 cron。 +# 注意:统一使用 openssl TLS 后端,规避 schannel 在本机受限环境的问题。 + +$ErrorActionPreference = 'Stop' + +# 镜像登记表:Name -> @{ Upstream = 上游地址; Mirror = 内部镜像地址; Workspace = 本地裸仓库路径 } +$Mirrors = @{ + 'astryx' = @{ + Upstream = 'https://github.com/facebook/astryx' + Mirror = 'https://git.vanusys.com/VanuSystems/facebook-astryx.git' + Workspace = 'C:\Users\VanuSystems-Mu\Documents\AI\服务器运维\mirrors\astryx.git' + } +} + +$GlobalSsl = @('-c', 'http.sslBackend=openssl') + +foreach ($name in $Mirrors.Keys | Sort-Object) { + $m = $Mirrors[$name] + Write-Host "=== 同步 $name ===" + if (-not (Test-Path $m.Workspace)) { + Write-Warning "镜像工作区不存在: $($m.Workspace),跳过(请先 git clone --mirror)" + continue + } + Push-Location $m.Workspace + try { + Write-Host "[1/2] 从上游 fetch ..." + & git @GlobalSsl fetch --prune origin '+refs/*:refs/*' + if ($LASTEXITCODE -ne 0) { throw "fetch 失败: $name" } + Write-Host "[2/2] push 到内部镜像 ..." + & git @GlobalSsl push --mirror $m.Mirror + if ($LASTEXITCODE -ne 0) { throw "push 失败: $name" } + Write-Host "OK: $name" + } + finally { + Pop-Location + } +} +Write-Host "全部镜像同步完成。" diff --git a/分类方案.md b/分类方案.md new file mode 100644 index 0000000..71b1c30 --- /dev/null +++ b/分类方案.md @@ -0,0 +1,37 @@ +# 代码库合集分类方案 + +> 版本:v1 · 2026-08-16 +> 用途:为"关注的代码库"合集(codebase-collection)定义统一的分类与命名规范。 + +## 分类原则 + +1. **按领域分类**,与服务器运维/业务场景对齐(音视频、网络、AI、前端等)。 +2. **子模块路径用英文 slug**(小写、连字符),避免中文路径在工具链(CI、脚本、URL)中的兼容问题;中文说明只出现在文档里。 +3. 一个仓库只能归入一个主分类;拿不准时归入 `other/`,后续再调整。 +4. 每个收录项必须填写:名称、镜像地址(git.vanusys.com)、上游地址、用途、关注原因。 + +## 分类目录(一级) + +| 分类 slug | 中文名 | 收录范围 | 示例 | +|-----------|--------|---------|------| +| `realtime` | 音视频与实时通信 | SFU、WebRTC、会议、直播、远程桌面 | LiveKit、RustDesk | +| `network` | 网络与隧道 | 隧道、代理、流量转发、防火墙、NAT | traffic-mix、frp、软路由相关 | +| `frontend` | 前端与设计系统 | UI 框架、设计系统、组件库、AI 前端 | **astryx**(Meta 设计系统) | +| `ai` | AI 与智能体 | LLM、Agent、机器人、推理、RAG | QQbot、Agent 框架 | +| `infra` | 基础设施与中间件 | 数据库、缓存、消息队列、容器、K8s | PostgreSQL、Redis、Docker 相关 | +| `ops` | 运维与自动化 | 监控、日志、备份、CI/CD、配置管理 | Prometheus、Ansible | +| `internal` | 内部自研 | 我们自己在 git.vanusys.com 上维护的仓库 | ai-ops-docs、自研客户端 | +| `other` | 其他/待分类 | 暂未归类的仓库 | — | + +## 命名规范 + +- **子模块路径**:`<分类slug>/<仓库名>`,例如 `frontend/astryx`、`realtime/livekit`。 +- **镜像仓库名**(git.vanusys.com 上):`<上游组织>-<仓库名>`,例如 `facebook-astryx`;统一放 `mirrors` 组织或 `VanuSystems/mirrors/` 分组下(待定)。 +- **合集清单表**:README 的"收录清单"为唯一权威清单,分类变更同步更新该表。 + +## 收录流程 + +1. 把仓库加入"收录清单"表格(含分类)。 +2. 在 git.vanusys.com 创建镜像仓库(或由同步脚本自动建仓)。 +3. 本机执行镜像同步(见 `同步方案.md`)。 +4. 在合集中执行 `git submodule add <镜像地址> <分类>/<仓库名>`,提交收录。 diff --git a/同步方案.md b/同步方案.md new file mode 100644 index 0000000..dbe6730 --- /dev/null +++ b/同步方案.md @@ -0,0 +1,57 @@ +# 镜像同步方案(外部代码库 → git.vanusys.com) + +> 版本:v1 · 2026-08-16 · 状态:**待评审** +> 目标:把我们关注的 GitHub 等外部代码库**定期镜像**到 git.vanusys.com,让内部服务器(宁波、局域网等无法直连 GitHub 的环境)也能直接拉取,并在合集中用子模块统一引用。 + +## 架构 + +``` +GitHub (facebook/astryx 等上游) + │ ① 定期 fetch(香港服务器可直连 / 或本机 openssl 后端) + ▼ +镜像工作区 mirrors/.git(本机或香港服务器上的裸仓库) + │ ② push --mirror + ▼ +git.vanusys.com/VanuSystems/(内部镜像仓库) + │ ③ submodule 引用 + ▼ +codebase-collection(合集,内部全链路可达) +``` + +- **镜像层**:每个关注仓库一个镜像,与上游保持全量历史同步(`git push --mirror` 同步所有分支/标签)。 +- **合集层**:`codebase-collection` 的 submodule **只指向内部镜像地址**,不直接指向 GitHub,保证国内/内网 clone 合集时无需外网。 +- 子模块默认记录某个提交引用;需要跟随上游时在合集中执行 `git submodule update --remote` 并提交(手动,避免自动漂移)。 + +## 同步脚本(草案) + +### 方式 A:本机 Windows 计划任务(推荐先用这个) + +`tools/sync-mirrors.ps1`(见下),配合 Windows 任务计划程序每日/每周运行。 +注意:本机 schannel 后端在受限环境有 TLS 问题,脚本统一显式指定 `-c http.sslBackend=openssl`。 + +### 方式 B:香港服务器 cron(154.21.200.211,可直连 GitHub) + +待服务器上配置 git 凭据(专用镜像账号或 token)后,用 bash 版脚本 + cron(如每天 03:00): + +```bash +# 示例:/root/mirror-sync/astryx.sh +cd /root/mirror-sync/astryx.git +git fetch --prune origin '+refs/*:refs/*' +git push --mirror https://@git.vanusys.com/VanuSystems/facebook-astryx.git +``` + +## 待确认事项 + +1. **git.vanusys.com 服务类型**(Gitea / GitLab / 其他): + - 若支持**平台原生镜像**(Gitea 迁移/镜像、GitLab mirroring),可直接在网页上建镜像仓库并启用"定时同步",无需自建脚本 —— 这是最省事的路径,需确认。 + - 若不支持,采用上述脚本方案。 +2. **镜像仓库归属与命名**:`VanuSystems/facebook-astryx` 还是单独 `mirrors/` 组织?命名是否用 `facebook-astryx` 格式? +3. **同步频率**:每日 / 每周 / 手动? +4. **执行位置**:本机计划任务(先跑通)还是香港服务器 cron(长期更稳)? +5. **首次建仓**:需要有人登录 git.vanusys.com 网页创建空镜像仓库(我的执行环境无法完成 HTTPS 认证)。 + +## 收录清单登记表 + +| 上游仓库 | 镜像地址(计划) | 分类 | 状态 | +|---------|----------------|------|------| +| https://github.com/facebook/astryx | git.vanusys.com/VanuSystems/facebook-astryx | frontend | 待建远程镜像 |