云霞资讯网

Gitea企业级用法:容器化,SSO与对象存储

目前基于Git的开源仓库管理软件主要有Gitlab、Gitea、Gogs等,Gitea是一个基于Go语言开发的开源代码托

目前基于Git的开源仓库管理软件主要有Gitlab、Gitea、Gogs等,Gitea是一个基于Go语言开发的开源代码托管平台软件。

你还可以在Gitea官网 对比 Gitea 与其它 Git 托管工具[1] 查看不同开源项目的详细的差异。

对比 Gitea 与其它 Git 托管工具

我关注Gitea轻量、快速、极易上手的特点,以及有活跃的中文社区。搭建了一个基于Gitea的代码仓库,并配置了SSO,对象存储,邮箱等,可以访问 https://gitea.cncfstack.com 体验。

本文提供Gitea的安装与配置,包含以下内容:

准备数据库和证书

基于藏云阁镜像仓库快速安装Gitea

Gitea基础配置

配置对象存储用以保存Git仓库制品

基于邮箱服务配置邮件通知

基于Keycloak实现SSO统一登录

1. 准备数据库和证书

在使用 Gitea 前,您需要准备一个数据库和HTTPS证书。

数据库

Gitea 支持 PostgreSQL(>= 12)、MySQL(>= 8.0)、MariaDB(>= 10.4)、SQLite(内置) 和 MSSQL(>= 2012 SP4)这几种数据库。

HTTPS 证书

默认基于 HTTP 访问,为了保证安全建议添加HTTPS证书。

HTTPS合法证书也可以免费无限申请,可以参考文章:《永久免费的HTTPS/TLS通配符域名合法证书申请很简单,不要再自签证书啦[最佳实践]》

2. 基于藏云阁镜像仓库快速安装Gitea

本文使用使用的是 gitea:1.21.1 版本,如果需使用其他版本,请自行修改镜像版本(点击图片获取最新列表)。

Gitea镜像列表[2]

如下是启动服务的 docker-compose.yml 文件,修改数据库配置并创建 /data/gitea-data 目录后即可启动服务。

services:  gitea:    image: harbor.cncfstack.com/docker.io/gitea/gitea:1.21.1    container_name: gitea    networks:      - cncfstack    environment:      - USER_UID=1000      - USER_GID=1000      - GITEA__database__DB_TYPE=postgres      - GITEA__database__HOST=1.2.3.4:5432      - GITEA__database__NAME=gitea      - GITEA__database__USER=user001      - GITEA__database__PASSWD=pwd123      - TLSMinVersion=TLSv1.2    restart: always    volumes:      - /data/gitea-data/git:/data/git      - /data/gitea-data/gitea:/data/gitea      - /data/gitea-data/ssh:/data/ssh      - /etc/timezone:/etc/timezone:ro      - /etc/localtime:/etc/localtime:ro      - ./app.ini:/data/gitea/conf/app.ini:ro    ports:      - "3000:3000"      - "10022:22"    deploy:      resources:        limits:          cpus: '3'          memory: 4G

默认安装完成后通过 3000 端口访问Web界面,为了符合企业的实践,可以添加友好的域名以及HTTPS 证书配置。

可通过 Nginx 来进行代理,如下配置

