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 |