使用群晖部署Gitea服务

之前一直使用GitHub进行代码管理,最近莫名觉得GitHub也不是100%可靠,所以就打算自建Git作为备用。简单调研了一下,决定在群晖NAS上部署Gitea作为轻量级的解决方案。

Gitea介绍

基本情况

Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证,根据官网介绍,具有开源化、已安装、跨平台和轻量级的优点。

image-20220522172346777

Gitea Docker镜像说明

Gitea 在其 Docker Hub 组织内提供自动更新的 Docker 镜像。可以始终使用最新的稳定标签或使用其他服务来更新 Docker 镜像。

使用Docker安装Gitea,最简单的是使用gitea/gitea:latest 镜像,然后创建一个持久卷用于保存数据。由于用户量不大,先使用SQLite3保存数据。

需要注意的是,持久卷需要由配置文件中指定的 UID/GID 的用户/组拥有,如果没有授予卷正确的权限,则容器可能无法启动。另外,标签 :latest 将安装当前的开发版本。

群晖安装Gitea

安装步骤

接下来在群晖上使用Docker来安装Gitea,而不是直接在群晖上安装Gitea的二进制文件,前提条件是已经安装启用了群晖的Docker套件。主要包括以下步骤:

  1. 从镜像库(翻译成了注册表…)下载官方镜像

    image-20220522225009788

  2. 配置容器的启动参数,包括环境变量、端口和存储空间

    需要注意的是:

    • GITEA_CUSTOM是在挂载的\data下面的路径;
    • USER_GID是为了使容器的user具有访问挂载卷的权限。

    image-20220522225159393

    image-20220522225241688

    image-20220522225413820

  3. 启动容器,这时候使用NAS的IP地址:映射3000的本地端口号,应该就可以正常启动Gitea了,然后修改群晖的防火墙规则,就可以正常访问了。

image-20220522225655681

Gitea容器访问挂载目录权限不足

由于在前面配置容器的时候,我们使用了宿主机的目录来保存数据,所以如果容器内运行Gitea的用户没有相应的权限的话,就会导致容器无法启动。查阅资料可知,这个问题并非孤例:

解决的办法有两个:

  • 修改挂载目录的属性,使用chmod 777 gitea-data/或者chown -R <UID>:<GID> gitea-data
  • 修改container的用户属性,使用USER_UIDUSER_GID指定。

根据Gitea的官方文档,关键在于USER_UIDUSER_GID两个环境变量(默认值以粗体显示):

  • USER_UID1000:在容器内运行 Gitea 的用户的 UID(Unix 用户 ID)。如果使用主机卷,则将其与 /data 卷的所有者的 UID 匹配(对于命名卷,则不需要这样做)。
  • USER_GID1000:在容器内运行 Gitea 的用户的 GID(Unix 组 ID)。如果使用主机卷,则将其与 /data 卷的所有者的 GID 匹配(对于命名卷,则不需要这样做)。

在实际使用的过程中,我发关键在于修改USER_GID,从默认的1000改为100即可

修改之后,我们可以分别在容器内和群晖主机上查看挂载目录的权限情况:

  • gitea容器内查看:

image-20220522204023984

  • 群晖主机上查看:

    image-20220522233009277

对比可以发现,容器内的用户gitUSER_UID还是默认的1000,但是用户组已经变成了users,这样应该就拥有了访问挂载目录的权限。

如果有发现不可以的,可以根据上面连接中提到的,修改USER_UID为1026试一下。

第三方套件安装Gitea

应用户的需求,终于有开发者提供了Gitea的第三方套件,参见:

不过这个套件目前的下载量为惊人的0,所以效果如何还不得而知,我想应该也是值得尝试一下的。

image-20220522204805267

Gitea自定义配置

启用SSL访问Gitea

首先考虑安全性的问题,启用HTTPS访问。

  1. 控制面板->系统->登录门户->高级->反向代理服务器中增加访问gitea的反向代理;image-20220522235019253

  2. 控制面板->连接性->安全性->证书添加域名的证书和密钥并设置其使用范围为1中添加的反向代理服务。

    image-20220522235623637

  3. 关闭防火墙中允许直接访问http端口的规则。

这样,我们就可以在不修改防火墙规则的前提下,使用HTTPS访问Gitea。

Gitea美化

我主要做了以下三件事情:

  • 替换logo
  • 修改首页
  • 增加主题

自定义配置的具体方法参见:

根据技术文档,在群晖中的文件目录下做相应修改即可。

image-20220523000141273

需要注意的是,现在的网站图表Favicon和页面主Logo被限定为同一个,这其实并不合理,Favicon一般很小是方的,主Logo则不一定,所以有开发者已经提了PR:

预计下个版本会调整,到时候可能会有不兼容的变化,值得关注。

修改首页

image-20220523000241115

替换主题

中文文档里没有,英文文档里有,具体步骤:

  1. $GITEA_PUBLIC/public/css/theme-<theme-name>.css目录下增加CSS文件,其中$GITEA_PUBLIC就是$GITEA_CUSTOM/public
  2. app.ini中增加theme-name,并以逗号隔开;
  3. awesome-gitea可以查到一些主题。

image-20220523000314990

重新启动容器,就可以看到相应的修改效果。

总结

我感觉Gitea和群晖都是不错的生产力工具,希望两者结合能够发挥更大的作用😺。

参考资料

  1. How to: gitea on synology
  2. Gitea as a third party package for Synology NAS
  3. https://docs.gitea.io/zh-cn/install-with-docker/

Nyantocat