 Autor: [Piotr Wasilewski](/autorzy/piotr-wasilewski) Architekt rozwiązań chmurowych · Zweryfikowano Kwiecień 2026

1.  [Strona główna](/) ›
2.  [Baza wiedzy](/baza-wiedzy/) ›
3.  Gitea — self-hosted Git server

# 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      = gitea@example.com
USER      = gitea@example.com
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.

Contabo

VPS z dużym dyskiem — idealny pod Gitea z repozytoriami LFS

VPS + storage

[Aktywuj rabat →](/out/contabo)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/contabo)

ProSerwer.pl

Polski VPS pod Gitea — dane w Polsce, zgodność z RODO

Polski VPS

[Aktywuj rabat →](/out/proserwer-pl)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/proserwer)

Mikr.us

Tani VPS do testowania Gitea w małym zespole

Budżetowy

[Aktywuj rabat →](/out/mikrus)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/mikrus)

## Powiązane strony

-   [GitLab CE — instalacja na VPS i konfiguracja CI/CD](/baza-wiedzy/gitlab-ce-instalacja-vps)
-   [Drone CI — lekki self-hosted CI/CD](/baza-wiedzy/drone-cicd-konfiguracja)
-   [Docker na VPS — instalacja i konfiguracja](/baza-wiedzy/docker-na-vps)
-   [Wszystkie artykuły](/baza-wiedzy/)