迁移 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 镜像

1
docker pull codeberg.org/forgejo/forgejo:9

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

1
docker pull code.forgejo.org/forgejo/forgejo:9

配置 docker-compose 文件

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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 是否存在:

1
cat /etc/timezone

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

1
2
3
4
# 创建文件
touch /etc/timezone
# 写入内容
echo 'Asia/Shanghai' > /etc/timezone

配置数据库

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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'

启动服务

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

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

相关链接


迁移 Gitlab 到 Forgejo
https://blog.pangcy.cn/2024/11/21/服务器运维/Git/迁移 Gitlab 到 Forgejo/
作者
子洋
发布于
2024年11月21日
许可协议