部署代码托管服务Forgejo

999 阅读4分钟

Forgejo简介

Forgejo 是一个轻量级的 DevOps 平台软件。从开发计划到产品成型的整个软件生命周期,他都能够高效而轻松的帮助团队和开发者。包括 Git 托管、代码审查、团队协作、软件包注册和 CI/CD。它与 GitHub、Bitbucket 和 GitLab 等比较类似。同时,它是Gitea的一个fork版本,并且将来会独立于Gitea成为一个真正免费开源的产品。

功能特性

  • 代码托管:Forgejo⽀持创建和管理仓库、浏览提交历史和代码⽂件、审查和合并代码提交、管理协作者、管理分⽀等。它还⽀持许多常见的Git特性,⽐如标签、Cherry-pick、hook、集成协作⼯具等。
  • 轻量级和快速: Forgejo 的设计目标之一就是轻量级和快速响应。它不像一些大型的代码托管平台那样臃肿,因此在性能方面表现出色,适用于资源有限的服务器环境。由于其轻量级设计,Forgejo 在资源消耗方面相对较低,可以在资源有限的环境下运行良好。
  • 易于部署和维护: 轻松地部署在各种服务器上,不需要复杂的配置和依赖。这使得个人开发者或小团队可以方便地设置和管理自己的 Git 服务。
  • 安全性: Forgejo 注重安全性,提供了用户权限管理、访问控制列表等功能,可以确保代码和数据的安全性。
  • 代码评审:代码评审同时支持 Pull Request workflow 和 AGit workflow。评审⼈可以在线浏览代码,并提交评审意见或问题。 提交者可以接收到评审意见,并在线回 复或修改代码。代码评审可以帮助用户和企业提⾼代码质量。
  • CI/CD: Forgejo Actions⽀持 CI/CD 功能,该功能兼容 GitHub Actions,⽤⼾可以采用熟悉的YAML格式编写workflows,也可以重⽤⼤量的已有的 Actions 插件。Actions 插件支持从任意的 Git 网站中下载。
  • 项目管理:Forgejo 通过看板和⼯单来跟踪⼀个项⽬的需求,功能和bug。⼯单⽀持分支,标签、⾥程碑、 指派、时间跟踪、到期时间、依赖关系等功能。
  • 制品库: Forgejo支持超过 20 种不同种类的公有或私有软件包管理,包括:Cargo, Chef, Composer, Conan, Conda, Container, Helm, Maven, npm, NuGet, Pub, PyPI, RubyGems, Vagrant等
  • 开源社区支持: Forgejo 是一个基于 MIT 许可证的开源项目,Forgejo 拥有一个活跃的开源社区,能够持续地进行开发和改进,同时也积极接受社区贡献,保持了平台的更新和创新。
  • 多语言支持: Forgejo 提供多种语言界面,适应全球范围内的用户,促进了国际化和本地化。

Forgejo和其他同类比较

Forgejo和GitLab、OneDev、Gogs的对比如下:

维度GitLab CEOneDevGogsForgejo
功能范围完整 DevOps一体化 DevOps基础代码托管完整DevOps
部署难度复杂中等简单简单
资源占用高(4 核4G+)低(1 核 2G)极低(1 核 1G)极低(1 核 1G)
CI/CD内置(需 YAML)图形化配置需第三方集成内置
适用场景中大型企业中小团队/国内用户个人/极简需求小/中型团队

这里我选择Forgejo的原因有以下三点:

  • 用Go语言编写的系统,性能高,使其资源占用低
  • 功能丰富且上手简单
  • 免费开源且社区非常活跃

创建Forgejo应用

在上篇文章中,我们部署了Dokploy,现在我们使用它快速的部署forgejo服务。

创建docker compose应用

修改下docker compose文件:

services:
  forgejo:
    image: codeberg.org/forgejo/forgejo:10
    container_name: forgejo
    environment:
      - USER_UID=${USER_UID}
      - USER_UID=${USER_UID}
      - HTTP_PORT=${HTTP_PORT}
      - FORGEJO__webhook__ALLOWED_HOST_LIST=${ALLOWED_HOST_LIST}
      - FORGEJO__database__DB_TYPE=postgres
      - FORGEJO__database__HOST=db:5432
      - FORGEJO__database__NAME=forgejo
      - FORGEJO__database__USER=forgejo
      - FORGEJO__database__PASSWD=forgejo
    restart: always
    ports:
      - "8100:8100"
      - "222:22"
    volumes:
      - /opt/forgejo/forgejo:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    depends_on:
      - db

  db:
    image: postgres:17
    restart: always
    environment:
      - POSTGRES_USER=forgejo
      - POSTGRES_PASSWORD=forgejo
      - POSTGRES_DB=forgejo

    volumes:
      - /opt/forgejo/forgejo_db:/var/lib/postgresql/data

配置下环境变量:

USER_UID=1000
USER_GID=1000
HTTP_PORT=8100
ALLOWED_HOST_LIST=*

设置好之后点击部署。

成功启动:

配置forgejo

打开web页面http://localhost:8100/进行配置:

可以设置禁用自主注册并创建一个管理员账号:

创建第一个仓库并推送代码

创建仓库并提交代码: