Self-hosting. Gitea

12 08 2024
05 05 2025

ЛСгковСсный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π³ΠΈΡ‚ рСпозитория для хранСния ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² git ΠΈ созданиС Π·Π΅Ρ€ΠΊΠ°Π» общСдоступных ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ². Π˜ΠΌΠ΅Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ OAuth2 Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ созданиС исполнитСлСй.

Π‘Π°ΠΉΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°: Gitea Official Website

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 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 ΠΏΠΎ Ρ‚ΠΎΠΊΠ΅Π½Ρƒ

Для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌΡƒ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡŽ gitea Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ с Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠΌ ΠΈΠ»ΠΈ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΠΎ ssh.

Для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΠΎ Ρ‚ΠΎΠΊΠ΅Π½Ρƒ доступа Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π² настройках ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² Ρ€Π°Π΄Π΅Π» прилоТСния ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΎΠΊΠ΅Π½ доступа:
Авторизация gitea ΠΏΠΎ Ρ‚ΠΎΠΊΠ΅Π½Ρƒ.png

Для получСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· рСпозитория ΠΏΠΎ Ρ‚ΠΎΠΊΠ΅Π½Ρƒ доступа Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² адрСс доступа рСпозитория Π²ΠΈΠ΄Π°:

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

Настройка доступа ΠΊ рСпозиториям gitea ΠΏΠΎ ssh

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΠΎ 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. ВнСсти измСнСния Π² 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.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ€Ρ‚ Π½ΠΎ Ρ‚ΠΎΠ³Π΄Π° ссылки Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΈΠ΄ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΎΡ‚ стандартного ΠΈ Π²Ρ‹Π³Π»ΡΠ΄ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊ ssh://git@gitea.mydomain.com:2222/Deniom/Test.git

  1. ΠŸΠ΅Ρ€Π΅Π½Π΅ΡΡ‚ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ssh Π½Π° сСрвСрС с traefik с 22 ΠΏΠΎΡ€Ρ‚Π° (см. ИзмСнСниС ΠΏΠΎΡ€Ρ‚Π° доступа ΠΏΠΎ SSH)
  2. ВнСсти измСнСния Π² 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
Π’Π°ΠΆΠ½ΠΎ

БСкция tcp Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ прСдставлСна Π° Π½Π΅ встроСна Π² ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ http, ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠ½Ρ†Π΅ Ρ„Π°ΠΉΠ»Π°.

  1. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎ Π΄ΠΎΠΌΠ΅Π½Ρƒ
git clone git@gitea.domein.ru:Deniom\testrepa.git
Attention

Для доступа ΠΈΠ· Π²Π½Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠΊΠΈΠ΄Ρ‹Π²Π°Ρ‚ΡŒ 22 ΠΏΠΎΡ€Ρ‚ Π½Π° traefik ΠΈΠ½Π°Ρ‡Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅Ρ‡Π΅Π³ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚, Π½Π΅ Π·Π°Π±Ρ‹Π²Π°Π΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ настройки Ρ€ΠΎΡƒΡ‚Π΅Ρ€Π°.

Bug

Π’ случаС ошибки ssh ΠΏΡ€ΠΎ Π°Ρ‚Π°ΠΊΡƒ Π² сСрСдинС ΠΊΠ°ΠΊ Π½Π° скринС Π½ΠΈΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Π² /home/git/.ssh/ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΡƒΠ½ΠΊΡ‚ 4 ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ.

Настройка доступа ΠΊ рСпозиториям gitea ΠΏΠΎ ssh.png