Ana içeriğe geç
Kategoriye Dön

Gitea / Forgejo Kurulumu: Self-Hosted Git Sunucusu

Gitea veya Forgejo Docker kurulumu, repository yönetimi, CI/CD (Gitea Actions), SSH key yapılandırması, organizasyon ve takım yönetimi, mirror ve webhook.

Okuma süresi: 14 dk Self-Hosting
giteaforgejogitself-hostingdockerci/cdrepository
Yazar
REXE Teknoloji Ağ ve Güvenlik Ekibi
Editör
REXE Teknoloji Teknik Yayın Editörü
İlk yayın
Son güncelleme

Gitea / Forgejo Kurulumu: Self-Hosted Git Sunucusu

Gitea ve Forgejo, GitHub ve GitLab'a açık kaynaklı, hafif ve self-hosted alternatiflerdir. Kendi sunucunuzda Git repository'leri barındırabilir, CI/CD pipeline'ları çalıştırabilir ve ekibinizle kod işbirliği yapabilirsiniz. Forgejo, Gitea'nın topluluk odaklı fork'udur ve her ikisi de birbirleriyle büyük ölçüde uyumludur.

Gitea vs Forgejo

ÖzellikGiteaForgejo
LisansMITGPL-3.0
YönetimŞirket destekliTopluluk yönetimli
UyumlulukReferans uygulamaGitea uyumlu
GüncellemelerDüzenliDaha sık
ÖnerilenKurumsalTopluluk

Her iki proje de aynı docker-compose yapısını kullanır; sadece image adı farklıdır.

Sistem Gereksinimleri

  • Docker ve Docker Compose kurulu sunucu
  • Minimum 512 MB RAM (1 GB önerilir)
  • PostgreSQL veya MySQL (önerilir) ya da SQLite
  • SSH erişimi için 22 veya özel port

Docker ile Kurulum

docker-compose.yml (Gitea)

hljs yaml
version: '3.8'

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=guclu-sifre
      - GITEA__server__DOMAIN=git.example.com
      - GITEA__server__SSH_DOMAIN=git.example.com
      - GITEA__server__ROOT_URL=https://git.example.com/
      - GITEA__server__SSH_PORT=2222
    volumes:
      - ./gitea-data:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "127.0.0.1:3000:3000"
      - "2222:22"
    depends_on:
      - db

  db:
    image: postgres:15
    container_name: gitea-db
    restart: unless-stopped
    environment:
      POSTGRES_DB: gitea
      POSTGRES_USER: gitea
      POSTGRES_PASSWORD: guclu-sifre
    volumes:
      - postgres-data:/var/lib/postgresql/data

volumes:
  postgres-data:

Forgejo için Image Değiştirme

hljs yaml
# Sadece image satırını değiştirin:
image: codeberg.org/forgejo/forgejo:latest
# veya
image: forgejo/forgejo:latest
hljs bash
# Container'ı başlat
docker compose up -d

# Logları kontrol et
docker logs gitea -f

Nginx Reverse Proxy

