Gitea - современный легковесный self-hosted git сервис

Вступление
Gitea Gitea - это удобный, современный и самостоятельно размещаемый сервис для разработки программного обеспечения. Он включает в себя хостинг Git, обзор кода, совместную работу команд, реестр пакетов и CI/CD. Подобно GitHub, Bitbucket и GitLab, Gitea предлагает полный набор инструментов для разработки и управления кодом.
Основное преимущество Gitea заключается в его легковесности и простом интерфейсе. В нем доступны все необходимые функции, такие как отслеживание задач, pull-запросы, обзор кода и вики-страницы. Особенно стоит отметить поддержку различных методов аутентификации, включая OAuth, LDAP и двухфакторную аутентификацию.
Одним из ключевых преимуществ Gitea является возможность самостоятельного размещения, что позволяет пользователям устанавливать его на собственные серверы. Это обеспечивает полный контроль над данными и повышенную безопасность, что особенно важно для организаций, стремящихся защитить конфиденциальность своего кода.
В итоге, Gitea предоставляет мощные возможности управления Git через простой интерфейс, обширные функции и гибкость самостоятельного размещения, обеспечивая как удобство использования, так и высокий уровень безопасности и контроля над данными.
Развёртывание инфраструктуры
В данном руководстве мы будем использовать Docker compose как платформу для построения инфраструктуры. Мы развернём следущие компоненты: Gitea server (gitea/gitea), Postgres 14 (postgres:14) и Gitea Act runner (gitea/act_runner). В добавок мы настроим Microsoft EntraID аутентификацию.
Все необходимые файлы можно найти здесь
Стркутра демо:
..
|-- docker-compose.core.yaml
|-- docker-compose.act_runner.yaml
|-- act_runner.env
|-- gitea.env
|-- pgsql.env
Установка Gitea сервера
Создайте папку проекта и скопируйти демоо файлы из репозитория
Удобным способом создайте папки data и gitea
Определите переменные в pgsql.env
pgsql.env
POSTGRES_USER=gitea
POSTGRES_DB=gitea
POSTGRES_PASSWORD=GiTEA123
- Отредактируйте gitea.env и задайте переменные
gitea.env
USER_UID=1000
USER_GID=1000
GITEA__database__DB_TYPE=postgres
GITEA__database__HOST=gitea-pgsql:5432
GITEA__database__NAME=gitea
GITEA__database__USER=gitea
GITEA__database__PASSWD=GiTEA123
- Выполните
docker compose -f ./docker-compose.core.yaml up -d, чтобы развернуть Gitea сервер
docker-compose.core.yaml
name: gitea-demo
services:
db:
container_name: gitea-pgsql
image: postgres:14
restart: always
env_file:
- pgsql.env
networks:
- gitea
volumes:
- postgres-db-volume:/var/lib/postgresql/data
server:
container_name: gitea-server
image: gitea/gitea
restart: always
env_file:
- gitea.env
networks:
- gitea
volumes:
- ./gitea:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "22:22"
depends_on:
- db
volumes:
postgres-db-volume:
networks:
gitea:
name: gitea-net
Обратите внимание, что будут открыты порты 3000/TCP и 22/TCP, но вы свободно можете изменить их, внеся изменеия в файл docker-compose.core.yaml. Кроме того, не забудьте добавить эти порты в разрещения в вашем брандмауэре.

Подготовка Act_runner (Gitea агент)
Функционал Gitea включает Gitea Actions, встроенное CI/CD решение котоое запускается на агенте Act_runner. В этом разделе мы только подготовим Act_runner в Docker контейнере, а развернём его после настройки Gitea сервера и генерации токена.
Сгенерируйте файл config.yaml, выполнив команду
docker run --entrypoint="" --rm -it gitea/act_runner act_runner generate-config > config.yamlв контекте вашей проектной папки.Проверьте и отредактируйте параметры агента в файле act_runner.env
act_runner.env
CONFIG_FILE="/config.yaml"
GITEA_INSTANCE_URL="http://gitea-server:3000"
GITEA_RUNNER_REGISTRATION_TOKEN="SET_AFTER_SERVER_IS CONFIGURED"
GITEA_RUNNER_NAME="main_runner"
GITEA_RUNNER_LABELS="gitea-demo:runner"
Обязательно добавьте раздел /var/run/docker.sock:/var/run/docker.sock чтобы полноценно запускать агент, развёрнутый в Docker.
docker-compose.act_runner.yaml
name: gitea-ar
services:
runner:
image: gitea/act_runner
container_name: gitea-ar
env_file:
- ./act_runner.env
volumes:
- ./config.yaml:/config.yaml
- ./data:/data
- /var/run/docker.sock:/var/run/docker.sock
networks:
- gitea
networks:
gitea:
name: gitea-net
external: true
Конфигурирвание Gitea
Для завершения установки перейдите н страницу Gitea сервера


