Menu
Szybki wybór
Hosting Domeny VPS SSL Kalkulator Porównania FAQ
Aktywne kody
Wszystkie kody rabatowe

Gitea — self-hosted Git server: instalacja i konfiguracja

Opublikowano: 10 kwietnia 2026 · Kategoria: VPS i serwery

GitHub i GitLab.com są wygodne, ale każdy commit trafia na serwery zewnętrzne, a przy rosnącym zespole rachunki mogą zaskoczyć. Gitea to lekka (~50 MB binary, ~100 MB RAM), napisana w Go alternatywa, którą postawisz na VPS za kilkanaście złotych miesięcznie. Oferuje zarządzanie repozytoriami, issues, pull requesty, wiki, CI (Gitea Actions kompatybilne z GitHub Actions), Git LFS i pełne API. Ten artykuł przeprowadza Cię przez instalację Docker i binary, konfigurację app.ini, migrację z GitHub/GitLab oraz uruchomienie Gitea Actions z własnym runnerem.

Instalacja przez Docker Compose (zalecana)

Docker Compose to najszybszy sposób na uruchomienie Gitea z PostgreSQL jako backendem. Unikaj SQLite w produkcji — przy dużych repozytoriach i wielu użytkownikach powoduje blokady.

# docker-compose.yml
version: "3.9"

services:
  gitea:
    image: gitea/gitea:latest
    container_name: gitea
    restart: unless-stopped
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - GITEA__database__DB_TYPE=postgres
      - GITEA__database__HOST=db:5432
      - GITEA__database__NAME=gitea
      - GITEA__database__USER=gitea
      - GITEA__database__PASSWD=gitea_pass
    ports:
      - "3000:3000"
      - "222:22"      # SSH Git clone
    volumes:
      - ./gitea-data:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    depends_on:
      - db

  db:
    image: postgres:15-alpine
    container_name: gitea-db
    restart: unless-stopped
    environment:
      - POSTGRES_USER=gitea
      - POSTGRES_PASSWORD=gitea_pass
      - POSTGRES_DB=gitea
    volumes:
      - ./postgres-data:/var/lib/postgresql/data

# Uruchomienie
# docker compose up -d
# Otwórz http://twoj-ip:3000 i dokoncz konfiguracje przez UI

Instalacja binary (bez Dockera)

Jeśli preferujesz systemd bez kontenerów, Gitea dystrybuuje statyczne binary dla Linux amd64. Działa na Ubuntu/Debian bez dodatkowych zależności.

# Pobierz binary (sprawdz aktualną wersje na gitea.io/releases)
wget https://dl.gitea.com/gitea/1.22.2/gitea-1.22.2-linux-amd64
chmod +x gitea-1.22.2-linux-amd64
sudo mv gitea-1.22.2-linux-amd64 /usr/local/bin/gitea

# Stworz uzytkownika systemowego
sudo adduser --system --shell /bin/bash --gecos 'Gitea' \
  --group --disabled-password --home /home/gitea gitea

# Katalogi danych
sudo mkdir -p /var/lib/gitea/{custom,data,log}
sudo chown -R gitea:gitea /var/lib/gitea
sudo mkdir -p /etc/gitea
sudo chmod 750 /etc/gitea

# /etc/systemd/system/gitea.service
[Unit]
Description=Gitea
After=network.target postgresql.service

[Service]
User=gitea
Group=gitea
WorkingDirectory=/var/lib/gitea/
ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini
Restart=always
Environment=USER=gitea HOME=/home/gitea GITEA_WORK_DIR=/var/lib/gitea

[Install]
WantedBy=multi-user.target

sudo systemctl daemon-reload
sudo systemctl enable --now gitea

Konfiguracja app.ini — kluczowe sekcje

Plik /etc/gitea/app.ini (lub /data/gitea/conf/app.ini w Docker) steruje całym zachowaniem Gitea. Po instalacji przez UI plik jest częściowo wypełniony — uzupełnij ręcznie poniższe sekcje.

[server]
DOMAIN           = git.example.com
HTTP_PORT        = 3000
ROOT_URL         = https://git.example.com/
SSH_DOMAIN       = git.example.com
SSH_PORT         = 22
DISABLE_SSH      = false
START_SSH_SERVER = false  ; true jezeli brak systemowego sshd na tym porcie

[database]
DB_TYPE = postgres
HOST    = 127.0.0.1:5432
NAME    = gitea
USER    = gitea
PASSWD  = gitea_pass

[mailer]
ENABLED   = true
SMTP_ADDR = smtp.example.com
SMTP_PORT = 587
FROM      = [email protected]
USER      = [email protected]
PASSWD    = smtp_password
IS_TLS_ENABLED = true

[lfs]
ENABLED = true
PATH    = /var/lib/gitea/data/lfs

[repository]
DEFAULT_BRANCH = main
MAX_CREATION_LIMIT = -1   ; -1 = bez limitu

[security]
INSTALL_LOCK   = true
SECRET_KEY     = <generuj: openssl rand -base64 32>
INTERNAL_TOKEN = <generuj: gitea generate secret INTERNAL_TOKEN>

[log]
MODE  = file
LEVEL = Info
ROOT_PATH = /var/lib/gitea/log

Migracja repozytoriów z GitHub i GitLab

