尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

3 步拥有可无限扩展的 Git 托管:walgit 从桶到第一个 push 的最快部署教程

3 步拥有可无限扩展的 Git 托管:walgit 从桶到第一个 push 的最快部署教程 3 步拥有可无限扩展的 Git 托管walgit 从桶到第一个 push 的最快部署教程【免费下载链接】walgit项目地址: https://gitcode.com/gh_mirrors/wa/walgit 想要一套不用数据库、不用主节点、机器可以随便加随便扔的 Git 托管服务walgit 就是为此而生一个二进制 一个对象存储桶S3 或 GCS就能跑起支持 fetch/push、bundle-uri 快速克隆、LFS、Web 浏览界面和 JSON API 的完整 Git 服务器并且仓库可以比运行它的机器更大。下面用 3 步从建桶到第一个git push带你完成部署。为什么是桶即仓库传统 Git 托管的痛点在于 packfile仓库被压缩成大二进制包机器之间要复制、要对账、要有数据库记录谁在哪台机器上。walgit 的思路完全不同完整背景见 README.md写入走日志每次 push 变成一个不可变对象存进桶再用一次原子比较交换CAS改一个小 manifest 才对外可见机器只是缓存任何一台机器指向同一个桶就提供同一套仓库杀掉所有机器只损失热度不丢数据无需协调并发 push 只有一个赢家读请求每次都先向桶确认有没有变化 一句话桶就是仓库机器随便换。官方架构手册在 AGENTS.md目标与验收标准在 GOAL.md。部署前需要准备什么依赖说明一个对象存储桶任意 S3 兼容服务AWS、MinIO、R2、Ceph、本地 rustfs或 GCSgit ≥ 2.46服务端 ≥ 2.47客户端需要支持 bundle URI 与 Bearer 凭证构建工具任选其一Rust 工具链 pnpm 源码构建、Nix、或直接 Docker 镜像三种获取二进制的方式源码构建just web-build cargo build --release -p walgit-cli工具链版本固定在 rust-toolchain.toml容器镜像podman build -t walgit -f Containerfile .镜像内含 git、git-lfs开箱即用Nixnix build .#walgitflake.nix第 1 步准备一个桶和一份最小配置如果你只想在本机快速体验项目自带单机形态配置 walgit.standalone.toml它假设本地有一个 rustfsS3 兼容存储容器just dev-store一键拉起见 compose.yaml认证关闭、自动建库、TLS 自签全部角色serve / maintain / events由一个进程承担。如果你要部署到真实环境照着下面这份最小配置写每个键的默认值和注释都在 walgit.example.toml 里[server] listen 0.0.0.0:8080 public_url https://git.example.com # 浏览器访问的域名 auto_create_on_push true # push 到不存在的仓库名时自动创建 [server.auth] mode token anonymous_read false tokens [{ principal me, token_env WALGIT_TOKEN_ME, write true }] [store] backend s3 bucket my-walgit [store.s3] endpoint https://s3.us-east-1.amazonaws.com region us-east-1几个关键点认证三种模式none本机实验、token静态令牌支持Authorization: Bearer、oidc接任意 OpenID Connect 提供方浏览器登录后在/_auth/tokens签发 git 用的访问令牌。生产环境建议token起步、oidc收口存储后端s3含所有 S3 兼容服务或gcs在配置里二选一放置策略单机不用管多机时用[placement]的 glob 决定哪些机器负责哪个仓库的对象工作第 2 步一条命令启动把密钥放进环境变量然后直接 serveWALGIT_TOKEN_ME$(openssl rand -hex 24) walgit serve --config walgit.toml本机体验则更省事just dev-store # 拉起本地 rustfs 建桶 ./target/release/walgit-server --config walgit.standalone.toml启动后打开https://walgit.localhost:8080/自签证书浏览器点一次继续即可就能看到带 Web UI 的首页。此时服务已完整可用smart HTTP v0/v2 的 fetch/push、bundle-uri 静态克隆、LFS、JSON API、按仓库的 push 策略规则语言见 docs/POLICY.md全部由这一个进程提供。第 3 步第一个 push仓库自动诞生这是 walgit 最爽的一点——不需要先在界面里新建仓库push 到一个不存在的名字仓库就创建了cd your-app git -c http.extraHeaderAuthorization: Bearer $WALGIT_TOKEN_ME \ push https://git.example.com/acme/app.git main看到ok main - main就说明成功客户端只有在桶确认写入之后才会收到ok。 部署完成。团队里的其他同学只需要把上面这个 token 交给开发者安装脚本一条幂等命令自动配好 git 凭证助手并开启transfer.bundleURI之后git clone https://git.example.com/acme/app.git就能开箱克隆从源码克隆 walgit 本身则用git clone https://gitcode.com/gh_mirrors/wa/walgit。部署完之后验证与扩展验证浏览器打开https://git.example.com/acme/app能看到文件树、提交历史和 WAL 健康页git ls-remote https://git.example.com/acme/app.git列出所有 ref需要 webhook 通知时事件桥接会自动跟随 WAL 推送 ref 事件语义见 docs/EVENTS.md横向扩展加机器 加能力再开一台机器跑同一个二进制、指向同一个桶两台机器立即提供同一套仓库行为一致不需要任何协调用[placement] serve / maintain的 glob 指定哪些仓库的对象工作放在哪台机器比如 monorepo 放带 SSD 的机器cache.mode disk小机器服务长尾仓库想在前面加 nginx 做公共 TLS 和 bundle/LFS 字节卸载参考 deploy/nginx.conf.example大仓库也飞快walgit 的北极星是 bundle-uri——每周全量包 每日/每小时链式增量包作为静态文件直接从桶或 CDN 下发设计见 docs/BUNDLE_URI_DESIGN.md。参考数据里一个 57 GiB / 7300 万对象的 monorepoCI 的clone --filterblob:none --depth1 --sparse从 2075 秒降到 8 秒全量新克隆 32.7 GB 走静态包、只有 2.8 MB 经过服务器。常见问题速答杀光所有机器会丢数据吗不会。本地磁盘只是缓存桶才是仓库重新拉起实例秒级恢复可用。并发 push 谁赢同一个仓库同一时刻只有一个 CAS 能成功输的一方会重读、重校验并重试绝不脑裂。配置写错了会怎样校验是 fail-closed 的配置非法直接拒绝启动不会带病运行。后续想深入按这个顺序读文档GOAL.md为什么这样设计→ AGENTS.md完整架构与运行手册→ docs/ROUNDTRIPS.md成本模型往返桶的次数就是预算。3 步走完你手里就是一套桶里存真相、机器随意伸缩、仓库无限大的 Git 托管服务。从第一个 push 开始让扩容变成再加一台机器这么简单吧 【免费下载链接】walgit项目地址: https://gitcode.com/gh_mirrors/wa/walgit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表