私有仓库也敢画:GitDiagram 本地部署与 Token 配置全流程
私有仓库也敢画GitDiagram 本地部署与 Token 配置全流程【免费下载链接】gitdiagramVisualize any GitHub codebase: free interactive architecture diagrams and one-minute explainer videos. Replace hub with diagram in any GitHub URL.项目地址: https://gitcode.com/GitHub_Trending/gi/gitdiagram把任意 GitHub URL 中的hub换成diagram几秒后你就得到一张可交互、可点击跳转源码的架构图——这是 GitDiagram 最出圈的玩法。但公开仓库人人可读私有仓库才是大多数团队真正想画的东西内部服务怎么分层、模块之间谁依赖谁、新人要从哪个文件读起。社区里关于 GitDiagram 私有仓库的文章并不少但多数停在支持私有仓库一句话上对 Token 怎么生成、存哪里、私有数据怎么隔离语焉不详。本文直接以仓库源码为准从环境准备、.env配置、细粒度 PAT 的权限最小化到私有产物的存储隔离与首次生成验证完整走一遍私有仓库也敢画的本地部署链路。先纠正一个过时的认知它其实是一个单进程应用不少社区文章把 GitDiagram 描述成Next.js FastAPI 前后端分离架构这是早期版本的印象与当前仓库不符。在 docs/architecture.md 中技术栈一节写得非常明确There is no separate FastAPI implementation, Postgres database, or Neon runtime.整个项目就是一个 Next.js 应用UI 与生成 API 跑在同一个进程里/api/generate/*是同源same-origin的 Route Handler部署在 Vercel 的 Bun runtime 上没有第二个后端进程没有要额外安装的数据库。这对本地部署是重大利好——你要拉起来的只有一个 dev server依赖项里甚至不需要自建 Postgres而是用托管式的 Cloudflare R2 与 Upstash Redis。本地环境准备Node.js 与 Bun版本要求不是装个最新版就行仓库里锁得相当死。package.json 的engines与packageManager字段engines: { bun: 1.3.14 2, node: 22.x }, packageManager: bun1.3.14docs/dev-setup.md 进一步说明Node.js 建议22.12及以上用于运行工具链22.22.2及以上才能跑完整测试套件jsdom 30Bun 锁定1.3.14CI、Dockerfile 与packageManager全部一致并且明确警告暂时不要升到 Bun 1.4——它会重写bun.lock。安装与启动bun install cp .env.example .env bun run devbun install的prepare脚本会启用.githooks/下的 pre-push 钩子推送前自动跑格式、lint、类型检查等快速校验。bun run dev实际调用的是 scripts/dev-turbo.sh即bun run --bun next dev --turbo。启动后打开http://localhost:3000即可。想要生产模式自检则bun run build bun run start完整校验序列lint / typecheck / test / build在 dev-setup 文档的 Verify 一节与 CI 完全一致。.env存储凭据与 AI 凭据是两条独立主线.env.example 是每个配置项的单一事实来源注释详尽。按作用可分成两组必填项存储与协调生成出的架构图不是只活在内存里会持久化到 R2配额、取消信号、分布式锁和短生命周期的失败状态放在 Upstash Redis。R2_ACCOUNT_ID R2_ACCESS_KEY_ID R2_SECRET_ACCESS_KEY R2_PUBLIC_BUCKET R2_PRIVATE_BUCKET CACHE_KEY_SECRET UPSTASH_REDIS_REST_URL UPSTASH_REDIS_REST_TOKEN注意R2_PUBLIC_BUCKET与R2_PRIVATE_BUCKET是两个不同的桶——公开仓库与私有仓库的产物物理隔离这是后面私有数据安全的关键一环。CACHE_KEY_SECRET不只是缓存密钥它还参与私有命名空间的 HMAC 派生与 GitHub 登录 cookie 的加密必须设置且保密。AI 凭据二选一即可。AI_PROVIDERopenai OPENAI_API_KEY OPENAI_MODELgpt-6-luna或走 OpenRouterAI_PROVIDERopenrouter OPENROUTER_API_KEY OPENROUTER_MODELopenai/gpt-5.6-terra OPENROUTER_SITE_URLhttp://localhost:3000 OPENROUTER_APP_NAMEGitDiagram此外有两个可选配置与本文主题直接相关一是GITHUB_PAT/GITHUB_PATS逗号或换行分隔的 Token 池作用是提高 GitHub API 的速率限额并在 src/server/github-auth.ts 中按轮询方式轮流使用二是GITHUB_CONNECT_*系列用于开启Continue with GitHub登录私有仓库的体验。速率限制方面默认服务器付费的生成是每 IP 8 次/小时基础设施级限制 60 次/小时而自带 API Key 的调用者不受限流——这点对自托管同样适用。PAT 生成权限最小化的官方模板GitDiagram 对该给你什么权限有明确预期这个预期直接写进了前端代码。src/components/private-repos-dialog.tsx 会在你点开 GitHub access 弹窗时把创建 Token 的页面 URL 预填好tokenUrl.search new URLSearchParams({ name: GitDiagram, description: Read selected repositories to generate architecture diagrams, expires_in: 30, contents: read, ...(repository ? { target_name: repository.split(/)[0]! } : {}), }).toString();也就是说官方推荐的 Token 是细粒度fine-grained个人访问令牌且参数已经替你定好名字叫 GitDiagram、30 天过期、contents权限为read、资源范围默认指向你要画的那个仓库。手动创建时照此办理即可GitHub Settings → Developer settings → Fine-grained personal access tokens → Generate new tokenResource owner 选仓库所属账号Repository access 只勾选目标仓库不要选 All repositoriesPermissions 里把Contents 设为 Read-onlyMetadata 的只读访问会自动附带过期时间设为 30 天以内然后生成并把令牌粘贴到 GitDiagram 的弹窗中保存。这是典型的权限最小化GitDiagram 只需要读文件树、README 与少量源码片段完全不需要写权限、issue 权限或账号级权限。弹窗里的数据用途说明也写得很直白Token 会保存在受保护的浏览器 cookie 里 30 天仓库内容会发送给 AI 提供方以生成图表。如果是组织仓库可能还需要组织管理员审批这次安装。私有仓库的隐私边界四条代码级防线「私有仓库也敢画」的信心不来自口号而来自源码里层层设防的边界。逐个看防线一匿名调用者永远借不到服务器的凭据。src/server/generate/github.ts 的fetchGithubData在拿到仓库元数据后立刻判断if (isPrivate !hasCallerGithubPat) { throw new Error(PRIVATE_REPOSITORY_AUTH_REQUIRED_ERROR); }注释说得更直白服务器配置的 App 安装令牌或 PAT 池可以提高公开请求的速率限额但must never become authorization for an anonymous caller——你给服务器配了高权限 Token它也只能用来读公开数据绝不会成为你画别人私有仓库的通行证。防线二过期或受限的 Token 不会阻塞公开仓库。同一个文件里的getGithubData捕获 401/403/404当调用者带了一个失效的 Token 时会回退到无 Token 的公开读取并标记usedPublicFallback。这意味着你把一个过期 Token 粘贴进去私有仓库画不了但公开仓库的体验不受影响错误信息也保持收敛不会泄露服务器能看到什么。防线三私有产物在独立的命名空间里且用 Token 本身做隔离密钥。src/server/storage/cache-key.ts 定义了读写位置的规则公开产物存public/v1/{user}/{repo}.json私有产物存private/v1/{namespace}/{user}/{repo}.json其中 namespace 是createHmac(sha256, secret).update(trimmedPat).digest(hex);即以CACHE_KEY_SECRET为密钥、以访问者自己的 PAT 为输入做 HMAC。这样即使两个不同的人画同一个私有仓库产物也落在不同的命名空间互不可见读取时getReadLocations也只在携带 Token 的情况下先查私有桶再查公开桶。提供给 MCP 等匿名调用的 src/server/storage/artifact-store.tsgetPublicDiagramArtifact则被限定只能读公开桶从接口层面杜绝了越权路径。防线四凭据本身 HttpOnly 化。src/server/http/request-credentials.ts 把 PAT 写入gitdiagram_github_patcookie属性为httpOnly、sameSite: strict、path: /api、有效期 30 天设置 PAT 的同时会清除已建立的 GitHub OAuth 连接保证同一时刻只有一个 GitHub 凭据生效。浏览器 JS 永远读不到这个 cookie它只在同源 API 请求时随请求带往服务器。最后排错时可以直接对照 src/features/diagram/github-access.ts 的错误文案映射表Private repository?、This repository needs GitHub access、Update your GitHub token、Your token needs repository access、We couldnt read this repositorys files——分别对应「仓库确实是私有的」「需要提供 Token」「Token 已失效」「Token 权限不足」「读取文件树失败」按提示逐项排查即可。首次生成私有仓库架构图从输入 URL 到完成在首页输入私有仓库地址注意 src/features/diagram/github-url.ts 的解析器相当宽容支持https://github.com/owner/repo任意页面深链tree/blob/issues 等、gitgithub.com:owner/repo.git的 SSH 形式以及owner/repo简写。点击生成后会先弹出 GitHub access 对话框按上一节的方式粘贴 PAT 保存再触发生成。生成过程走 src/app/api/generate/stream/route.ts 的 SSE 流式通道先拉取默认分支的递归文件树与 README超大仓库的截断树会做顶层目录补读README 超过 750 KB 直接拒绝再抓取有界、经过完整性校验的源码片段交由模型产出「一段流式架构讲解 一张严格图分组/节点/边/形状/仓库路径」服务器会对标识符、连通性、每个链接路径做二次校验无效输出会带着针对性反馈重试最后经确定性编译器生成 Mermaid。浏览器端以securityLevel: antiscript、htmlLabels: false渲染并用 DOMPurify 二次消毒节点点击只允许跳转 GitHub。验证成功的标志有三点图上每个组件都能点击直接跳到对应的 GitHub 文件或目录可导出 PNG 或复制 Mermaid 源码再次访问同一仓库时直接命中 R2 产物不再触发一次模型调用——这也是自托管时最直观的画成功且持久化成功的证明。如果生成报错对照上一节错误文案表Update your GitHub token就去 GitHub 重新生成并覆盖保存Your token needs repository access说明 Token 的 Repository access 范围没包含该仓库回 GitHub 编辑 Token 的范围This repository needs GitHub access则说明请求里根本没带上 Token回到弹窗重新粘贴。小结本地部署让敢画变成可审计私有仓库的架构图本质上是把代码结构这种高价值数据交给了一个 AI 生成管道。GitDiagram 的本地部署把整条链路收回到自己手里单进程 Next.js 应用省去后端与数据库的运维负担R2_PUBLIC_BUCKET与R2_PRIVATE_BUCKET双桶隔离公开与私有产物HMAC 派生的命名空间保证每个 Token 只能读回自己的图HttpOnly cookie 保证浏览器侧拿不到凭据而代码里服务器凭据绝不授权匿名调用者的红线让自托管者可以放心地把自己的 PAT 配进.env去提升 API 限额而不必担心它变成别人的钥匙。照着这份流程走一遍你会得到一张私有仓库的架构图以及一整套可以讲给团队听的数据边界。【免费下载链接】gitdiagramVisualize any GitHub codebase: free interactive architecture diagrams and one-minute explainer videos. Replace hub with diagram in any GitHub URL.项目地址: https://gitcode.com/GitHub_Trending/gi/gitdiagram创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

