Hotdry.
systems-engineering

将 Dillo 浏览器仓库迁移到自托管 Git:实现平台独立与最小化开发

针对轻量级浏览器 Dillo 项目,从 GitHub 迁移仓库到自托管 Gitea/Forgejo 的完整步骤、参数配置与风险规避策略。

Dillo 浏览器作为一个经典的轻量级图形化网页浏览器,以其极小的体积和高效性能著称,源代码仅约 600 KB,静态二进制约 980 KB,使用 C/C++ 编写并基于 FLTK GUI 库构建。它支持多平台运行,包括 Linux、BSD、MacOS 和 Windows,支持 HTTP/HTTPS/FTP 等协议,并通过插件扩展如 Gemini、Gopher 等协议。该项目强调降低网页访问门槛、支持老旧设备和慢速连接,同时注重个人隐私与软件效率。

然而,许多开源项目如 Dillo 最初托管在 GitHub 上,虽然便利但存在供应商锁定风险:平台政策变动可能中断访问,数据隐私依赖第三方,且免费服务随时可能收费或限流。对于追求最小化开发的 Dillo 团队,自托管 Git 仓库是理想方案,能实现完全平台独立、避免 vendor lock-in,并持续最小化开发流程。自托管还能自定义权限、集成本地 CI/CD,并降低长期维护成本。

自托管 Git 的核心优势

选择自托管 Git 服务如 Gitea 或 Forgejo(Gitea 的社区 fork),这些工具轻量级、易部署,支持完整 Git 功能包括代码审查、Issue 跟踪、Wiki 和 CI/CD。相比 GitHub,它们资源占用低:Gitea 单实例只需几十 MB 内存,适合 Raspberry Pi 等嵌入式设备,与 Dillo 的 “高效” 理念高度契合。

证据显示,Dillo 项目已部分转向自托管:其主仓库位于 https://git.dillo-browser.org/dillo/,而 GitHub 仅用于 Issue 跟踪。这证明迁移可行,且能维持开发连续性。自托管避免了 GitHub 的潜在中断,如 2024 年开源项目资金争议中暴露的依赖风险。

迁移前的准备清单

  1. 备份现有仓库:克隆 Dillo GitHub 仓库(https://github.com/dillo-browser/dillo)。

    git clone --mirror https://github.com/dillo-browser/dillo.git dillo-backup.git
    cd dillo-backup.git
    git bundle create ../dillo-full.bundle --all
    

    这生成完整 bundle 文件,包含所有分支、标签和历史。

  2. 选择自托管工具

    工具 优势 资源需求 推荐场景
    Gitea 功能丰富、API 完整、易迁移 CPU: 1 核,RAM: 256MB 团队协作
    Forgejo 纯社区驱动、轻量、安全优先 CPU: 1 核,RAM: 128MB 单人 / 最小化

    优先 Forgejo,其设计聚焦 “轻量软件锻造”,与 Dillo 匹配。

  3. 服务器环境

    • OS: Debian/Ubuntu(最小化安装)。
    • Docker 部署(推荐,避免依赖冲突):
      docker run -d --name forgejo -p 3000:3000 -p 2222:22 -v /srv/forgejo:/data codeberg.org/forgejo/forgejo:1.21 rootless
      
    • 域名 / SSL:用 Caddy 或 Nginx 反代,Certbot 自动 HTTPS。
    • 数据库:SQLite(默认,轻量);生产用 PostgreSQL。

详细迁移步骤

  1. 安装并初始化 Forgejo/Gitea

  2. 推送裸仓库

    • 在 Forgejo Web 界面创建新仓库 “Dillo”,选择 “导入现有仓库”。
    • 或命令行:
      git clone --bare dillo-backup.git
      cd dillo-backup.git
      git push --mirror git@your-server:2222/dillo-browser/dillo.git
      
      配置 SSH 密钥:生成 ssh-keygen -t ed25519 -C "dillo-dev",公钥加到 Forgejo 用户设置。
  3. 迁移 Issue/PR/Wiki(关键,避免丢失元数据):

    • Forgejo/Gitea 支持内置迁移:Web 界面 “新建仓库”→“从 GitHub 迁移”,输入 GitHub clone URL 和 Personal Access Token(repo 权限)。
    • 参数:启用 “Wiki”、“Issues”、“Pull Requests”、“Milestones”、“Labels”、“Releases”。
    • 超时阈值:若仓库大,设 MIGRATE_TIMEOUT=3600 环境变量。
    • 脚本自动化(Python + API):
      import requests
      headers = {'Authorization': 'token YOUR_FORGEJO_TOKEN'}
      data = {
          'clone_addr': 'https://github.com/dillo-browser/dillo.git',
          'uid': 1,  # admin user ID
          'repo_name': 'dillo',
          'private': False,
          'wiki': True, 'issues': True, 'pull_requests': True
      }
      requests.post('http://your-server:3000/api/v1/repos/migrate', json=data, headers=headers)
      
  4. 插件与 CI 配置

    • Dillo 插件仓库(如 gemini://)一并迁移。
    • Actions CI:Forgejo 内置,配置 .forgejo/workflows/build.yml 测试构建:
      jobs:
        build:
          runs-on: docker
          steps:
          - uses: actions/checkout@v4
          - run: ./autogen.sh && ./configure && make
      
      阈值:超时 30min,内存限 512MB。
  5. 权限与访问控制

    • 团队:创建组织 “Dillo”,协作员读写,维护者合并 PR。
    • Webhooks:集成 IRC/Mastodon(Dillo 已用),URL: https://fosstodon.org/@dillo。
    • 备份策略:cron 每日 gitea dump -c /data/gitea/conf/app.ini,存 S3 或本地。

风险规避与监控参数

  • 风险:迁移中断(网络 /token 失效)→ 分步执行,先代码后元数据;测试环境验证。
  • 回滚:保留 GitHub 镜像,DNS TTL 设 300s 快速切换。
  • 监控
    指标 阈值 工具
    仓库大小 <500MB du -sh /data/git
    响应时间 <200ms Prometheus + Grafana
    磁盘使用 80% 告警 df -h
    Uptime 99.9% Uptime Kuma

生产阈值:PostgreSQL 连接池 50,缓存 Redis(可选)。

迁移后,Dillo 开发可持续:插件开发者推送 PR,本地构建测试,低资源服务器年成本 <100 元。Dillo 官网已指向自托管 Git,此举强化其 “高效独立” 哲学。

资料来源

(正文约 1250 字)

查看归档