hljs nginx
server {
    listen 80;
    server_name git.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name git.example.com;

    ssl_certificate /etc/letsencrypt/live/git.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/git.example.com/privkey.pem;

    client_max_body_size 512M;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

İlk Yapılandırma

Kurulum sonrası https://git.example.com adresine gidin:

  1. Veritabanı ayarları otomatik doldurulur (env'den)
  2. Genel ayarlar: Site başlığı, admin e-posta
  3. Admin hesabı oluşturun
  4. Kurulumu tamamlayın

app.ini ile Gelişmiş Yapılandırma

hljs ini
# /data/gitea/conf/app.ini
[server]
DOMAIN = git.example.com
ROOT_URL = https://git.example.com/
SSH_DOMAIN = git.example.com
SSH_PORT = 2222
DISABLE_SSH = false

[service]
DISABLE_REGISTRATION = true
REQUIRE_SIGNIN_VIEW = false
ALLOW_ONLY_EXTERNAL_REGISTRATION = false

[mailer]
ENABLED = true
FROM = gitea@example.com
SMTP_ADDR = smtp.example.com
SMTP_PORT = 587
USER = gitea@example.com
PASSWD = smtp-sifresi

SSH Key Yapılandırması

Kullanıcı SSH Key Ekleme

hljs bash
# SSH key oluştur
ssh-keygen -t ed25519 -C "kullanici@example.com"

# Public key'i kopyala
cat ~/.ssh/id_ed25519.pub

Gitea'da: ProfilAyarlarSSH/GPG AnahtarlarıSSH Anahtarı Ekle

SSH ile Clone

hljs bash
# SSH ile clone (port 2222)
git clone ssh://git@git.example.com:2222/kullanici/repo.git

# ~/.ssh/config ile kolaylaştırma
Host git.example.com
  HostName git.example.com
  User git
  Port 2222
  IdentityFile ~/.ssh/id_ed25519

# Config sonrası
git clone git@git.example.com:kullanici/repo.git

Repository Yönetimi

Repository Oluşturma

hljs bash
# Yeni repo oluştur ve push et
mkdir myproject && cd myproject
git init
git add .
git commit -m "İlk commit"
git remote add origin https://git.example.com/kullanici/myproject.git
git push -u origin main

Mirror Repository

GitHub/GitLab'dan mirror oluşturma:

Yeni Repository → Migrate → GitHub/GitLab/Bitbucket
- Clone URL: https://github.com/user/repo.git
- Mirror (otomatik senkronizasyon): Etkin
- Senkronizasyon aralığı: 8 saat

Gitea Actions (CI/CD)

Actions Runner Kurulumu

hljs yaml
# docker-compose.yml'e ekle
runner:
  image: gitea/act_runner:latest
  container_name: gitea-runner
  restart: unless-stopped
  environment:
    - GITEA_INSTANCE_URL=https://git.example.com
    - GITEA_RUNNER_REGISTRATION_TOKEN=RUNNER_TOKEN
    - GITEA_RUNNER_NAME=my-runner
  volumes:
    - ./runner-data:/data
    - /var/run/docker.sock:/var/run/docker.sock
hljs bash
# Runner token al: Yönetim → Actions → Runner
# Token'ı GITEA_RUNNER_REGISTRATION_TOKEN'a ekle
docker compose up -d runner

Workflow Dosyası

hljs yaml
# .gitea/workflows/ci.yml
name: CI Pipeline

on:
  push:
    branches: [main, develop]
  pull_request:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: Node.js kurulumu
        uses: actions/setup-node@v3
        with:
          node-version: '20'

      - name: Bağımlılıkları yükle
        run: npm ci

      - name: Testleri çalıştır
        run: npm test

      - name: Build
        run: npm run build

Organizasyon ve Takım Yönetimi

Organizasyon Oluştur:
+ → Yeni Organizasyon → Ad ve görünürlük

Takım Oluştur:
Organizasyon → Takımlar → Yeni Takım
- İzinler: Sahip, Yönetici, Yazar, Okuyucu
- Repository erişimi: Belirli veya tüm

Üye Davet:
Takım → Üyeler → Kullanıcı Ekle

Webhook Yapılandırması

Repository → Ayarlar → Webhook → Webhook Ekle

Payload URL: https://ci.example.com/webhook
Content Type: application/json
Secret: webhook-gizli-anahtari
Events: Push, Pull Request, Release

Yedekleme

hljs bash
# Gitea verilerini yedekle
docker exec gitea gitea dump -c /data/gitea/conf/app.ini

# Veritabanı yedeği
docker exec gitea-db pg_dump -U gitea gitea > gitea-db-$(date +%Y%m%d).sql

# Tüm veri dizini
tar -czf gitea-backup-$(date +%Y%m%d).tar.gz ./gitea-data/

REXE VPS sunucularında Gitea/Forgejo ile ekibinizin tüm kod altyapısını yönetebilirsiniz. 1 GB RAM ile küçük-orta ekipler için idealdir.

Sık Sorulan Sorular

Gitea mi yoksa Forgejo mu kullanmalıyım?

Her ikisi de teknik olarak neredeyse aynıdır. Forgejo, Gitea'nın topluluk yönetimli fork'udur ve daha sık güncelleme alır. Kurumsal destek veya ticari kullanım için Gitea tercih edilebilir. Topluluk odaklı ve özgür yazılım tercih edenler için Forgejo önerilir. Her ikisi de aynı istemciler ve araçlarla uyumludur.

SSH ile bağlanamıyorum, 'Connection refused' hatası alıyorum.

SSH portu 2222 olarak yapılandırıldıysa git clone komutunda portu belirtmeniz gerekir: ssh://git@git.example.com:2222/user/repo.git. ~/.ssh/config dosyasına Host girişi ekleyerek portu otomatik kullanabilirsiniz. Sunucu firewall'unda 2222 portunun açık olduğunu kontrol edin.

Gitea Actions runner'ım çevrimdışı görünüyor.

Runner container'ının çalıştığını kontrol edin: docker ps | grep runner. GITEA_RUNNER_REGISTRATION_TOKEN değerinin doğru olduğundan emin olun. Runner loglarını inceleyin: docker logs gitea-runner. Gitea instance URL'sinin runner'dan erişilebilir olduğunu doğrulayın. Runner'ı yeniden kaydetmek için container'ı yeniden başlatın.

Büyük dosyaları (100 MB+) push edemiyorum.

Nginx'te client_max_body_size değerini artırın (örn: 512M veya 1G). Gitea app.ini'de [server] bölümüne MAX_CREATION_LIMIT ekleyin. Git LFS (Large File Storage) kullanmayı düşünün: git lfs install && git lfs track '*.zip'. LFS için Gitea'da LFS desteğinin etkin olduğunu kontrol edin.

GitHub'daki repository'lerimi Gitea'ya nasıl taşırım?

Gitea'da Migrate özelliğini kullanın: Yeni Repository → Migrate → GitHub. GitHub Personal Access Token ile özel repository'leri de taşıyabilirsiniz. Mirror seçeneğiyle GitHub'daki değişiklikler otomatik senkronize edilir. Tüm branch'ler, tag'ler ve commit geçmişi korunur.

Gitea'yı güncellemek için ne yapmalıyım?

Güncelleme öncesi yedek alın: docker exec gitea gitea dump. Ardından docker compose pull && docker compose up -d ile güncelleyin. Gitea otomatik veritabanı migration yapar. Büyük sürüm atlamalarında (örn: 1.19 → 1.21) ara sürümleri tek tek geçmeniz gerekebilir. Release notlarını mutlaka okuyun.

İlgili Makaleler

Ağ TrafiğiGelen GbpsGiden Gbps