Forgejo 是一个轻量级、自托管的 Git 服务平台,它是 Go 语言编写的 Gitea 项目的一个硬分叉。其核心目标是提供一个由社区主导、遵循自由软件原则的 Git 协作环境

项目历史

Forgejo 的起源与 Gitea 紧密相关

  1. Gitea 的发展: Gitea 项目自2016年从 Gogs 分叉以来,因其 Go 语言带来的轻量级、易部署和低资源占用等特性,迅速获得了用户和社区的青睐。它提供代码托管、问题跟踪、Wiki、CI/CD 集成等核心功能,成为 GitHub/GitLab 的轻量级替代方案。

  2. 治理模式的分歧: 2022年,Gitea 项目的维护者组建了 Gitea Ltd. 公司实体,旨在推进项目的商业化和管理。然而,项目创始人及部分核心贡献者对公司在项目治理、商标和域名控制权等方面的决策产生了异议。他们认为这些举措与项目最初的社区驱动、自由软件的理念相悖,且缺乏足够的透明度。

  3. Forgejo 的分叉: 鉴于上述分歧未能弥合,Gitea 的创始人和部分核心贡献者于 2022年末 决定创建 Forgejo 项目,作为 Gitea 的一个硬分叉。Forgejo 旨在明确自身定位为一个纯粹的、由社区驱动的自由软件项目,并得到了 Codeberg 基金会(一家非营利组织)的法律和基础设施支持。

  4. 分叉后的发展: Forgejo 致力于保持 100% 自由和开源,并强调开放治理和社区决策机制。它定期从上游 Gitea 同步最新的代码和功能,同时维护自己的特定补丁,尤其是在治理和开放性方面。Codeberg 等重视自由软件原则的托管服务也已转向使用 Forgejo。

项目优点

  1. 资源效率高:

    • Go 语言编译: 生成单一二进制文件,无复杂运行时依赖,部署简单,启动速度快。
    • 内存与CPU占用低: 相较于 GitLab 等大型解决方案,Forgejo 对系统资源的需求显著更低,使其非常适合在资源受限的服务器、小型虚拟机或 ARM 设备上运行。
    • 易于容器化: 轻量化的特性使其在 Docker 或 Kubernetes 环境中表现优异,有助于提升集群资源利用率。
  2. 部署与维护便捷:

    • 单文件部署: 下载后即可运行,简化了安装过程。
    • 跨平台兼容: 支持多种操作系统和硬件架构。
    • 内置服务: 集成 SSH 服务器、Web 服务器,并支持多种数据库后端,减少了外部组件的配置复杂性。
  3. 核心功能完善:

    • 提供代码仓库托管、分支管理、Pull Request(代码审查)等核心 Git 功能。
    • 包含问题跟踪、Wiki、项目管理看板等协作工具。
    • 支持 Webhooks 和内置的 CI/CD 功能(Forgejo Actions)。
    • 具备用户、组织和权限管理,以及 API 接口。
  4. 社区主导与开放治理:

    • 这是 Forgejo 的核心差异点。它由非营利组织 Codeberg 基金会支持,致力于确保项目决策的透明性和社区的独立性,避免被商业实体控制。
    • 明确坚持自由软件原则,吸引了重视项目治理和自由软件理念的用户及贡献者。
  5. 用户界面简洁直观:

    • 界面设计注重实用性,易于用户学习和使用。

部署

请先安装Docker环境, 以下教程以Debian GNU/Linux Bookworm为例

创建安装目录

1
2
mkdir -p /root/data/docker_data/forgejo
cd /root/data/docker_data/forgejo

创建Docker compose

1
touch docker-compose.yml

写入compose配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
networks:
  forgejo:
    external: false

services:
  server:
    image: codeberg.org/forgejo/forgejo:11
    container_name: forgejo
    environment:
      - USER_UID=1000
      - USER_GID=1000
    restart: always
    networks:
      - forgejo
    volumes:
      - ./forgejo:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - '3000:3000'
      - '222:22'

启动容器

1
docker compose up -d

容器启动后, Forgejo就算安装好了

反向代理

对Forgejo进行反向代理以为其增加HTTPS及复用80&443端口

Caddy

将以下内容加入Caddyfile即可, Caddy会自动处理HTTPS证书

1
2
3
git.example.com {
  reverse_proxy 127.0.0.1:3000
}

结语

Forgejo 是一个针对个人开发者、小型团队和资源受限环境的优秀自托管 Git 解决方案。其轻量级架构和易用性是显著优势。更重要的是,Forgejo 强调的社区驱动和开放治理模式,使其成为那些高度重视自由软件原则和项目独立性用户的理想选择。

项目地址: https://forgejo.org/

项目仓库: https://codeberg.org/forgejo/forgejo

项目文档: https://forgejo.org/docs/latest/