Hotdry.
systems-engineering

为 Zig 类项目自建 Forgejo/Gitea:避开 GitHub Copilot 代码刮取,确保许可隔离与隐私

借鉴 Zig 项目迁移经验,自建 Forgejo/Gitea 实现代码隐私、许可合规与 fork 新鲜度控制的关键参数与部署清单。

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 为例,确保高可用和易维护。核心清单:

  1. 环境准备

    • 服务器:最低 1GB RAM、1 核 CPU、Ubuntu/Debian。
    • Docker & Compose:apt install docker.io docker-compose
    • 域名:配置 A 记录指向服务器 IP,支持 HTTPS。
  2. 目录结构

    forgejo/
    ├── docker-compose.yml
    ├── data/          # 持久化仓库数据
    ├── config/        # app.ini 配置
    └── postgres/      # 数据库数据
    
  3. 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 初始化管理员账户。

  4. 安全与许可配置(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
  5. 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_activegit_operations_total,阈值:CPU>80% 告警。
  • 回滚:版本 pin 到 LTS,如 7.0;测试升级前 snapshot 卷。
  • 限流FORGEJO__rate_limit__ENABLED=true,API 100/min。

此方案参数化部署,确保 Zig 类项目 fork 保持 upstream 同步(每日拉取),许可不被 AI 污染,隐私全控。成本低(VPS 月 10 元),扩展性强,支持 100+ 仓库。

资料来源:

查看归档