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.
İçindekiler
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
| Özellik | Gitea | Forgejo |
|---|---|---|
| Lisans | MIT | GPL-3.0 |
| Yönetim | Şirket destekli | Topluluk yönetimli |
| Uyumluluk | Referans uygulama | Gitea uyumlu |
| Güncellemeler | Düzenli | Daha sık |
| Önerilen | Kurumsal | Topluluk |
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)
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
# Sadece image satırını değiştirin:
image: codeberg.org/forgejo/forgejo:latest
# veya
image: forgejo/forgejo:latest
# Container'ı başlat
docker compose up -d
# Logları kontrol et
docker logs gitea -f
Nginx Reverse Proxy
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:
- Veritabanı ayarları otomatik doldurulur (env'den)
- Genel ayarlar: Site başlığı, admin e-posta
- Admin hesabı oluşturun
- Kurulumu tamamlayın
app.ini ile Gelişmiş Yapılandırma
# /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
# SSH key oluştur
ssh-keygen -t ed25519 -C "kullanici@example.com"
# Public key'i kopyala
cat ~/.ssh/id_ed25519.pub
Gitea'da: Profil → Ayarlar → SSH/GPG Anahtarları → SSH Anahtarı Ekle
SSH ile Clone
# 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
# 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
# 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
# Runner token al: Yönetim → Actions → Runner
# Token'ı GITEA_RUNNER_REGISTRATION_TOKEN'a ekle
docker compose up -d runner
Workflow Dosyası
# .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
# 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.
İlgili Makaleler
Coolify Kurulumu: Self-Hosted PaaS ile Uygulama Deployment
Coolify kurulumu, Docker ve Git entegrasyonu, uygulama deployment, veritabanı yönetimi, SSL sertifikaları, environment variables ve Heroku/Netlify alternatifi self-hosted PaaS.
Nextcloud Kurulumu: Self-Hosted Bulut Depolama ve İşbirliği
Nextcloud kurulumu Docker ile, Apache/Nginx yapılandırması, veritabanı kurulumu, SSL sertifikası, dosya senkronizasyonu, uygulama mağazası ve performans optimizasyonu.
Portainer ile Docker Yönetimi: Web Arayüzlü Konteyner Kontrolü
Portainer CE kurulumu, Docker ve Kubernetes yönetimi, stack deployment, volume/network yönetimi, kullanıcı yetkilendirme, webhook ve GitOps entegrasyonu.