使用群晖部署Gitea服务
之前一直使用GitHub进行代码管理,最近莫名觉得GitHub也不是100%可靠,所以就打算自建Git作为备用。简单调研了一下,决定在群晖NAS上部署Gitea作为轻量级的解决方案。
Gitea介绍
基本情况
Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证,根据官网介绍,具有开源化、已安装、跨平台和轻量级的优点。
Gitea Docker镜像说明
Gitea 在其 Docker Hub 组织内提供自动更新的 Docker 镜像。可以始终使用最新的稳定标签或使用其他服务来更新 Docker 镜像。
使用Docker安装Gitea,最简单的是使用gitea/gitea:latest
镜像,然后创建一个持久卷用于保存数据。由于用户量不大,先使用SQLite3保存数据。
需要注意的是,持久卷需要由配置文件中指定的 UID/GID 的用户/组拥有,如果没有授予卷正确的权限,则容器可能无法启动。另外,标签 :latest
将安装当前的开发版本。
群晖安装Gitea
安装步骤
接下来在群晖上使用Docker来安装Gitea,而不是直接在群晖上安装Gitea的二进制文件,前提条件是已经安装启用了群晖的Docker套件。主要包括以下步骤:
-
从镜像库(翻译成了注册表…)下载官方镜像
-
配置容器的启动参数,包括环境变量、端口和存储空间
需要注意的是:
GITEA_CUSTOM
是在挂载的\data
下面的路径;USER_GID
是为了使容器的user具有访问挂载卷的权限。
-
启动容器,这时候使用
NAS的IP地址:映射3000的本地端口号
,应该就可以正常启动Gitea了,然后修改群晖的防火墙规则,就可以正常访问了。
Gitea容器访问挂载目录权限不足
由于在前面配置容器的时候,我们使用了宿主机的目录来保存数据,所以如果容器内运行Gitea的用户没有相应的权限的话,就会导致容器无法启动。查阅资料可知,这个问题并非孤例:
- https://github.com/go-gitea/gitea/issues/6130
- https://github.com/go-gitea/gitea/pull/6415
- https://discourse.gitea.io/t/gitea-in-docker-container-ignores-user-gid/3488
- https://www.reddit.com/r/synology/comments/3upmla/linux_user_accounts_and_permissions/
- https://www.reddit.com/r/docker/comments/75o5ls/dockerized_gogs_on_synology_ds_permission_errors/
- https://www.reddit.com/r/homelab/comments/8g935f/dockerized_gogsgitea_on_synology_nas_with_mounted/
解决的办法有两个:
- 修改挂载目录的属性,使用
chmod 777 gitea-data/
或者chown -R <UID>:<GID> gitea-data
- 修改container的用户属性,使用
USER_UID
和USER_GID
指定。
根据Gitea的官方文档,关键在于USER_UID
和USER_GID
两个环境变量(默认值以粗体显示):
USER_UID
:1000:在容器内运行 Gitea 的用户的 UID(Unix 用户 ID)。如果使用主机卷,则将其与/data
卷的所有者的 UID 匹配(对于命名卷,则不需要这样做)。USER_GID
:1000:在容器内运行 Gitea 的用户的 GID(Unix 组 ID)。如果使用主机卷,则将其与/data
卷的所有者的 GID 匹配(对于命名卷,则不需要这样做)。
在实际使用的过程中,我发关键在于修改USER_GID,从默认的1000改为100即可。
修改之后,我们可以分别在容器内和群晖主机上查看挂载目录的权限情况:
- gitea容器内查看:
-
群晖主机上查看:
对比可以发现,容器内的用户git
的USER_UID
还是默认的1000,但是用户组已经变成了users
,这样应该就拥有了访问挂载目录的权限。
如果有发现不可以的,可以根据上面连接中提到的,修改USER_UID
为1026试一下。
第三方套件安装Gitea
应用户的需求,终于有开发者提供了Gitea的第三方套件,参见:
不过这个套件目前的下载量为惊人的0,所以效果如何还不得而知,我想应该也是值得尝试一下的。
Gitea自定义配置
启用SSL访问Gitea
首先考虑安全性的问题,启用HTTPS访问。
-
在
控制面板->系统->登录门户->高级->反向代理服务器
中增加访问gitea的反向代理; -
在
控制面板->连接性->安全性->证书
添加域名的证书和密钥并设置其使用范围为1中添加的反向代理服务。 -
关闭防火墙中允许直接访问http端口的规则。
这样,我们就可以在不修改防火墙规则的前提下,使用HTTPS访问Gitea。
Gitea美化
我主要做了以下三件事情:
- 替换logo
- 修改首页
- 增加主题
自定义配置的具体方法参见:
根据技术文档,在群晖中的文件目录下做相应修改即可。
替换logo
需要注意的是,现在的网站图表Favicon和页面主Logo被限定为同一个,这其实并不合理,Favicon一般很小是方的,主Logo则不一定,所以有开发者已经提了PR:
预计下个版本会调整,到时候可能会有不兼容的变化,值得关注。
修改首页
替换主题
中文文档里没有,英文文档里有,具体步骤:
- 在
$GITEA_PUBLIC/public/css/theme-<theme-name>.css
目录下增加CSS文件,其中$GITEA_PUBLIC
就是$GITEA_CUSTOM/public
; - 在
app.ini
中增加theme-name
,并以逗号隔开; - 在awesome-gitea可以查到一些主题。
重新启动容器,就可以看到相应的修改效果。
总结
我感觉Gitea和群晖都是不错的生产力工具,希望两者结合能够发挥更大的作用😺。