群晖在套件中心提供了 Git Server 套件,可以直接使用。如果需要类似 GitHub 和 GitLab 的功能可以通过 Docker 搭建 Gitea 服务。
Git Server
安装套件
打开套件中心,搜索并安装 Git Server:
准备工作
新增共享文件夹
打开控制面板,在“共享文件夹”一栏点击上面的“新增”,创建名为 gitlib
的共享文件夹:
新增用户
打开控制面板,在“用户与群组”一栏点击上面的“新增”,创建名为 dev
的用户:
无需在这里对 dev
用户设置目录的访问权限,因为后面会通过终端进行设置。
设置访问权限
打开 Git Server 套件,勾选允许 dev
用户访问:
开启家目录和SSH
初始化远程仓库
打开 Xshell 等终端,通过 SSH 访问 NAS 服务器:
1 | # 连接NAS |
使用Git Server
创建本地版本库
创建本地仓库,并进行一次提交:
1 | $ git init test.git |
推送到远程仓库
关联远程仓库,并进行一次推送:
1 | # 关联远程仓库 |
Gitea
Gitea 是一个自托管的 all-in-one 软件开发服务,类似于 GitHub 和 GitLab,提供了 Git 托管、代码审查、团队协作等功能。与 GitLab 相比,Gitea 占用的内存很低,非常适合在群晖 Docker 中使用。
下载镜像
打开群晖的 Container Manager,在注册表一栏搜索“gitea”,双击下载 gitea
镜像:
gitea 镜像的 Docker Hub 地址:https://hub.docker.com/r/gitea/gitea
准备工作目录
打开群晖的 File Station,创建目录 /volume3/docker/mygitea
,并该目录的读写权限设置为所有人。
创建容器
使用刚才下载好的镜像创建容器 mygitea
:
设置好端口和存储空间映射:
容器创建好后会自动运行。
初始化gitea
浏览器打开 http://192.168.31.2:30000 ,初始配置使用默认的即可:
耐心等待加载一分钟:
显示登录页。此时我们还没有账号,注册的第一个账号便是管理员:
登录后便可以使用了:
点击加号创建一个仓库,便会得到一个形如http://192.168.31.2:30000/sannaha/test.git
的地址:
推送代码时作为远程服务器填入便可以使用了。
免密
添加SSH密钥
点击右上角的头像,选择设置,在“SSH / GPG 密钥”一栏选择“增加密钥”,填入公钥中的内容,一般位于 C:\Users\<USERNAME>\.ssh\id_rsa.pub
:
如果是在 GitHub 上,完成这一步便可以免密推送代码了。但我们将关联的远程仓库地址换成 ssh 链接,会发现仍然要求我们输入密码:
1 | $ git remote set-url origin git@192.168.31.2:sannaha/test.git |
仔细观察 SSH 链接,就能注意到不对劲的地方:
网页提供的 SSH 链接不含端口信息,使用的是默认的 22 端口。而宿主机的 22
端口是被宿主机的 SSH 服务占用的,我们是用宿主机的 30022
端口映射到容器内部的 22
端口。使用 22
端口无法访问到容器,自然无法做到免密。
修改端口配置
但如果只是把 30022
端口加到 SSH 链接上,会发现仍然不行。其实还需要我们修改 gitea 中的配置文件中的 SSH 端口配置:
1 | - SSH_PORT = 22 |
修改后重启容器,会发现网页上的 SSH 链接自动加上了端口信息,此时用该链接能够实现免密推送:
参考资料
群晖知识中心-Git Server
在 Synology NAS 中搭建 Git Server
What is Gitea?
使用 Docker 安装gitea