В разделе Administrator Account Setting заполните требуемые поля и нажмите Install Gitea

Создание организации
- Перейдите в раздел Site Administration

- В секции Identity & Access выберите Organizations и кликните New Organization

- Впишите название организации в поле Organization Name (gitea-demo-organization), определите Visibility и нажмите Create Organization

Создание тимы
- На странице созданной организации нажмите View ORG_NAME

- Используя кнопку New Team создайте две тимы gitea-demo-readers и gitea-demo-contributors


Установка Act_runner
- Перед установкой агента act_runner перейдите в раздел Site Administration -> Actions -> Runner, нажмите Create new runner и скопируйте токен.

- Добавьте токен в файл настроек act_runner.env, как значение параметра GITEA_RUNNER_REGISTRATION_TOKEN.
Обратите внимание, что агент может быть установлен на разлиных уровнях: сервера, организации или пользователя. Для изменеия уровня агента, сгенирируйте токен в разделе User settings или Organization settings
- Выполните команду
docker compose -f ./docker-compose.act_runner.yaml up -d, после развёртывания контейнера, на странице агентов появиться новый экзампляр.

Конфигурирование OAuth аутентификации
В добавок ко встроенному механизму аутетификации, Gitea поддерживает также широкий спектр внешних, включая LDAP и OAuth. В рамках этой статьи мы настроим OAuth2 OpenID Connect + Microsoft EntraID. Отметьте, что для этого вам необходимо иметь Microsoft EntraID тенант, как минимуи, с Free лицензией, однако, если вы планируете настроить маппинг групп безопасности с тимами, вам придётся приобрести лицензию уровня Premium.
Также нужно отметить, что представляемый метод не требует внешнего домена или публичного IP адреса.
Azure
- Войдите в вашу учетную запись в Microsoft EntraID и создайте App registartion

- Заполните поля Name и Redirect URI (http://localhost:3000/user/oauth2/Microsoft%20EntraID/callback)

- В зарегистрированной аппликации перейдите в раздел Authetication section и включите аттрибут public client flow

Создайте новы клиентский секрет, сохраните его для дальнейшего использования
Перейдите в раздел Token cofiguration и добавьте group claims как указано на изображении ниже

- Перейдите в раздел API permissions и делигируйте разрешения
Group.Read.All. Также вы должны гарантировать admin consent.

Скопируйте кончную точку для OpenID Connect metadata document
Перейдите в связанную Enterprise Application, в разделе Properties измените аттрибут Assignment requirement на YES.

- Добавьте разрешённых пользователей и группы в секции Users and groups
Gitea сервер
Вернитесь на ваш Gitea сервер и откройте Site Administration, в разделе Identety & Access создайте новый экземпляр.
Вберите Autentication Type как OAuth и введите значение Name как Microsoft EntraID.
Выберите OpenID Connect из выпадающего списка Ouath2 Provider
Client ID - значение Aplication ID созданной в Azure App registration, Client Secret сгенерированный ранее клиентский секрет.
Вставьте скопированную конечную точку OpenID Connect metadata document в OpenID Connect Auto Discovery URL
В поле Additional Scopes вы можете добавить аттрибуты openid email profile

- Для маппинга групп доавьте groups в поле Claim name providing group names for this source. и сконфигурируйте соотношенипе групп к командам Map claimed groups to Organization teams.

- Нажмите на кнопку Add Authentication Source
Пользовательский вход
Для пользовательского входа через SSO используте кнопку Sign in with Microsoft EntraID

После успешной авторизации в Microsoft аккаунте, вам следует закончить процесс регистрации в Gitea

Вывод
Gitea представляет собой простой в использовании и самостоятельно размещаемый сервис разработки программного обеспечения, который включает в себя хостинг Git, обзор кода, коллаборацию команд, реестр пакетов и возможности CI/CD. Выпущенный под лицензией MIT, он ориентирован на лёгкость, удобство использования и высокую настраиваемость, подходя как для малых команд, так и для крупных организаций. Gitea поддерживает практически все возможности современной системы управления версиями Git.
