gitea介绍
官网
https://about.gitea.cn/
最近发现gitea的官网发生了变化,也不知道什么时候改了,之前的域名是gitea.io的,但是现在会跳转到about.gitea.cn域名上
可能是商业化了吧,但这也并不意味着 Gitea 就变成了商业软件。
Gitea 目前仍然是一个完全免费且开源的项目,任何人都可以自由地下载、使用、修改和分发。
Gitea 的源代码仍然托管在 GitHub 上,任何人都可以参与项目的开发和维护。
商业化应该也是为了确保 Gitea 项目的长期稳定发展和持续改进。
代码仓库 https://github.com/go-gitea/gitea
介绍
官网上说 “Gitea 是一个轻量级全功能的 DevSecOps 平台软件。从开发计划到产品成型的整个软件生命周期,他都能够高效而轻松的帮助团队和开发者。”
这也正是很多人选择的原因
Gitea 是一款使用 Golang 编写的可自运营的代码管理工具。
在这个领域,名气最响的应该是 Gitlab。
但实际使用中Gitlab也有点问题,首先就是资源占用。Gitlab 是使用 ruby 编写的,好几年之前刚出来的时候,一台1G内存的虚拟主机连安装运行都做不到,着实震惊。
时至今日都已经发展到了以docker镜像分发,gitlab 仍旧会有体积和运行时资源占用的问题。
另一点就是功能,对于一般标准团队来说,gitlab的功能太过于丰富,这是往好的地方说,往坏的地方说就是它包含了太多不需要的东西,而这些东西还占用磁盘和运行时资源。
当我们只是需要它具有版本管理的功能的时候,gitlab就太重了,所以很多开发在开发的时候会选择gitea这类非常轻量化的代码仓库
而且从开发计划到产品成型的整个软件生命周期,他都能够高效而轻松的帮助团队和开发者。
包括 Git 托管、代码审查、团队协作、软件包注册和 CI/CD。
Gitea 最初是从 Gogs 分支而来,目前几乎所有代码都已更改。
功能特性
-
代码托管:Gitea⽀持创建和管理仓库、浏览提交历史和代码⽂件、审查和合并代码提交、管理协作者、管理分⽀等。它还⽀持许多常见的Git特性,⽐如标签、Cherry-pick、hook、集成协作⼯具等。
-
轻量级和快速: Gitea 的设计目标之一就是轻量级和快速响应。它不像一些大型的代码托管平台那样臃肿,因此在性能方面表现出色,适用于资源有限的服务器环境。由于其轻量级设计,Gitea 在资源消耗方面相对较低,可以在资源有限的环境下运行良好。
-
易于部署和维护: 轻松地部署在各种服务器上,不需要复杂的配置和依赖。这使得个人开发者或小团队可以方便地设置和管理自己的 Git 服务。
-
安全性: Gitea 注重安全性,提供了用户权限管理、访问控制列表等功能,可以确保代码和数据的安全性。
-
代码评审:代码评审同时支持 Pull Request workflow 和 AGit workflow。评审⼈可以在线浏览代码,并提交评审意见或问题。 提交者可以接收到评审意见,并在线回 复或修改代码。代码评审可以帮助用户和企业提⾼代码质量。
-
CI/CD: Gitea Actions⽀持 CI/CD 功能,该功能兼容 GitHub Actions,⽤⼾可以采用熟悉的YAML格式编写workflows,也可以重⽤⼤量的已有的 Actions 插件。Actions 插件支持从任意的 Git 网站中下载。
-
项目管理:Gitea 通过看板和⼯单来跟踪⼀个项⽬的需求,功能和bug。⼯单⽀持分支,标签、⾥程碑、 指派、时间跟踪、到期时间、依赖关系等功能。
-
制品库: Gitea支持超过 20 种不同种类的公有或私有软件包管理,包括:Cargo, Chef, Composer, Conan, Conda, Container, Helm, Maven, npm, NuGet, Pub, PyPI, RubyGems, Vagrant等
-
开源社区支持: Gitea 是一个基于 MIT 许可证的开源项目,Gitea 拥有一个活跃的开源社区,能够持续地进行开发和改进,同时也积极接受社区贡献,保持了平台的更新和创新。
-
多语言支持: Gitea 提供多种语言界面,适应全球范围内的用户,促进了国际化和本地化。
更多功能特性:详见:https://docs.gitea.cn/installation/comparison#general-features
系统要求
- 树莓派Pi3功能强大,足以运行 Gitea 来处理小型工作负载。
- 对于小型团队/项目而言,2 个 CPU 内核和 1GB 内存通常就足够了。
- 在 UNIX 系统上,Gitea 应使用专用的非 root 系统账户运行。
- 注意:Gitea 管理 ~/.ssh/authorized_keys 文件。以普通用户身份运行 Gitea 可能会破坏该用户的登录能力。
- Git 需要 2.0.0 或更高版本。
- Git Large File Storage 如果启用,且 Git 版本大于等于 2.1.2,则该选项可用
- 如果 Git 版本大于等于 2.18,将自动启用 Git 提交历史图形化展示功能
对比 Gitea 与其它 Git 托管工具
与其他代码仓库的对比可以参考官网的相关信息
https://docs.gitea.cn/installation/comparison#主要特性
安装部署
docker compose部署
环境
系统 | docker版本 | docker-compose版本 | gitea版本 | 数据库 |
---|---|---|---|---|
ubuntu 22.04 | 24.0.4 | v2.19.1 | 1.21.1 | mysql 8.0 |
docker compose资源清单文件
version: "3"networks:gitea:external: falseservices:server:image: gitea/gitea:1.21.1container_name: giteaenvironment:- USER_UID=1000- USER_GID=1000- GITEA__database__DB_TYPE=mysql- GITEA__database__HOST=db:3306- GITEA__database__NAME=gitea- GITEA__database__USER=gitea- GITEA__database__PASSWD=gitea# 一定要设置好下面的两个环境变量,如果不设置好,使用的时候可能ssh克隆的时候会有问题- SSH_PORT=20022- SSH_LISTEN_PORT=22# 设置应用程序名称,在页面标题中使用.- APP_NAME="这里是标题"restart: alwaysnetworks:- giteavolumes:- ./gitea:/data- /etc/timezone:/etc/timezone:ro- /etc/localtime:/etc/localtime:roports:- "30000:3000"- "20022:22"depends_on:- dbdb:image: mysql:8.0restart: alwaysenvironment:- MYSQL_ROOT_PASSWORD=gitea- MYSQL_USER=gitea- MYSQL_PASSWORD=gitea- MYSQL_DATABASE=giteanetworks:- giteacommand:- --default-authentication-plugin=mysql_native_password- --character-set-server=utf8- --collation-server=utf8_binvolumes:- ./mysql:/var/lib/mysql
这里需要注意的是设置环境变量
SSH_PORT
是克隆 URL 中显示的 SSH 端口。
SSH_LISTEN_PORT
内置 SSH 服务器的端口
建议最好明确指定,而且如果指定,必须两个同时指定
因为SSH_PORT
的默认值是22 而SSH_LISTEN_PORT
的默认值是%(SSH_PORT)s
也就是引用的SSH_PORT
的值
当然,也可以只指定SSH_PORT
,然后在端口映射的时候将映射的端口改成 容器内外的都是指定的 SSH_PORT 值
相关环境变量参数
可以通过环境变量配置 Gitea 的一些设置:
(默认值以粗体显示)
APP_NAME
:“Gitea: Git with a cup of tea”:应用程序名称,在页面标题中使用。RUN_MODE
:prod:应用程序运行模式,会影响性能和调试。"dev","prod"或"test"。DOMAIN
:localhost:此服务器的域名,用于 Gitea UI 中显示的 http 克隆 URL。SSH_DOMAIN
:localhost:该服务器的域名,用于 Gitea UI 中显示的 ssh 克隆 URL。如果启用了安装页面,则 SSH 域服务器将采用以下形式的 DOMAIN 值(保存时将覆盖此设置)。SSH_PORT
:22:克隆 URL 中显示的 SSH 端口。SSH_LISTEN_PORT
:%(SSH_PORT)s:内置 SSH 服务器的端口。DISABLE_SSH
:false:如果不可用,请禁用 SSH 功能。如果要禁用 SSH 功能,则在安装 Gitea 时应将 SSH 端口设置为 0。HTTP_PORT
:3000:HTTP 监听端口。ROOT_URL
:"":覆盖自动生成的公共 URL。如果内部 URL 和外部 URL 不匹配(例如在 Docker 中),这很有用。LFS_START_SERVER
:false:启用 git-lfs 支持。DB_TYPE
:sqlite3:正在使用的数据库类型[mysql,postgres,mssql,sqlite3]。DB_HOST
:localhost:3306:数据库主机地址和端口。DB_NAME
:gitea:数据库名称。DB_USER
:root:数据库用户名。DB_PASSWD
:"empty" :数据库用户密码。如果您在密码中使用特殊字符,请使用“您的密码”进行引用。INSTALL_LOCK
:false:禁止访问安装页面。SECRET_KEY
:"" :全局密钥。这应该更改。如果它具有一个值并且 INSTALL_LOCK 为空,则 INSTALL_LOCK 将自动设置为 true。DISABLE_REGISTRATION
:false:禁用注册,之后只有管理员才能为用户创建帐户。REQUIRE_SIGNIN_VIEW
:false:启用此选项可强制用户登录以查看任何页面。USER_UID
:1000:在容器内运行 Gitea 的用户的 UID(Unix 用户 ID)。如果使用主机卷,则将其与 /data 卷的所有者的 UID 匹配(对于命名卷,则不需要这样做)。USER_GID
:1000:在容器内运行 Gitea 的用户的 GID(Unix 组 ID)。如果使用主机卷,则将其与 /data 卷的所有者的 GID 匹配(对于命名卷,则不需要这样做)。
使用环境变量管理部署
上面的那些变量是可以直接引用的环境变量
但是并不全面,app.ini
中的任何设置都可以使用以下形式的环境变量进行设置或覆盖:GITEA__SECTION_NAME__KEY_NAME
。
每次 docker 容器启动时都会应用这些设置。
例如
在 app.ini
中数据库的配置上是
[database]
PATH = /data/gitea/gitea.db
DB_TYPE = mysql
HOST = db:3306
NAME = gitea
USER = gitea
PASSWD = gitea
LOG_SQL = false
SCHEMA =
SSL_MODE = disable
那么我们的环境变量就可以配置成
...
services:server:environment:- GITEA__database__DB_TYPE=mysql- GITEA__database__HOST=db:3306- GITEA__database__NAME=gitea- GITEA__database__USER=gitea- GITEA__database__PASSWD=gitea
如果我们希望修改邮箱
在 app.ini
中邮箱的配置上是
[mailer]
ENABLED = true
SMTP_ADDR = smtp.xxx.com
SMTP_PORT = 465
FROM = xxx@xxx.com
USER = xxx@xxx.com
PASSWD = xxxxxxxxx
那么我们的yaml文件就可以写成
...
services:server:environment:- GITEA__mailer__SMTP_ADDR=smtp.xxx.com- GITEA__mailer__SMTP_PORT=465- GITEA__mailer__FROM=xxx@xxx.com- GITEA__mailer__USER=xxx@xxx.com- GITEA__mailer__PASSWD=xxxxxxxxx
Gitea 将为每次新安装自动生成新的 SECRET_KEY
并将它们写入 app.ini
。
如果您想手动设置 SECRET_KEY
,您可以使用以下 docker 命令来使用 Gitea
内置的方法生成 SECRET_KEY
。
安装后请妥善保管您的 SECRET_KEY
,如若丢失则无法解密已加密的数据。
以下命令将向 stdout 输出一个新的 SECRET_KEY
和 INTERNAL_TOKEN
,然后您可以将其放入环境变量中。
docker run -it --rm gitea/gitea:1.21.1 gitea generate secret SECRET_KEY
docker run -it --rm gitea/gitea:1.21.1 gitea generate secret INTERNAL_TOKEN
设置成环境变量
...
services:server:environment:- GITEA__security__SECRET_KEY=[generate secret SECRET_KEY执行的返回值]- GITEA__security__INTERNAL_TOKEN=[generate secret INTERNAL_TOKEN 执行的返回值]
运行
docker compose up -d
二进制方式安装
前提是需要准备好数据库 需要准备好数据库以及创建拥有权限的用户
所有打包的二进制程序均包含 SQLite,MySQL 和 PostgreSQL 的数据库连接支持,同时网站的静态资源均已嵌入到可执行程序中,这一点和曾经的 Gogs 有所不同。
下载
https://dl.gitea.com/gitea/
选择适合的版本
这里以64-bit 的 Intel/AMD 平台 的Linux为例
wget -O gitea https://dl.gitea.com/gitea/1.21.1/gitea-1.21.1-linux-amd64
chmod +x gitea
验证GPG签名
Gitea 对打包的二进制文件使用 GPG密钥 签名以防止篡改。 请根据对应文件名 .asc 中包含的校验码检验文件的一致性。
gpg --keyserver keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
gpg --verify gitea-1.21.1-linux-amd64.asc gitea-1.21.1-linux-amd64
校验正确时的信息为 Good signature from "Teabot <teabot@gitea.io>"
。
校验错误时的信息为 This key is not certified with a trusted signature!
。
准备环境
检查是否安装 Git。要求 Git 版本 >= 2.0
。
git --version
创建用户(推荐使用名称 git
)
# On Ubuntu/Debian:
adduser \--system \--shell /bin/bash \--gecos 'Git Version Control' \--group \--disabled-password \--home /home/git \git# On Fedora/RHEL/CentOS:
groupadd --system git
adduser \--system \--shell /bin/bash \--comment 'Git Version Control' \--gid git \--home-dir /home/git \--create-home \git
创建工作路径
mkdir -p /var/lib/gitea/{custom,data,log}
chown -R git:git /var/lib/gitea/
chmod -R 750 /var/lib/gitea/
mkdir /etc/gitea
chown root:git /etc/gitea
chmod 770 /etc/gitea
注意: 为了让 Web 安装程序可以写入配置文件,我们临时为
/etc/gitea
路径授予了组外用户git
写入权限。建议在安装结束后将配置文件的权限设置为只读。chmod 750 /etc/gitea chmod 640 /etc/gitea/app.ini
如果不希望通过 Web 安装程序创建配置文件,可以将配置文件设置为仅供 Gitea 用户只读( owner/group root:git
, mode 0640
)并手工创建配置文件:
- 设置
INSTALL_LOCK=true
关闭安装界面 - 手动配置数据库连接参数
- 使用
gitea generate secret
创建SECRET_KEY
和INTERNAL_TOKEN
- 提供所有必要的密钥
获取密钥的方式可以参考官方文档的命令
https://docs.gitea.cn/administration/command-line/#generate
配置 Gitea 工作路径
提示: 如果使用 Systemd 管理 Gitea 的 Linux 服务,你可以采用 WorkingDirectory
参数来配置工作路径。 否则,使用环境变量 GITEA_WORK_DIR
来明确指出程序工作和数据存放路径。
export GITEA_WORK_DIR=/var/lib/gitea/
复制二进制文件到全局位置
cp gitea /usr/local/bin/gitea
添加 bash/zsh 自动补全(从 1.19 版本开始)
可以在 contrib/autocompletion/bash_autocomplete
找到启用 bash 自动补全的脚本。可以将其复制到 /usr/share/bash-completion/completions/gitea
,或在 .bashrc
中引用。
同样地,zsh 自动补全的脚本可以在 contrib/autocompletion/zsh_autocomplete
找到。您可以将其复制到 /usr/share/zsh/_gitea
,或在您的 .zshrc
中引用。
运行 Gitea
1. 创建服务自动启动 Gitea(推荐)
使用systemd 管理
2. 通过命令行终端运行
GITEA_WORK_DIR=/var/lib/gitea/ /usr/local/bin/gitea web -c /etc/gitea/app.ini
安装界面
这里以docker compose部署的为例
访问 本机的30000端口,因为映射的端口是30000
设置数据库
不要修改,因为这些参数是在docker compose资源清单文件中设置的,数据库初始化就是新建的这个用户和密码
如果修改了,也需要在mysql数据库中新建对应的用户并给权限
参考命令
SET old_passwords=0;
-- 创建用户
CREATE USER 'gitea'@'192.0.2.10' IDENTIFIED BY 'gitea';-- 创建数据库
CREATE DATABASE giteadb CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci';-- 授权
GRANT ALL PRIVILEGES ON giteadb.* TO 'gitea'@'192.0.2.10';
FLUSH PRIVILEGES;
设置网站相关
这里端口部分一定不要改动,因为在容器的映射端口已经设置好了,在这里改动,就无法正常访问了,所以如果是容器部署的话,这里的端口一定不要动
邮箱部分的配置
其他的一些配置
管理员账号的设置
注意这里不能使用admin账户,会提示禁止使用
最后点击立即安装
界面
首页
登录后的首页
后台管理页
个人主页
swagger API的页面
需要访问 /api/swagger 例如我这里 http://10.0.0.200:30000/api/swagger