勒索病毒应急响应全指南:从隔离取证到数据恢复实战

勒索病毒应急响应全指南:从隔离取证到数据恢复实战

1. 中招瞬间的第一反应:先别急着拔网线先说个真实场景。某天凌晨两点,值班同事打来电话,声音都在抖:文件打不开了,后缀变成一串乱码,桌面上多了个 txt,大意是“你的文件已被加密,72小…

2026/10/10 22:12:00 阅读更多 →
Gitee Team实操:构建软件工厂数字神经系统,研发效能落地全攻略

Gitee Team实操:构建软件工厂数字神经系统,研发效能落地全攻略

在企业里推动 DevOps 或研发效能落地,最烦的不是技术难题,而是需求、代码、构建、测试各干各的,谁也说不清现在的版本到底能不能发布。Gitee Team 真正打动我的地方,是它把“软件工厂”这个概念变成了可以落地的数字神经系统——从…

2026/10/10 22:12:00 阅读更多 →
深入Linux管道:从匿名管道到FIFO的进程间通信实战指南

深入Linux管道:从匿名管道到FIFO的进程间通信实战指南

1. 从一次“Broken pipe”说起:为什么我决定彻底搞懂管道先把话说在前面:如果你写过任何Linux下的多进程程序,那你大概率见过这两行输出之一——Broken pipe,或者进程莫名其妙卡住不动、像死锁一样。我第一次被“管道”正面教育&a…

