迁移 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 是个挺明智的选择。

相关链接

相关推荐
无忧无虑Coding1 分钟前
pyinstall 打包Django程序
后端·python·django
求积分不加C37 分钟前
Spring Boot中使用AOP和反射机制设计一个的幂等注解(两种持久化模式),简单易懂教程
java·spring boot·后端
枫叶_v1 小时前
【SpringBoot】26 实体映射工具(MapStruct)
java·spring boot·后端
2401_857617622 小时前
汽车资讯新趋势:Spring Boot技术解读
java·spring boot·后端
code_shenbing3 小时前
跨平台WPF框架Avalonia教程 三
前端·microsoft·ui·c#·wpf·跨平台·界面设计
小林学习编程3 小时前
从零开始理解Spring Security的认证与授权
java·后端·spring
写bug的羊羊3 小时前
Spring Boot整合Nacos启动时 Failed to rename context [nacos] as [xxx]
java·spring boot·后端
MengYiKeNan3 小时前
Git配置与使用
git
白臻3 小时前
使用element-plus el-table中使用el-image层级冲突table表格会覆盖预览的图片等问题
前端·vue.js·elementui
北极糊的狐3 小时前
vue使用List.forEach遍历集合元素
前端·javascript·vue.js