1.说在前面

Git私有库的搭建本身其实并不算什么困难的事情,但是在部署的过程中遇到的一些ssh问题确实让我踩坑花了点时间,趁着现在还记得清楚,这篇文章除了打算记录私有Git本地仓库的搭建,更是要记录一些ssh相关的的配置。
这次的本地Git搭建是基于Gitea来做的,作为一个轻量的DevOps平台,Gitea占用资源少,在用不到GitLab完整功能的情形下,很好用,也比原生Git更易于管理。
搭建所在的系统是Linux,用的是Unraid系统,其他系统应该也是大差不差。


2.Gitea安装部署

Gitea的部署十分简单,这里以在Unraid中使用docker的方式部署为例子来说明。
首先是Docker镜像的安装,进入Unraid的APP界面,在CA中搜索Gitea,选取一个版本后install即可,docker需要配置的东西并不多,需要注意要将SSH端口改成22以外的,因为22端口大多被屏蔽了,这里改成3022。

随后打开Gitea的WebUI界面,然后按照安装引导进行仓库的配置,因为配置时候没有截图,所以放上网上的配置连接:Gitea配置

3.SSH配置

首先,使用ssh的前提是需要在Gitea上配置好SSH密钥访问。
在客户端生成ssh公钥,windows的公钥一般在C:\Users\27697\.ssh文件夹下面,id_rsa.pub文件就是了,用记事本打开就能看见ssh公钥,然后Gitea的“设置->SSH/GPG密钥”中新增一个ssh密钥,将key复制进去即可。
更详细的SSH公钥生成和配置在这里不多做赘述,大体与Github的设置一致,两者可以用同一个ssh key不需要分开生成。

然后是这次搭建踩坑的第一个地方,首先在Gitea创建一个空仓库,仓库里面随便放点什么东西,Gitea仓库页面跟Github一样,提供了Code的Clone访问链接,但是ssh链接给的是:ssh://git@[Server-IP]:3022/[User]/[Repository].git,且先不说ssh://的前缀很多余的问题,实际上直接去拿git@[Server-IP]:3022/[User]/[Repository].gitClone也是拉不到代码的,因为正确的格式应该是git@[Server-IP]:[User]/[Repository].git,所以完整正确的ssh拉取的代码应该是:

1
git clone git@[Server-IP]:[User]/[Repository].git

另外,遇到的另一个问题是,用http的方式去clone Gitea仓库中的东西是没问题的:

1
git clone http://[Server-IP]:3000/[User]/[Repository].git
1
2
3
4
5
6
7
8
Cloning into '[Repository]'...
remote: Enumerating objects: 7412, done.
remote: Counting objects: 100% (7412/7412), done.
remote: Compressing objects: 100% (1076/1076), done.
remote: Total 7412 (delta 3240), reused 7412 (delta 3240), pack-reused 0Receivin

Receiving objects: 100% (7412/7412), 3.19 MiB | 57.29 MiB/s, done.
Resolving deltas: 100% (3240/3240), done.

但是如果说用SSH的方式去拉取仓库,就会出现问题网络问题,要么是链接不到仓库,要么就是端口问题,这是因为客户端(本机)ssh还需要配置,我是在windows环境下进行配置的,进入C:\Users\27697\.ssh,找到Config文件,如果没有就手动创建一个,并进行以下配置:

1
2
3
4
5
6
7
8
Host [Server-IP]
HostName [Server-IP]
User git
IdentityFile /c/Users/27697/.ssh/id_rsa ##指向ssh key文件
IdentitiesOnly yes

## 配置成之前设置的容器ssh映射端口
Port 3022

这样,就可以愉快的使用ssh来拉取私有库的Gitea代码了!

1
2
3
4
5
6
7
8
9
$ git clone git@[Server-IP]:[User]/[Repository].git
Cloning into '[Repository]'...
remote: Enumerating objects: 7412, done.
remote: Counting objects: 100% (7412/7412), done.
remote: Compressing objects: 100% (1076/1076), done.
remote: Total 7412 (delta 3240), reused 7412 (delta 3240), pack-reused 0
g objects: 89% (6597/7412)
Receiving objects: 100% (7412/7412), 3.19 MiB | 15.40 MiB/s, done.
Resolving deltas: 100% (3240/3240), done.