2026/10/10 22:12:00 阅读更多 →

最新新闻

CVND人脸关键点检测实战:从数据增强到OKS评估的完整避坑指南

CVND人脸关键点检测实战:从数据增强到OKS评估的完整避坑指南

简介:这份资源是CVND(计算机视觉纳米学位)的第一个实战项目——面部关键点检测的完整代码与数据集,面向具备Python与深度学习基础、希望掌握CNN回归任务与经典人脸检测流程的学习者。项目围绕眼睛、鼻子、嘴部关键点展开&#xff…

2026/10/10 23:37:11 阅读更多 →
Netty HTTP Client连接池设计与实践:从异步模型到超时治理

Netty HTTP Client连接池设计与实践:从异步模型到超时治理

1. 先看清楚症结:为什么说连接池是HTTP Client性能的基石做Java后端时间久了,你会发现一个特别有意思的现象:大多数人谈起HTTP Client,第一反应就是"发个请求等响应",最多加点超时配置,能跑就行。…

2026/10/10 23:37:11 阅读更多 →
CNN食物图像识别实战:从数据集到避坑指南

CNN食物图像识别实战:从数据集到避坑指南

简介:针对食物图像识别场景,这套资源提供了一份可运行的卷积神经网络项目,采用Python与TensorFlow实现,适合想从零搭建图像分类模型的深度学习者。压缩包共32个文件,以12个Python脚本为主体,分别负责数据预…

