Zig 编程语言项目最近从 GitHub 迁移到 Codeberg,核心原因是微软通过 Copilot 等 AI 工具大规模刮取公共仓库代码用于训练模型,这不仅侵犯贡献者隐私,还可能违反开源许可如 MIT 的商业使用限制。自托管 Forgejo 或 Gitea 等轻量级 Git 服务,能完全隔离代码数据,避免被商业 AI 平台刮取,同时确保 fork 分支新鲜度和许可合规。
GitHub Copilot 的训练数据来源于公共仓库,没有明确 opt-in 机制,导致 Zig 等项目担心代码被用于商业 AI 输出,污染许可生态。Zig 核心开发者 Andrew Kelley 在公告中指出,GitHub 过度拥抱 AI 与项目禁止 LLM 政策冲突,且 Actions 不稳定进一步加速迁移。“Zig 的代码一直托管在 GitHub 上,但微软收购后工程文化腐化,AI 推广加剧问题。” 类似担忧在开源社区普遍存在,自托管能切断数据外流路径。
Forgejo 是 Gitea 的社区分叉,轻量级自托管,支持完整 Git 功能、Issue、PR、Actions(兼容 GitHub Actions),资源占用仅 100-250MB,适合 Zig 类系统编程项目。相比 GitHub,它提供数据主权:代码不被爬虫访问,fork 可实时同步上游而不依赖第三方。私有化部署确保贡献者邮箱、PR 评论等隐私不泄露,且可自定义许可检查钩子。
部署 Forgejo 以 Docker Compose 为例,确保高可用和易维护。核心清单:
-
环境准备:
- 服务器:最低 1GB RAM、1 核 CPU、Ubuntu/Debian。
- Docker & Compose:
apt install docker.io docker-compose。 - 域名:配置 A 记录指向服务器 IP,支持 HTTPS。
-
目录结构:
forgejo/ ├── docker-compose.yml ├── data/ # 持久化仓库数据 ├── config/ # app.ini 配置 └── postgres/ # 数据库数据 -
docker-compose.yml 配置(关键参数):
version: '3' services: forgejo: image: codeberg.org/forgejo/forgejo:8.0 # LTS 版稳定 container_name: forgejo environment: - USER_UID=1000 - USER_GID=1000 - FORGEJO__security__INSTALL_LOCK=true # 禁用安装页 - FORGEJO__server__DOMAIN=git.example.com - FORGEJO__server__ROOT_URL=https://git.example.com/ - FORGEJO__database__DB_TYPE=postgres - FORGEJO__database__HOST=db:5432 - FORGEJO__database__NAME=forgejo - FORGEJO__database__USER=forgejo - FORGEJO__database__PASSWD=strongpass123 - FORGEJO__actions__ENABLED=true # 启用 Actions - FORGEJO__crawler__ENABLED=false # 禁用爬虫索引 volumes: - ./data:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro ports: - "3000:3000" # Web UI - "222:22" # SSH,避开系统 22 端口 restart: always depends_on: - db db: image: postgres:16 container_name: forgejo-db restart: always environment: - POSTGRES_USER=forgejo - POSTGRES_PASSWORD=strongpass123 - POSTGRES_DB=forgejo volumes: - ./postgres:/var/lib/postgresql/data ports: - "5432:5432"启动:
docker-compose up -d。首次访问 https://git.example.com:3000 初始化管理员账户。 -
安全与许可配置(app.ini 覆盖 docker-compose 中的环境变量):
- SSH:生成 ed25519 密钥对,配置
FORGEJO__server__SSH_DOMAIN=git.example.com,公钥上传用户设置。 - 许可隔离:启用
FORGEJO__repository__ENABLE_PUSH_CREATE_USER=false,强制 PR 审查合并;Hooks 检查许可:Actions 工作流验证 LICENSE 文件。 - Fork 新鲜:设置镜像上游
git remote add upstream https://codeberg.org/ziglang/zig.git,定时 Actions 拉取更新。 - 隐私:
FORGEJO__service__DISABLE_REGISTRATION=true,仅邀请注册;禁用分析FORGEJO__analytics__ENABLED=false。
- SSH:生成 ed25519 密钥对,配置
-
Actions Runner 配置(自建 CI,避免 GitHub 依赖):
# .forgejo/workflows/ci.yml name: CI on: [push, pull_request] jobs: test: runs-on: forgejo-runner steps: - uses: actions/checkout@v4 - name: Zig Build run: zig build test部署 runner:下载 actions-runner 二进制,配置 token 从 Forgejo UI 获取。
监控与风险控制:
- 备份:Cron 每日
docker exec forgejo forgejo backup create --file /data/backup-$(date +%Y%m%d).zip,上传 S3。 - 监控:Prometheus + Grafana,指标:
forgejo_sessions_active、git_operations_total,阈值:CPU>80% 告警。 - 回滚:版本 pin 到 LTS,如 7.0;测试升级前 snapshot 卷。
- 限流:
FORGEJO__rate_limit__ENABLED=true,API 100/min。
此方案参数化部署,确保 Zig 类项目 fork 保持 upstream 同步(每日拉取),许可不被 AI 污染,隐私全控。成本低(VPS 月 10 元),扩展性强,支持 100+ 仓库。
资料来源:
- Zig 迁移公告:The Register
- HN 讨论:Hacker News
- Forgejo 文档:https://forgejo.org/docs/latest/