Self-hosting. Gitea

Легковесный вариант гит репозитория для хранения проектов git и создание зеркал общедоступных проектов. Имеет возможность использовать OAuth2 авторизацию и создание исполнителей.

Сайт проекта: Gitea Official Website

Пример docker compose файла:

type: docker-compose
tags:
aliases:
program:

  • gitea
    modified: 2025-05-05T17:45:59+03:00
    МОС: “[[Docker Compose]]”
services:
  gitea:
    image: gitea/gitea:latest
    container_name: gitea
    environment:
      - ENABLE_REVERSE_PROXY_AUTHENTICATION=true
      - DISABLE_REGISTRATION=true
      - REQUIRE_SIGNIN_VIEW=true
      - USER_UID=1001
      - USER_GID=1001
    restart: always
    volumes:
      - /home/deniom/docker/gitea/data:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
      - /home/git/.ssh/:/data/git/.ssh
    ports:
      - 3000:3000
      - "127.0.0.1:2222:22"
    networks:
      - gitea

Альтернативный форк: Forgejo – Beyond coding. We forge.

Настройка репозитория: Customizing Gitea | Gitea Documentation

[!note]
Настройка аутентификации через Authentik:

Авторизация gitea по токену

type: note
tags:
aliases:
data: 2025-05-05 02:16
modified: 2025-05-05T18:30:04+03:00
dg-publish: true

Для подключения к закрытому репозиторию gitea необходимо использовать вариант подключения с токеном или авторизацию по ssh.

Для подключения по токену доступа необходимо в настройках пользователя перейти в радел приложения и создать новый токен доступа:

Для получения данных из репозитория по токену доступа необходимо добавить ключ авторизации в адрес доступа репозитория вида:

https://<token>@gitea.domein.ru/User/repa.git

[!urls]- Упоминания:

Настройка доступа к репозиториям gitea по ssh

type: note
tags:
aliases:
data: 2025-05-05 02:22
modified: 2025-05-05T19:36:35+03:00
dg-publish: true

Преимуществом подключения по ssh к репозиторию является то что не надо проходить авторизацию по паролю или использовать в адреса в явном виде токен доступа что обеспечивает дополнительную безопасность.

Настройка gitea

Подробная актуальная документация доступна на сайте: Gitea Documentation

  1. Создать отдельного пользователя git без установки пароля
sudo useradd -m -s /bin/bash git
sudo mkdir -p /home/git/.ssh
sudo touch /home/git/.ssh/authorized_keys
sudo chmod 700 /home/git/.ssh
sudo chmod 600 /home/git/.ssh/authorized_keys
sudo chown -R git:git /home/deniom/.ssh
  1. Внести изменения в [[Gitea|docker compose]]
ports:  
# [...]  
	- "127.0.0.1:2222:22"

environment:  
	- USER_UID=1001  
	- USER_GID=1001

Где USER_UID и USER_GID определить командой

id git
  1. Если раньше уже запускался gitea и есть репозитории то передать права на папку с данными на нового пользователя командой ниже, вся дальнейшая работа с репозиториями гит будет идти от данного пользователя
sudo chown -R git:git /home/deniom/docker/gitea/data
  1. Создаем ключ для связи с gitea, и передаем его новому пользователю
sudo -u git ssh-keygen -t rsa -b 4096 -C "Gitea Host Key"
sudo -u git cat /home/git/.ssh/id_rsa.pub | sudo -u git tee -a /home/git/.ssh/authorized_keys  
sudo -u git chmod 600 /home/git/.ssh/authorized_keys
  1. Создаем скрипт для подмены команды SSH
cat <<"EOF" | sudo tee /usr/local/bin/gitea
#!/bin/sh
ssh -p 2222 -o StrictHostKeyChecking=no git@127.0.0.1 "SSH_ORIGINAL_COMMAND=\"$SSH_ORIGINAL_COMMAND\" $0 $@"
EOF
sudo chmod +x /usr/local/bin/gitea

При помощи данного скрипта будет выполнятся переадресация в контейнер gitea но при этом доступ к самому серверу так же останется по 22 порту. Подробнее в документации gitea.
6. Перезапустить docker контейнер gitea с новыми настройками
7. Добавим новый ключ в интерфейсе gitea. Для этого идем в Профиль -> Ключи SSH -> Добавить ключ
8. Проверим работу (пока только по ip)

git clone git@192.168.0.132:Deniom\testrepa.git

Настройка проксирования

Для обращения к gitea по ssh с использованием домена необходимо выполнить проектирование tcp трафика по 22 порту. Для этого будет использован traefik.

[!note] Примечание
Принципе можно проксировать на любой другой порт но тогда ссылки будет иметь вид отличный от стандартного и выглядить так ssh://git@gitea.mydomain.com:2222/Deniom/Test.git

  1. Перенести подключение по ssh на сервере с traefik с 22 порта (см. [[Изменение порта доступа по SSH]])
  2. Внести изменения в [[Хобби/Docker compose/Traefik|Traefik]] открыв 22 порт
    ports:
      - 22:22
  1. В статическую конфигурацию traefik.yml добавить точку входа ssh
entryPoints:
  ssh:
    address: ":22"
  1. Изменить динамическую конфигурацию для gitea добавив секцию проксирования tcp
tcp:
  routers:
    gitea-ssh:
      entryPoints:
        - ssh
      rule: "HostSNI(`*`)"
      service: gitea-ssh
  
  services:
    gitea-ssh:
      loadBalancer:
        servers:
          - address: 192.168.0.132:22

[!hint] Важно
Секция tcp должна быть отдельно представлена а не встроена в уже существующий http, можно разместить в конце файла.

  1. Проверка работы по домену
git clone git@gitea.domein.ru:Deniom\testrepa.git

[!attention]
Для доступа из вне необходимо обязательно прокидывать 22 порт на traefik иначе работать нечего не будет, не забываем изменить настройки роутера.

[!bug]
В случае ошибки ssh про атаку в середине как на скрине ниже необходимо очистить файлы в /home/git/.ssh/ и выполнить пункт 4 повторно.


[!urls]- Упоминания:


[!urls]- Упоминания:

  • [[Self-hosting программы]]
  • [[Сервер Main]]

[!description]- Примечание
Примечание:: Облегченный git репозиторий