前言
最近 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
文件。
注意:
- 映射 data 的那个 forgejo 目录一定要提前创建好,不然会报错。
- 要是碰到
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 是个挺明智的选择。
相关链接
- Forgejo 官网: forgejo.org/
- forgejo 官方安装教程:forgejo.org/docs/latest...