Gitea

作为一名程序员,大家已经听过或者正在使用 Git,如果还不会使用的话,赶紧学习一下吧:

大家在使用 Git 的时候,如果想把代码备份到云端户或者与其他人共享,那么第一个想到的就是 Github 了。但 Github 也有一些不足之处,比如必须要联网,在局域网环境下就不能使用了。虽然现在 Github 放开了私有仓库的限制,但 Github 并不支持私有部署,有一些关键核心的代码并不想放到别人的服务器上,所以在某些情况下并不适合使用。

面对这种情况,很多人都会选择自建 Git 服务器。搭建 Git 服务器很简单,用 Linux + Git 就可以做到,但是想要一些附加功能,比如:用户和存储库管理、Issues 提交,版本发布等,就需要依赖第三方服务或软件。

支持私有部署的第三方的 Git 托管服务也有很多,比如:Gitlab CE / EEGogsGitea 等。

Gitlab 的功能是最丰富的,但是硬件需求实在是太高,没有 4G 内存根本跑不动(实际上有几个用户一起用 4G 根本不够用)。

Gogs 是由国人开发的软件,而 Gitea 是由开源爱好者维护的 Gogs 的分支,两个都是开源且免费的,至于为什么会有 Gitea 这个分支请看这里,另外,Gitea 在功能方面已经强于 Gogs,所以我们选择使用 Gitea 来搭建。

选择 Gitea 还有一个原因就是 Gitea 采用 Golang 开发,运行极快,资源占用率小且跨平台,部署也非常方便,下面是 Gitea 的官方文档中的介绍:

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

环境要求

Gitea 对系统的要求:

  • 最低的系统硬件要求为一个廉价的树莓派
  • 如果用于团队项目,建议使用 2 核 CPU 及 1GB 内存

Gitea 对软件的要求:

  • Gitea 本身使用 Golang 开发,部署只需要一个二进制文件,但 Git 还是要有的,不管是哪个系统平台,请先确保正确安装了 Git。

  • Gitea 支持多种数据库,如果你想要使用 MySQL、PostgreSQL 等需要提前搭建环境,但由于本文的目标旨在创建一个便携的 Git 服务,所以我们选择使用 SQLite 数据库,什么也不需要安装。

  • Gitea 还支持 Docker 部署,如果你需要使用 Docker 部署的话,请参考官方文档。

从二进制安装

首先从『下载页面』下载相应平台的二进制文件。

然后将二进制文件放到一个 合适 的路径,不要有中文,对目录要有写入权限,例如我使用的是 Linux 系统,我将其放在家目录下的 opt/gitea 中。

Gitea

然后就可以执行二进制文件运行了,Unix 环境需要在终端中运行。

1
sudo chmod +x ./gitea-linux && ./gitea-linux

Gitea 默认监听 3000 端口。

配置

在浏览器中打开 http://localhost:3000/install

数据库配置

我们选择 SQLite 数据库:

gitea-database-Settings.png

常规配置

这里需要注意,Gitea 会使用可执行程序绝对路径作为根路径,比如我的 Gitea 执行程序存放在 /home/i/opt/gitea/ 下,刚刚我们设置的 SQLite 数据库就会被存放到 /home/i/opt/gitea/data/ 目录下,常规配置中日志和 LFS 路径也都在此处,但 Repository Root Path 也就是仓库路径默认是在用户家目录下,为了达到前文所述的 便携 目的,我们将其也修改到根目录下的 data 目录,这样备份 Gitea 就直接打包 Gitea 目录下的 data 目录就 OK 了,是不是很方便。

另外,Gitea Base URL 也需要注意,如果你只是个人在自己的电脑上使用,那默认的 http://localhost:3000/ 就可以了,但如果你想要和别人共享,由于 localhost 指代本机,别人就不能通过局域网访问你的 Gitea 服务了,所以这里需指定一个域名,可以指定一个假的域名,其他人通过配置 hosts 文件就可以访问了,如果是在真实联网环境公开部署请填写真实的域名并配置 DNS 解析。这里我使用 gitea.test 作为测试域名。

gitea-general-settings.png

可选配置

如果你是在本地环境运行 Gitea,可以将 Enable Local Mode 勾选上,这样就不会链接外部资源了。

如果你是在公开环境下部署 Gitea,可能会需要配置邮箱服务器,这里我们不需要。

最后,你可以提前创建一个系统管理员账户,如果不再这里创建的话,第一个注册的用户将成为系统管理员。

gitea-optional-settings.png

安装

点击安装,你大概率会看到这样一个界面:

gitea-no-hosts.png

这是由于没有正确配置 hosts 文件造成的,电脑并不认识 gitea.test 这样一个域名对应的主机,如果你想要让其他人也访问你的 Gitea 服务的话,你需要先查看以下自己的 IP 地址:

Linux 查看 IP 地址命令:

1
ifconfig

Windows 查看 IP 地址命令:

1
ipconfig

比如我的局域网 IP 地址是 192.168.58.148(注:作为提供 Gitea 服务的电脑应该设置静态 IP)

然后局域网里的所有人包括自己需要修改自己的 hosts 文件,将 gitea.test192.168.58.148 这个 IP 进行关联。

如果还不清楚什么是 DNS 什么又是 hosts 以及如何修改 hosts 文件的话,请自行搜索。

备份

如果你按照上面的步骤搭建 Gitea 环境的话,你应该有如下目录结构:

gitea-backup.png

其中:

  • gitea-darwingitea-linuxgitea-win.exe 是不同平台的可执行程序。

  • custom 目录包含了一个 app.ini,之前我们在安装界面配置的选项,在这里都可以修改。

  • data 目录包含了所有的索引、数据库和远程的 Git 仓库。

  • log 目录是系统日志目录。

如果我们想要迁移至其他电脑或服务器上,可以将整个 gitea 目录打包带走,到其他电脑上修改 app.ini 中的所有路径和用户名,然后执行相应的可执行程序就 ok 了。

如果目标电脑有 Gitea 环境,那么我们只需要替换 data 目录就可以了。

如果使用第一种方式,需要修改 app.ini 中如下内容:

  • RUN_USER 为目标电脑用户名
  • PATH 为目标电脑 gitea 数据库路径
  • ROOT 为目标电脑仓库路径
  • LFS_CONTENT_PATH 为目标电脑 LFS 路径
  • ROOT_PATH 为目标电脑日志路径

其他选项根据自己需要修改

最后,迁移后需要使用管理员账户到后台管理面板同步一下 Hooks,否则可能不能提交。

gitea-hooks.png

其他

  1. Gitea 的路径可以配置为相对路径,这样迁移的时候就只需改用户名,但相对路径不支持作为服务运行。
  2. Gitea 可以作为服务运行,这样就可以开机自启动。
  3. 服务器部署的话可以使用 NginxCaddy 做反向代理。
  4. Gitea 可以连接 DroneCI 做持续集成。

以上这些功能的使用和配置包括其他 Gitea 的一些高级特性请移步 Gitea 官方文档