2026/10/10 23:37:11 阅读更多 →
Python情感分析源码实战:53k对话清洗、SnowNLP训练与Flask接口全链路

Python情感分析源码实战:53k对话清洗、SnowNLP训练与Flask接口全链路

简介:这是一套面向Python初学者与NLP入门者的情感分析系统源码,围绕文本情感倾向判断这一典型任务,整合了数据清洗、模型训练与情感分类的完整流程,适合用于课程设计、毕业项目或自然语言处理练手场景。压缩包共34个文件&#xff…

2026/10/10 23:36:09 阅读更多 →
预测分析表自动生成:结构化决策证据链实战方案

预测分析表自动生成:结构化决策证据链实战方案

简介:本资源是一份面向编译原理课程学习者与C语言实践者的LL(1)预测分析表自动生成实现方案,聚焦于FIRST集与FOLLOW集的迭代计算逻辑及预测分析表构造这一核心难点。压缩包共12个文件,含11个文本文件(用于文法输入、测试用例及结果…

2026/10/10 23:36:09 阅读更多 →
肝病知识图谱问答系统实战:从压缩包到KBQA全链路

肝病知识图谱问答系统实战:从压缩包到KBQA全链路

简介:这份资源是面向医疗信息化与知识图谱方向的开发者、学生及NLP爱好者的肝病问答系统完整源码包,基于Python实现,围绕肝病知识图谱完成实体关系构建、自然语言问题解析与答案检索,适合作为知识图谱入门到进阶的实战参考。压缩包…

2026/10/10 23:35:08 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →