迁移 Gitlab 到 Forgejo

前言

最近 Nas 老是报内存不足,因为买的这个 Nas 型号不支持加内存条,就只有 8G 内存,应用一多跑起来就费劲,主要有些应用特别吃内存。就比如 Gitlab,它起步就得要 4G 内存,平时我访问的时候,动不动就加载半天,要不就来个文件夹读取错误,这使用体验太差了,所以我就寻思着得找个替代方案,从应用层面想想办法,给内存减减压。

Forgejo

Forgejo 最初是作为 Gitea 的"软分叉"出现的 (于2024 年初成为硬分叉) ,2022 年 10 月,Gitea 的域名和商标在社区不知情、未经社区批准的情况下被转让给一家营利性公司,Forgejo 在这一背景下作为一种替代方案而创建的,它在非营利组织 Codeberg eV 的保护下存在,并且是为了公众的利益而开发的。

为什么选择 Forgejo

常见的能自己部署的 Git 平台有不少,像 GitLab、Gitea、Gogs、OneDev、GitBucket、Gitblit 等等。我综合考虑了一番后,选了 Forgejo。我对平台的要求呢,首先功能得尽量全乎,像 Actions、看板、Wiki、Web hook 这些都得有,符合这一点的平台其实也有好几个。然后呢,UI 界面得好看点,这里面着重提一句 OneDev 的 UI 那是相当不错的。最后,也是很关键的一点,得足够轻量,毕竟我 Nas 内存有限。Forgejo 在这几方面综合起来看,就比较符合我的需求。

安装 Forgejo

Forgejo 给了两种安装方式,二进制安装包和 docker 安装。咱这儿主要讲讲 docker 的安装方法,二进制安装的话,去官网照着做就行。

安装镜像

使用 docker pull 命令安装 forgejo 镜像

bash 复制代码
docker pull codeberg.org/forgejo/forgejo:9

要是 codeberg.org 访问不了,别慌,还能用 code.forgejo.org 这个源:

bash 复制代码
docker pull code.forgejo.org/forgejo/forgejo:9

配置 docker-compose 文件

新建个 forjejo.yaml 文件,内容如下:

yaml 复制代码
networks:
  forgejo:
    external: false

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

注意映射 data 的 forgejo 目录需要提前创建出来,否则会报错。

如果出现 docker bind source path does not exist: /etc/timezone 错误,则需要检查宿主机是否包含 /etc/timezone 文件。

注意:

  1. 映射 data 的那个 forgejo 目录一定要提前创建好,不然会报错。
  2. 要是碰到 docker bind source path does not exist: /etc/timezone 这个错误,那就得检查下宿主机有没有 /etc/timezone 文件,如果没有就需要手动创建一个。

检查宿主机 /etc/timezone 是否存在:

bash 复制代码
cat /etc/timezone

要是真没有这个文件,那就手动建一个:

bash 复制代码
# 创建文件
touch /etc/timezone
# 写入内容
echo 'Asia/Shanghai' > /etc/timezone

配置数据库

Forgejo 默认用的是 sqLite 数据库,不过想换成 MySQL、PostgreSQL 也行。Forgejo 允许安装的时候一起装数据库,但是这样会从 docker hub 拉数据库镜像,如果服务器没有科学上网,可能就装不成功。我自己本来就有数据库,就不用它装新的了。要是同步安装数据库,在 docker-compose 文件里配置就行,不过不同数据库配置项不一样,真有需要就去官网瞅一眼。

下面讲讲咋连接已有的数据库,这个部分在官方文档中没有提到。

yaml 复制代码
networks:
  forgejo:
    external: false

services:
  server:
    image: codeberg.org/forgejo/forgejo:9
    container_name: forgejo
    environment:
      - USER_UID=1000
      - USER_GID=1000
      # 数据库类型
      - DB_TYPE=mysql
      # 数据库连接地址 (ip:port)
      - DB_HOST=127.0.0.1:3306
      # 数据库名称 (需要提前创建)
      - DB_NAME=forgejo
      # 数据库用户名
      - DB_USER=root
      # 数据库密码
      - DB_PASS="root"
    restart: always
    networks:
      - forgejo
    volumes:
      - ./forgejo:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - '3000:3000'
      - '222:22'

启动服务

配置都弄好后,就用这个命令启动服务:

bash 复制代码
docker-compose -f forgejo.yaml up -d

这样,Forgejo 服务就跑起来了,然后我们就能通过访问 127.0.0.1:3000 打开它的 web 页面。

配置 forgejo 系统

服务启动后访问 127.0.0.1:3000,就会看到 Forgejo 系统的配置页面。在这儿,我们可以根据自己的需求改一改设置。要是有些地方不太确定咋设置,也没关系,等安装完了,还能通过修改 app.ini 配置文件来调整。

配置完成后,点击立即安装,此时只要耐心等待安装完成即可。

修改 app.ini

当我们安装好 forgejo 以后,还可以在 <forge-data>/gitea/conf/api.ini 修改配置。

比如:应用名称、应用口号、服务端口、数据库连接信息等,修改后重启服务生效。

内存使用率对比

下面贴出 Gitlab 和 Forgejo 的 CPU 使用率和内存使用率占比,可以很明显的看出来 Forgejo 的资源消耗远比 Gitlab 轻量的多。

GitLab 内存使用率

内存使用率稳定在 2.9G 左右, CPU 使用率取的中间值也得有 26.8%

Forgejo 内存使用率

forgejo 内存使用率最高才 165MB, CPU 使用率也仅有 3.83%, 于 GitLab 完全不是一个量级。

结语

Gitlab 不光吃内存,对文档仓库(像存 word、excel 这些纯文档的仓库)处理得也不好。在 web 页面上,目录的元信息老是 loading,就是加载不出来最后更新时间和更新信息,有时候内存不够了,连目录都加载失败。但在 Forgejo 里,这些问题根本就没出现过,看起来我换 Forgejo 是个挺明智的选择。

相关链接

相关推荐
LV技术派3 小时前
这一年,收获很多,办了婚礼,还出了一门前端AI课
前端·程序员·ai编程
涡能增压发动积3 小时前
windows 系统安装 python 的最好方式也许就是不安装
后端
我叫张小白。3 小时前
Vue3 基本生命周期:组件的一生之旅
前端·javascript·vue.js·前端框架·vue3
GISer_Jing3 小时前
SSE Conf大会分享——UTOO WASM:AI时代的浏览器原生极速研发套件
前端·人工智能·架构·wasm
f***68603 小时前
Spring Boot 热部署
java·spring boot·后端
5***26223 小时前
Spring Boot实现定时任务
java·spring boot·后端
Y***98513 小时前
SpringBoot整合Email 邮件发送详解
java·spring boot·后端
Q***l6873 小时前
前端在移动端中的响应式设计
前端
i***11863 小时前
SpringBoot中使用TraceId进行日志追踪
spring boot·后端·状态模式
QH_ShareHub3 小时前
R 包中的生命周期触发函数全解析
前端·javascript·数据库