本文使用最新版本的宝塔面板、docker 环境、Nginx 用于反代、Debian 12

前言

为什么要自建 git 托管,众所周知在国内网络的环境的情况下,github 已经不能正常的使用,有时候会出现断联的情况。国内的很多都有条条框框的限制,基于这个需求,为什么不自建属于自己的 git 托管。

首先我尝试了:gitea、gitlab、gogs 这三款软件,综合性能分析,日常使用 Gitea 能满足我的需求,内存占用也低,也轻量化。

Gitea 简介

Gitea 的首要目标是创建一个极易安装,运行非常快速,安装和使用体验良好的自建 Git 服务。我们采用 Go 作为后端语言,这使我们只要生成一个可执行程序即可。并且他还支持跨平台,支持 Linux, macOS 和 Windows 以及各种架构,除了 x86,amd64,还包括 ARM 和 PowerPC。

官网文档地址:gitea DOCS

Gitea 安装

首先在官网上找到 Docker Compose 的安装方式。

gitea rootlessgitea版本区别,前者是通过 gitea 内部的 ssh 进行管理,后者通过 openSSH 进行管理。

文档地址:使用 Docker 安装 (rootless)

然后在宝塔上添加 docker 项目模板。如果是自行构建的也可以把新建的docker-compose.yml文件放在你想存放的目录下。

这里选择自行构建,先创建一个运行目录和docker-compose

1
2
3
mkdir -p gitea/{data,config}
cd gitea
vim docker-compose.yml

然后将以下内容粘贴到 docker-compose.yml 文件里面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
version: "2"

services:
server:
image: gitea/gitea:1.20.5-rootless
restart: always
volumes:
- ./data:/var/lib/gitea
- ./config:/etc/gitea
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "2222:2222"

赋予指定 docker 卷的用户/组,默认情况下,Docker 中的 Gitea 将使用 uid:1000 gid:1000。

1
sudo chown 1000:1000 config/ data/

然后进入刚刚创建的 gitea 的目录,检查目录下有没有docker-compose.yml文件。确认存在就启动。

  • docker-compose up -d: 拉起 docker-compose 所包含服务,并以守护进程方式运行
  • docker-compose restart: 重启 docker-compose 所有服务
  • docker-compose down: 关闭 docker-compose 所有服务
  • docker-compose logs -f : 查看运行日志

以上是不使用数据库,只使用 SQlite3 来运行,如果数据量不大情况下 SQlite3 完全可以胜任,如果是多人协作,那就选择数据库会更加好。
更多安装详情去官网文档就可以找到。

Gitea 使用

git 客户端以 ssh 的方式访问

创建客户端的密钥和公钥,然后在 gitea 的个人设置-SSH/GPG 密钥下,添加公钥。

1
2
3
4
5
6
7
8
cd
mkdir -p .ssh

#生成密钥对
ssh-keygen -t rsa

#查看公钥
cat ~/.ssh/id_rsa.pub

测试仓库到客户端链接

这里我自定义了 ssh 的端口所以要带上端口进行测试

1
2
3
4
ssh -T git@106.199.x.x -p 222
---------------------------------
Hi there, jun! You've successfully authenticated with the key named git@xx.com, but Gitea does not provide access.
If this is unexpected, please log in with password and setup Gitea under another user.

这样看起来就验证成功了,我们来拉取一个 git 库试试。仓库的 http/ssh 的地址可以在仓库页面右上角找到。

1
git clone ssh://git@106.199.x.x:222/Jun/test.git