Gitea ma wbudowany kreator migracji z zachowaniem historii issues, komentarzy, PR i etykiet. Wystarczy Personal Access Token ze źródłowego serwisu.

  • Przez UI: Explore → Migrate → wybierz GitHub/GitLab/Bitbucket. Podaj token, wybierz repo, zaznacz co migrować (issues, wiki, labels, milestones, releases).
  • Przez API (batch): endpoint POST /api/v1/repos/migrate — przydatny do migracji dziesiątek repozytoriów skryptem.
  • Mirror mode: Gitea może działać jako mirror GitHub repo — automatycznie synchronizuje kod co N godzin (ale issues i PR nie są synchronizowane w trybie mirror).
# Przyklad: migracja przez API (curl)
curl -X POST https://git.example.com/api/v1/repos/migrate \
  -H "Authorization: token TWOJ_GITEA_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "clone_addr": "https://github.com/user/myrepo",
    "auth_token": "TWOJ_GITHUB_PAT",
    "uid": 1,
    "repo_name": "myrepo",
    "mirror": false,
    "issues": true,
    "labels": true,
    "milestones": true,
    "releases": true,
    "wiki": true,
    "pull_requests": true
  }'

Gitea Actions — wbudowany CI/CD

Gitea Actions (od wersji 1.19) to CI/CD kompatybilne z GitHub Actions. Plik workflow YAML jest taki sam. Wymaga uruchomienia act_runner — lekkiego runnera w Go lub w Docker.

# Instalacja act_runner (runner dla Gitea Actions)
wget https://dl.gitea.com/act_runner/latest/act_runner-linux-amd64
chmod +x act_runner-linux-amd64
sudo mv act_runner-linux-amd64 /usr/local/bin/act_runner

# Wygeneruj token runnera w Gitea UI:
# Admin → Site Admin → Actions → Runners → Create new runner

# Zarejestruj runner (rejestracja interaktywna)
act_runner register

# Lub nieinteraktywnie:
act_runner register \
  --no-interactive \
  --instance https://git.example.com \
  --token RUNNER_TOKEN \
  --name "my-runner" \
  --labels "ubuntu-latest:docker://node:16"

# Uruchom runnera
act_runner daemon

# Przykladowy .gitea/workflows/ci.yml
name: CI

on:
  push:
    branches: [ main ]
  pull_request:

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Install deps
        run: npm ci
      - name: Run tests
        run: npm test

Porównanie Gitea vs GitLab CE vs Gogs

Cecha Gitea GitLab CE Gogs
Min. RAM 128 MB 4 GB 64 MB
Wbudowany CI/CD Gitea Actions (GitHub-compat) GitLab CI/CD (potężny) Brak
Git LFS Tak (natywny) Tak Tak (ograniczony)
Container Registry Tak (pakiety) Tak (pełny) Nie
API kompatybilność GitHub API v3 GitLab API Gogs API
Aktywność projektu Bardzo wysoka Bardzo wysoka Niska
Konfiguracja (trudność) Łatwa Złożona Łatwa
Licencja MIT MIT (CE) / EE MIT

Najczęstsze pytania

Czym jest Gitea i dlaczego warto go hostować samodzielnie? +
Gitea to lekki, open-source'owy serwer Git napisany w Go, kompatybilny API z GitHub. Self-hosting daje pełną kontrolę nad kodem: brak opłat za prywatne repo, dane zostają w firmie (RODO), nieograniczona liczba użytkowników i organizacji. Gitea zużywa tylko ~100 MB RAM przy typowym obciążeniu — znacznie mniej niż GitLab CE (minimum 4 GB).
Jaka jest różnica między Gitea a Gogs? +
Gitea powstała jako fork Gogs w 2016 roku, gdy społeczność uznała, że Gogs rozwija się za wolno. Gitea ma aktywniejszy rozwój, więcej kontrybutorów, wbudowane Actions (kompatybilne z GitHub Actions), integrację z zewnętrznymi CI/CD i lepsze wsparcie dla LFS. Gogs pozostał prostszy i lżejszy, ale brakuje mu wielu nowszych funkcji. Dla nowych wdrożeń zaleca się Gitea.
Czy Gitea jest kompatybilna z GitHub Actions? +
Gitea Actions jest zaprojektowana jako drop-in replacement dla GitHub Actions — używa tego samego formatu YAML (on:, jobs:, steps:, uses:). Większość prostych workflow z GitHub działa bez zmian. Różnice dotyczą głównie marketplace actions — te z github.com/... działają, ale te specyficzne dla GitHub (np. actions/cache z GitHub Cache) wymagają alternatyw. Gitea Acts to oddzielny runner (act_runner), uruchamiający zadania przez Docker.
Jak migracją repozytoria z GitHub do Gitea? +
Gitea ma wbudowany kreator migracji w UI (Explore → Migrate). Obsługuje GitHub, GitLab, Bitbucket, Gogs i zwykłe Git URL. Przy migracji z GitHub można przekazać Personal Access Token, aby skopiować też issues, PR, wiki, komentarze, labels i milestones — nie tylko kod. Alternatywnie: użyj gitea-github-migrator (CLI tool) lub script z GitHub REST API.

Sprawdź oferty pasujące do tego scenariusza

Poniżej masz szybkie przejścia do ofert i stron z kodami rabatowymi tam, gdzie są dostępne.