server {    listen 443 ssl;    server_name gitea.cncfstack.com;    ssl_certificate /your/path/cncfstack.com_ecc/fullchain.cer;    ssl_certificate_key /your/path/cncfstack.com_ecc/cncfstack.com.key;    location / {        # 动态设置允许的Origin        if ($http_origin ~* (https://cncfstack.com|https://www.cncfstack.com)) {            add_header 'Access-Control-Allow-Origin' '$http_origin';            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';            add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';            add_header 'Access-Control-Allow-Credentials' 'true'; # 如果需要凭据            add_header 'Vary' 'Origin';        }        # 处理预检请求        if ($request_method = 'OPTIONS') {            add_header 'Access-Control-Allow-Origin' '$http_origin';            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';            add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization';            # 预检请求缓存时间,20天内无需再发送预检请求            add_header 'Access-Control-Max-Age' 1728000;            add_header 'Content-Type' 'text/plain; charset=utf-8';            add_header 'Content-Length' 0;            return 204;        }        proxy_pass   http://1.2.3.4:3000;        proxy_set_header Host $host;        proxy_set_header X-Real-IP $remote_addr;        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;        proxy_set_header X-Forwarded-Proto $scheme;    }}

注意 nginx 配置中证书路径需要调整为实际路径;并且proxy_pass后端服务实际地址根据实际修改。

3. Gitea基础配置

在 Docker Compose 的 Yaml 文件中,挂载了当前目录下 app.ini 配置文件,在这里可以详细配置Gitea。

基础配置内容:

注意这里的配置是针对 gitea 进程的配置,是在容器内的路径和端口,需要注意与docker挂载的路径和端口差异。

[server]APP_DATA_PATH = /data/giteaDOMAIN = gitea.cncfstack.comHTTP_PORT = 3000ROOT_URL = https://gitea.cncfstack.com/DISABLE_SSH = false#显示在克隆 URL 中的 SSH 端口SSH_PORT = 22# 内置 SSH 服务器的端口10022,通过 docker 映射为22SSH_LISTEN_PORT = 10022SSH_DOMAIN = gitea.cncfstack.comSTART_SSH_SERVER = true

4. 配置对象存储用以保存Git仓库制品

Git支持管理代码仓库的制品,这些制品由于持续的版本发布会生成很多的制品包文件,这些文件会消耗较多的磁盘存储空间。

特别是在进行一些开源项目仓库 Mirror 镜像的时候,比如etcd、Kuberentes这些代码仓库,会导致磁盘空间大量消耗。

为了降低磁盘空间的消耗和提升制品文件下载的性能,Gitea支持使用对象存储进行保存。S3兼容的对象存储如阿里云 OSS、腾讯云 COS、MinIO 等,都可以使用。

建议:对于代码文件建议放在文件存储或块存储中,经验证代码放在对象存储中的性能很差。

这里使用阿里云的OSS对象存储为例,配置如下

[storage]STORAGE_TYPE = minioMINIO_ENDPOINT = oss-cn-hangzhou-internal.aliyuncs.comMINIO_ACCESS_KEY_ID = ******************MINIO_SECRET_ACCESS_KEY = ******************MINIO_BUCKET = mybucketMINIO_LOCATION = cn-hangzhouMINIO_USE_SSL = trueMINIO_INSECURE_SKIP_VERIFY = falseSERVE_DIRECT = falseMINIO_BASE_PATH = /gitea-storage

配置完成后,启动服务后,自动将仓库制品保存到对象存储中。

在OSS中存储的文件是经过加密的,直接在OSS端是无法查看的,需要通过Gitea页面访问获取。

OSS文件列表5. 基于邮箱服务配置邮件通知

在进行账号创建时需要填写邮箱地址,开启邮件服务后,Gitea会发送邮件进行账号激活。

在后面密码忘记时,可以通过邮件发送验证码进行密码重置。

示例为基于企业微信邮箱的配置实例,只需要修改邮箱地址和密码信息即可

[mailer]ENABLED        = trueFROM           = auto@cncfstack.comPROTOCOL       = smtpsSMTP_ADDR      = smtp.exmail.qq.comSMTP_PORT      = 465USER           = auto@cncfstack.comPASSWD         = `****************`

FROM: 邮件发送的邮箱地址。就是在接受邮件时显示来源的邮箱地址

USER/PASSWD: 是用于登录邮箱系统的账号和密码

配置完成启动后,在 Gitea 管理后台 > 应用配置 > Mailer配置 可以看到配置信息

邮件配置

可以发送测试邮件,测试成功后,即可开始使用。

邮件测试6. 基于Keycloak实现Gitea SSO统一登录

配置 Gitea 基于 KeyCloak 登录需要有以下步骤

6.1. 在 KeyCloak 中创建一个客户端

6.2. 在 Gitea 配置 SSO 登录

6.3. 在 KeyClaok 中配置 Gitea 的回调地址

6.4. Gitea SSO 登录验证

6.1. 在 KeyCloak 中创建一个客户端

创建一个客户端, 如客户端ID为 gitea

对于“有效的重定向URI”在第三步填写完Gitea配置时获取的值,在创建Keycoak的客户端时还是未知。

在创建时或者创建后修改“功能配置”,开启客户端认证功能。

创建完成后,在“密钥”页面会生成一个 Client Secret,这个 Secret 需要在 Gitea 中配置。

6.2. 在 Gitea 配置 SSO 登录

在 KeyCloak 中配置 Gitea 的客户端后可以获取到以下信息:

Client ID

Client Secret

OpenID 连接自动发现URL(这个在realms创建时就是已经确定了,修改realms后可以尝试访问下)

通过这3条信息,访问 Gitea 的 SSO 配置页面 Gitea 管理后台 > 身份及认证 > 认证源 新建一条 OpenID Connect 认证源配置

配置参考如下(图片中的密钥和URL做了脱敏,根据实际情况修改即可)

默认的 Scopes 和 KeyCloak 是一致的,不需要修改。

6.3. 在 KeyClaok 中配置 Gitea 的回调地址

在Gitea信息填写完成后,会在底部的“帮组提示” 中显示”OAuth2认证“回调地址,这个地址需要配置到 KeyCloak 的回调地址中,即第一步的创建客户端时填写的“有效的重定向URI”。

这个回调地址和创建认证源时的“认证名称”有关,如果填写的是中文,就会出现转译的URL,不影响功能。

6.4. Gitea SSO 登录验证

Gitea 在进行登录时,会在登录页面提示一个 SSO 登录按钮 “使用XXXX登录”。

点击按钮后,会跳转到 KeyCloak 的登录页面,登录成功后,会返回 Gitea 的登录页面,并完成登录。

总结

恭喜你已经搭建好了一个可以满足企业基本使用的代码仓库服务了。

这里仅做了最基本的配置,后续可以根据自身需求进行扩展。Gitea 还提供了很多和 Github 类似的功能,比如制品托管,流水线,也可以通过插件配置 Gitea Page静态页面等等功能,可以根据需要进行功能探索配置。

在配置的过程中,如果遇到问题,可以加群进行技术交流。

引用链接

[1] 对比 Gitea 与其它 Git 托管工具: https://docs.gitea.com/zh-cn/1.24/installation/comparison[2] ![Gitea镜像列表](https://cncfstack.com/b/docs/2025/343-gitea%E4%BC%81%E4%B8%9A%E5%AE%9E%E8%B7%B5/gitea-image.png): https://cncfstack.com/i/docker.io/gitea/gitea