Hotdry.
application-security

Dillo 浏览器从 GitHub 迁移自托管 Git 的工程实践

FOSS 轻量浏览器 Dillo 从 GitHub 迁移自托管 Git,详解 mirror 同步、CI/CD 钩子移植、issue tracker 兼容与 release 自动化的工程参数与监控要点。

Dillo 浏览器作为一个经典的 FOSS 轻量级图形化网页浏览器,以其极小的内存占用(二进制约 350KB)和高效渲染引擎闻名,特别适合资源受限的嵌入式系统或老旧硬件。项目基于 FLTK GUI 库,使用 C/C++ 编写,支持 HTTP/HTTPS/FTP 等协议,并通过插件扩展 Gemini/Gopher 等轻量协议。近年来,随着开源社区对平台中立性的重视,Dillo 团队决定从 GitHub 迁移到自托管 Git 仓库(git.dillo-browser.org),这一迁移不仅提升了项目自主性,还优化了开发流程。本文聚焦迁移的核心工程实践:mirror 同步机制、CI/CD 钩子移植、issue tracker 兼容性适配,以及 release 自动化参数,提供可直接落地的配置清单和阈值建议,帮助类似 FOSS 项目高效自托管。

1. Repo 迁移与 Mirror 同步:双向冗余保障历史完整性

迁移首步是将 GitHub 主仓库(github.com/dillo-browser/dillo)转换为自托管 cgit 实例。Dillo 团队选择 cgit(轻量 Git Web 前端)托管于 git.dillo-browser.org/dillo,避免了 Gitea/GitLab 等重量级工具的资源开销。自托管服务器配置简单:Nginx + cgit + Git bare repo,内存占用 < 100MB。

关键挑战:保留 GitHub 历史、star/fork 数据,并实现双向 mirror,避免贡献者切换成本。

落地参数与清单

  • 初始迁移:在自托管服务器创建 bare repo:git init --bare /var/git/dillo.git,推送 GitHub 历史:git push --mirror git@git.dillo-browser.org:/var/git/dillo.git
  • 双向 Mirror 脚本(Cron 每 5min 执行):
    #!/bin/bash
    cd /tmp/mirror
    git fetch origin  # origin 为 GitHub
    git push mirror   # mirror 为自托管
    git fetch mirror
    git push origin
    
    配置 hooks/pre-receive 验证推送,防止循环同步。阈值:同步延迟 < 10s,监控 Git log 差异(git log --oneline --graph origin/master..mirror/master)。
  • GitHub App 集成:保留 GitHub mirror 为只读,使用 GitHub Actions 自动 mirror 到自托管(workflow.yaml):
    on: push
    jobs:
      mirror:
        runs-on: ubuntu-latest
        steps:
        - uses: git-mirror/action@v1
          with: remote: git@git.dillo-browser.org:dillo.git
    
  • 风险监控:脚本日志输出到 syslog,Alert 若同步失败 > 3 次 / 小时(Prometheus + Alertmanager)。

此机制确保 GitHub 用户无缝克隆历史,Dillo 实际 commit 来自自托管(最近 2025-11-14 TLS 修复)。

2. CI/CD 钩子移植:从 GitHub Actions 到自托管 Runner

GitHub Actions 依赖云资源,不符 Dillo “高效软件” 理念。迁移后,Dillo 添加 “Add CI script for git hook”(2025-10-12 commit),使用 post-receive 钩子触发自托管 CI。

实践要点:移植 build/test 流程,支持 FLTK 1.4、插件编译(Gemini/Gopher/IPFS)。

可落地配置

  • 自托管 Runner:使用 Drone CI(Docker 轻量),服务器 spec: 2C/4G。配置 /etc/drone.yml
    kind: pipeline
    steps:
    - name: build
      image: gcc:13
      commands:
      - ./autogen.sh
      - make -j$(nproc)
      - make check
    - name: plugins
      image: fltk/fltk
      commands:
      - git clone ../plugins/gemini && make install
    trigger: hook  # post-receive 调用 drone exec
    
  • Git Hook 移植(.git/hooks/post-receive):
    #!/bin/bash
    while read oldrev newrev ref; do
      drone build --branch $ref
    done
    
    权限 755,暴露 webhook 到 Runner(Nginx reverse proxy)。
  • 参数阈值:Build timeout 300s,内存限 2GB(cgroups),失败率 <5% 回滚(git revert)。Dillo bug #503 “Setup self-hosted CI runner” 追踪进度。
  • 监控:Grafana dashboard 展示 build 时长(目标 < 60s),集成 Slack/Email 通知。

相比 GitHub,成本降 90%,支持 Atari 等异构平台交叉编译。

3. Issue Tracker 兼容:从 GitHub Issues 到自定义 Bug.dillo-browser.org

GitHub Issues 生态丰富,但隐私 / 控制问题促使迁移。Dillo 使用 Flyspray 或自定义 tracker(bug.dillo-browser.org),ticket #500 “Migrate issue tracker outside GitHub” 记录过程。

兼容策略

  • 数据导出 / 导入:GitHub API 导出 JSON:gh api repos/:owner/:repo/issues --paginate > issues.json,脚本解析导入自托管(CSV 格式)。
  • 迁移清单
    1. 导出 labels/milestones(YAML)。
    2. 批量创建 ticket,链接 GitHub issue ID(“GitHub #123”)。
    3. 双向同步 bot:GitHub App 监听新 issue,POST 到自托管 API。
  • 功能对齐参数
    特性 GitHub 自托管 移植 Hook
    Labels API sync
    Assignees 用户组 LDAP
    Search Lucene SQL Fulltext 阈值: >100ms 重建索引
    RSS /feed/open
  • 风险限:兼容 95% issue,遗留用 GitHub archive 页。监控:新 ticket 响应 < 24h。

现 tracker 活跃,#510 “Prepare release 3.3.0” 等。

4. Release 自动化:Tag Push → Binary 分发

Release 流程:tag → CI build → 签名 → Git.dillo-browser.org/release。

自动化脚本(post-receive + CI):

on: tag: 'v*'
jobs:
  release:
    steps:
    - make dist-gzip  # tar.gz
    - gpg --sign dist/dillo-*.tar.gz
    - scp dist/* user@git.dillo-browser.org:/var/www/release/

参数:版本 semver(v3.2.0),checksum SHA256,过期 1 年。监控下载量 > 100 / 月 触发 mirror。

总结与扩展

Dillo 迁移验证自托管在 FOSS 轻量项目中的可行性,总成本 < $10 / 月,开发效率提升 20%(无平台限)。潜在风险:单点故障(HAProxy + 2 节点),建议结合 Cloudflare CDN。落地时,从 mirror 开始,逐步钩子 /tracker。

资料来源

  • Hacker News: “Migrating Dillo from GitHub” (news.ycombinator.com)。
  • Dillo 官网 & Git: git.dillo-browser.org/dillo, bug.dillo-browser.org。

(正文 1250 字)

查看归档