本文使用最新版本的宝塔面板、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

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

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

 1version: "2"
 2
 3services:
 4  server:
 5    image: gitea/gitea:1.20.5-rootless
 6    restart: always
 7    volumes:
 8      - ./data:/var/lib/gitea
 9      - ./config:/etc/gitea
10      - /etc/timezone:/etc/timezone:ro
11      - /etc/localtime:/etc/localtime:ro
12    ports:
13      - "3000:3000"
14      - "2222:2222"

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

1sudo 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 密钥下,添加公钥。

1cd
2mkdir -p .ssh
3
4#生成密钥对
5ssh-keygen -t rsa
6
7#查看公钥
8cat ~/.ssh/id_rsa.pub

测试仓库到客户端链接

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

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

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

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