Gitea

Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证.


简介

Gitea 是一个自己托管的Git服务程序。他和GitHub, Bitbucket or Gitlab等比较类似。他是从 Gogs 发展而来,不过已经Fork并且命名为Gitea。

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

功能特性

  • 支持活动时间线
  • 支持 SSH 以及 HTTP/HTTPS 协议
  • 支持 SMTP、LDAP 和反向代理的用户认证
  • 支持反向代理子路径
  • 支持用户、组织和仓库管理系统
  • 支持添加和删除仓库协作者
  • 支持仓库和组织级别 Web 钩子(包括 Slack 集成)
  • 支持仓库 Git 钩子和部署密钥
  • 支持仓库工单(Issue)、合并请求(Pull Request)以及 Wiki
  • 支持迁移和镜像仓库以及它的 Wiki
  • 支持在线编辑仓库文件和 Wiki
  • 支持自定义源的 Gravatar 和 Federated Avatar
  • 支持邮件服务
  • 支持后台管理面板
  • 支持 MySQL、PostgreSQL、SQLite3、MSSQL 和 TiDB(MySQL) 数据库
  • 支持多语言本地化(21 种语言)
  • 支持软件包注册中心(Composer/Conan/Container/Generic/Helm/Maven/NPM/Nuget/PyPI/RubyGems)

系统要求

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

组件

软件及服务支持

Drone (CI)

安装

从二进制安装 所有下载均包括 SQLite, MySQL 和 PostgreSQL 的支持,同时所有资源均已嵌入到可执行程序中,这一点和老版本有所不同。 基于二进制的安装非常简单,只要从 下载页面 选择对应平台,拷贝下载URL,执行以下命令即可(以Linux为例):

$ wget -O gitea https://dl.gitea.io/gitea/1.16.8/gitea-1.16.8-linux-amd64
$ chmod +x gitea
$ mv gitea /usr/local/bin/

测试 在执行了以上步骤之后,你将会获得 gitea 的二进制文件,在你复制到部署的机器之前可以先测试一下。在命令行执行完后,你可以 Ctrl + C 关掉程序。

$ ./gitea web

创建用户 gitgitea 相应权限的配置和存储目录。

$ sudo adduser git
$ adduser \
   --system \
   --shell /bin/bash \
   --gecos 'Git Version Control' \
   --group \
   --disabled-password \
   --home /home/git \
   git

$ sudo mkdir /var/lib/gitea
$ sudo chown git:git /var/lib/gitea/

$ sudo mkdir /etc/gitea
$ sudo chown git:git /etc/gitea/

以服务方式运行

在 terminal 中执行以下命令:

$ sudo vim /etc/systemd/system/gitea.service

接着拷贝示例代码 gitea.service 并取消对任何需要运行在主机上的服务部分的注释,譬如 MySQL。

修改 user,home 目录以及其他必须的初始化参数,如果使用自定义端口,则需修改 PORT 参数,反之如果使用默认端口则需删除 -p 标记。

激活 gitea 并将它作为系统自启动服务:

$ sudo systemctl enable gitea
$ sudo systemctl start gitea

备份与恢复

# 备份 MySQL
mysqldump -u root --password='xxxxxx' giteadb > giteadb_bak.sql
# 恢复 MySQL
mysql --default-character-set=utf8mb4 -u$USER -p$PASS $DATABASE < giteadb_bak.sql
# 备份并恢复 Gitea 数据
unzip gitea-dump-1610949662.zip
cd gitea-dump-1610949662
mv data/conf/app.ini /etc/gitea/conf/app.ini
mv data/* /var/lib/gitea/data/
mv log/* /var/lib/gitea/log/
mv repos/* /var/lib/gitea/repositories/
chown -R gitea:gitea /etc/gitea/conf/app.ini /var/lib/gitea

参考资料: https://docs.gitea.com/zh-cn/administration/backup-and-restore

GitLab

开始时想自建 GitLab 服务的,但是 GitLab 占用太多资,而Gitea 资源占用明显要低得多。

静态硬盘占用上,Gitea 核心是一个 100 MiB 上下的可执行文件,外加上作为必要依赖的 Git(如果内置 SQLite 不够的话也需要单独部署一个 MySQL 或者 PostgreSQL 做数据库),而 GitLab 光 Docker image 大小就 GiB 级了,断断续续跑了两天,这日志就快 200MiB 了……

内存方面,我这里 Gitea 日常占用内存通常在几百 MiB 浮动,而 GitLab 的 Docker 容器目前内存占用是 14GiB。

GitLab CPU 占用率(相对于一个核心计算)日常待机在 35% 上下,而 Gitea 通常是 0.2% 左右。(这些都是不严谨的简单测试,现在已经改用 Gitea,懒得折腾了。)

https://docs.gitlab.com/ee/update/package/#upgrade-using-a-manually-downloaded-package

https://packages.gitlab.com/gitlab/gitlab-ce

https://www.jb51.net/article/194092.htm

https://zhuanlan.zhihu.com/p/486410391

参考资料

Gitea Docs