Kod deposu deyince akla ilk gelen isim genellikle GitHub oluyor. Ancak her ekibin kodunu üçüncü bir şirketin sunucusunda tutmak istemesi gerekmez; kimi zaman gizlilik, kimi zaman maliyet, kimi zaman da tam kontrol ihtiyacı devreye girer. İşte Gitea tam bu noktada devreye giren, kendi sunucunuzda çalışan, hafif ve açık kaynaklı bir Git servisidir. GitHub'ın tanıdık arayüzünü sunar ama depolarınız tamamen sizin denetiminizde kalır.
Bu rehberde Gitea'nın ne olduğunu, hangi soruna çözüm ürettiğini, öne çıkan özelliklerini, kimler için mantıklı olduğunu ve GitHub ile GitLab karşısında nerede durduğunu ele alacağız. Ardından kendi sunucunuzda Docker ile nasıl kurabileceğinizi, ilk yapılandırmayı, ters vekil ve SSL ayarını, yedeklemeyi ve güvenliği pratik örneklerle inceleyeceğiz. Git kavramlarına henüz aşina değilseniz önce Git temelleri rehberimize göz atmanızı öneririz.
Gitea nedir, ne işe yarar?#
Gitea, Git tabanlı bir kaynak kodu yönetim platformudur. En basit tanımıyla, kendi sunucunuzda çalıştırdığınız bir GitHub ya da GitLab kopyası gibi düşünebilirsiniz. Depolarınızı oluşturur, kod itersiniz (push), dallar (branch) açarsınız, sürüm etiketleri (tag) tanımlarsınız ve bunların hepsini şık bir web arayüzünden yönetirsiniz.
Yazılım Go programlama diliyle yazılmıştır ve bu tercih onu son derece hafif kılar. Tüm uygulama tek bir çalıştırılabilir dosya olarak dağıtılır; ayrı bir uygulama sunucusu, karmaşık bir çalışma zamanı ya da ağır bağımlılıklar gerektirmez. Bu sayede eski bir dizüstü bilgisayarda, küçük bir sanal sunucuda, hatta Raspberry Pi üzerinde bile rahatça çalışır.
Gitea, 2016 yılında Gogs adlı projeden ayrılan (fork) bir topluluk tarafından başlatıldı ve zamanla çok daha aktif bir geliştirme hızına ulaştı. Bugün dünya çapında binlerce ekip, ajans ve bağımsız geliştirici tarafından üretim ortamlarında kullanılıyor. Amacı iddialı ama net: kurumsal Git platformlarının sunduğu işlevlerin çoğunu, çok daha az kaynak tüketen ve kurulumu dakikalar süren bir pakette toplamak.
Gitea hangi sorunu çözer?#
Gitea'nın çözdüğü temel sorunları birkaç başlıkta toplayabiliriz.
Özel depo ihtiyacı. Bulut tabanlı servislerin ücretsiz katmanları zamanla kısıtlanabilir, özel depo sayısına ya da iş birlikçi sayısına limit gelebilir. Kendi Gitea sunucunuzda ise sınırsız sayıda özel depo açabilirsiniz; kimin hangi depoya erişeceğine yalnızca siz karar verirsiniz.
Veri sahipliği. Kaynak kodu çoğu şirket için en değerli varlıklardan biridir. Bu kodun, hangi ülkedeki hangi veri merkezinde durduğunu bilmek ve denetlemek isteyen kurumlar için self-hosted bir çözüm doğal bir tercihtir. Kodunuz sizin sunucunuzda kaldığında, üçüncü tarafın kullanım şartlarındaki bir değişiklik ya da hesabınızın beklenmedik biçimde askıya alınması gibi risklerle karşılaşmazsınız.
Düşük kaynak ve düşük maliyet. GitLab gibi kapsamlı platformlar güçlüdür ama gigabaytlarca RAM isteyebilir. Gitea ise birkaç yüz megabayt bellekle çalışır. Bu, hem küçük bir sunucuya sığması hem de aylık maliyeti düşük tutması anlamına gelir. Kısıtlı bütçeyle çalışan ekipler için bu fark oldukça belirleyicidir.
Temel özellikler#
Gitea, "hafif" olmasına rağmen modern bir kod platformundan beklenen özelliklerin neredeyse tamamını sunar:
- Depo yönetimi: Sınırsız genel ve özel depo, dal koruması (branch protection), etiketler, sürümler (releases) ve büyük dosyalar için Git LFS desteği.
- Issue ve Pull Request akışı: Hata takibi, etiketler, kilometre taşları (milestone), atama, kod inceleme (code review) ve birleştirme (merge) iş akışları. Ekip çalışmasının bel kemiği olan bu araçlar GitHub'daki muadillerine oldukça benzer.
- Wiki ve proje panoları: Her depo için gömülü bir wiki ve kanban tarzı proje panoları ile dokümantasyon ve görev yönetimini aynı yerde tutabilirsiniz.
- Gitea Actions (CI/CD): GitHub Actions ile büyük ölçüde uyumlu, kendi bünyesinde çalışan bir sürekli entegrasyon sistemi. YAML iş akışlarıyla otomatik test, derleme ve dağıtım süreçleri kurabilirsiniz.
- Organizasyonlar ve takımlar: Kullanıcıları organizasyonlar altında toplayabilir, takımlara ayrı erişim izinleri verebilirsiniz.
- Webhook ve entegrasyonlar: Bir olay gerçekleştiğinde (push, yeni issue vb.) dış sistemlere bildirim gönderen webhook'lar; ayrıca kod düzenleyicilerle ve dış kimlik doğrulama sistemleriyle (LDAP, OAuth) entegrasyon.
- Paket kayıt sistemi: npm, Docker, Maven, NuGet gibi çeşitli paket türleri için gömülü bir kayıt (registry) sunar. Böylece paketlerinizi de aynı sunucuda barındırabilirsiniz.
- Gömülü kod arama ve dosya düzenleme: Depo içinde kod arayabilir, dosyaları doğrudan tarayıcıdan düzenleyebilirsiniz.
Bu özellik yelpazesi sayesinde Gitea, tek başına çalışan bir geliştirici için de, onlarca kişilik bir ekip için de yeterli bir zemin oluşturur.
Kimler için uygun?#
Gitea her senaryonun cevabı değildir; ama şu profillere özellikle iyi uyar:
- Küçük ve orta ölçekli yazılım ekipleri: Kurumsal bir platformun karmaşıklığına ihtiyaç duymayan ama düzenli bir kod yönetimi isteyen ekipler.
- Ajanslar ve serbest yazılımcılar: Müşteri projelerini ayrı organizasyonlar altında, gizli ve düzenli biçimde tutmak isteyenler.
- Gizliliğe önem veren kurumlar: Kodun yurt dışına çıkmaması gereken, KVKK ve iç güvenlik politikalarına duyarlı şirketler.
- Öğrenmek ve deneme yapmak isteyenler: Kendi Git sunucusunu kurup Git ekosistemini daha derinden anlamak isteyen bireysel geliştiriciler.
- Kısıtlı kaynaklı sunucularda çalışanlar: GitLab'in bellek iştahını kaldıramayacak küçük sunucularda barındırma yapanlar.
Ortak nokta şudur: tam kontrol ve düşük kaynak tüketimini önceliklendirenler için Gitea son derece mantıklı bir seçimdir.
GitHub ve GitLab ile karşılaştırma#
Gitea'yı değerlendirirken en çok merak edilen konu, popüler alternatiflerle nasıl kıyaslandığıdır. Aşağıdaki tablo temel farkları özetler:
| Özellik | Gitea | GitHub | GitLab (CE) |
|---|---|---|---|
| Barındırma | Self-host | Bulut (SaaS) | Self-host / Bulut |
| Kaynak kullanımı | Çok düşük (birkaç yüz MB RAM) | – (bulut) | Yüksek (birkaç GB RAM) |
| Kurulum kolaylığı | Çok kolay (tek dosya) | Kurulum yok | Orta / karmaşık |
| Lisans | Açık kaynak (MIT) | Kapalı kaynak | Açık kaynak (MIT, CE) |
| CI/CD | Gitea Actions | GitHub Actions | GitLab CI (güçlü) |
| Özel depo | Sınırsız | Plana bağlı | Sınırsız |
| Veri sahipliği | Tam | Sınırlı | Tam |
Kısaca özetlemek gerekirse: sıfır bakımla ve geniş bir ekosistemle çalışmak istiyorsanız GitHub; çok kapsamlı, tümleşik bir DevOps platformu ve güçlü bir CI/CD hattı arıyorsanız ve buna yetecek donanımınız varsa GitLab öne çıkar. Buna karşılık hafiflik, kolay kurulum, düşük maliyet ve tam veri sahipliği sizin için öncelikliyse Gitea çoğu ekip için dengeli ve pratik bir orta yoldur.
Kurulum ve gereksinimler#
Gitea'nın en sevilen yönlerinden biri kurulumunun gerçekten kolay olmasıdır. Aracı doğrudan tek bir çalıştırılabilir dosya olarak indirip çalıştırabilir ya da paket yöneticisiyle kurabilirsiniz. Ancak günümüzde en yaygın ve en temiz yöntem Docker ile kurulumdur. Docker temellerine yabancıysanız Docker başlangıç rehberimiz iyi bir başlangıç noktası olur.
Donanım gereksinimleri son derece mütevazıdır. Küçük bir ekip için 1 vCPU ve 1-2 GB RAM'e sahip bir sanal sunucu rahatlıkla yeterlidir. Depo sayınız ve eş zamanlı kullanıcılarınız arttıkça biraz daha kaynak ayırmanız gerekebilir, ancak Gitea'nın Go tabanlı yapısı sayesinde kaynak tüketimi çoğu alternatife göre çok daha düşük kalır.
Tipik bir docker-compose yapılandırması hem Gitea uygulamasını hem de kalıcı veri için bir veritabanını tek komutla ayağa kaldırır. Küçük kurulumlarda gömülü SQLite yeterlidir; büyüyen ekipler için PostgreSQL önerilir. Aşağıda PostgreSQL ile gerçekçi bir örnek yer alıyor:
services:
gitea:
image: gitea/gitea:latest
container_name: gitea
restart: always
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=degistirin_guclu_bir_parola
volumes:
- gitea_data:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "222:22"
depends_on:
- db
db:
image: postgres:16
container_name: gitea_db
restart: always
environment:
- POSTGRES_DB=gitea
- POSTGRES_USER=gitea
- POSTGRES_PASSWORD=degistirin_guclu_bir_parola
volumes:
- gitea_db:/var/lib/postgresql/data
volumes:
gitea_data:
gitea_db:
Bu yapıyı çalıştırmak için dosyayı bir dizine kaydedip aynı klasörde şu komutu vermeniz yeterlidir:
docker compose up -d
Örnekteki parolaların gerçek kurulumda mutlaka değiştirilmesi gerektiğini vurgulayalım. Yukarıdaki yapılandırmada 3000 portu web arayüzü için, 222 portu ise Git'in SSH erişimi içindir (sunucunun kendi 22 portuyla çakışmaması için farklı bir port kullandık).
İlk yapılandırma#
Konteynerler ayağa kalktıktan sonra tarayıcınızdan sunucunuzun IP adresine :3000 ekleyerek Gitea'nın ilk kurulum ekranına ulaşırsınız. Bu ekranda birkaç önemli ayar sizi karşılar:
- Veritabanı ayarları:
docker-composeiçinde tanımladığınız PostgreSQL bilgileri otomatik olarak gelir; doğruluğunu kontrol edin. - Site başlığı ve temel URL: Sunucunuzun erişileceği tam adresi (örneğin
https://git.sirketiniz.com) buraya girmek, ilerleyen adımlarda oluşacak bağlantıların doğru olması için kritiktir. - Yönetici hesabı: İlk (admin) hesabınızı bu adımda oluşturun. Bunu atlarsanız, sisteme kaydolan ilk kullanıcı otomatik olarak yönetici olur — bu yüzden kurulumu tamamlar tamamlamaz yönetici hesabını elinizle oluşturmanız daha güvenlidir.
Kurulum tamamlandığında ilk deponuzu oluşturabilirsiniz. Bir depoyu bilgisayarınıza klonlamak için iki yöntem vardır. HTTP üzerinden:
git clone https://git.sirketiniz.com/kullanici/depo.git
SSH üzerinden (bu örnekte 222 portunu kullandığımız için):
git clone ssh://[email protected]:222/kullanici/depo.git
SSH ile çalışmak için hesabınıza web arayüzünden bir SSH açık anahtarı (public key) eklemeniz gerekir. Git'in temel komutlarını hatırlamak isterseniz Git temelleri yazımız el altında bulunması iyi bir kaynaktır.
Ters vekil ve SSL#
Gitea'yı doğrudan 3000 portundan yayına almak yerine önüne bir ters vekil (reverse proxy) koymak önerilen yaklaşımdır. Böylece uygulamaya standart 443 portundan (HTTPS) erişilir, sertifika yönetimi tek noktada toplanır ve ileride birden fazla servisi aynı sunucuda barındırmak kolaylaşır. Nginx bunun için en yaygın tercihtir; kurulum ayrıntıları için Ubuntu üzerinde Nginx kurulumu rehberimize bakabilirsiniz.
Ters vekil kurduktan sonra ücretsiz bir TLS sertifikasıyla HTTPS'i etkinleştirmeniz gerekir. Let's Encrypt bu iş için pratik ve ücretsiz bir yol sunar; adım adım anlatım için Let's Encrypt ile ücretsiz SSL rehberimizi inceleyebilirsiniz. HTTPS olmadan Gitea'yı üretim ortamında yayına almak, giriş bilgilerinizin ve kodunuzun şifresiz aktarılması anlamına gelir — bu yüzden SSL bir tercih değil, zorunluluktur.
Ters vekil kullanırken, kurulum sırasında girdiğiniz temel URL'nin https:// ile başladığından ve alan adınızla eşleştiğinden emin olun. Aksi halde web arayüzünde gösterilen klonlama bağlantıları yanlış oluşur.
Yedekleme#
Kod deponuz işinizin özü olduğu için düzenli yedekleme pazarlık konusu olmamalıdır. Gitea'da yedeklenmesi gereken üç temel bileşen vardır: depoların kendisi (Git verisi), veritabanı ve yapılandırma dosyaları. Docker kurulumunda bunların çoğu, bağladığınız gitea_data biriminin içinde durur.
Gitea, tüm bu bileşenleri tek bir arşive toplayan gömülü bir yedekleme komutu sunar. Docker ortamında bunu şöyle çalıştırabilirsiniz:
docker exec -u git gitea gitea dump -c /data/gitea/conf/app.ini
Bu komut, depoları, veritabanını ve yapılandırmayı içeren bir .zip arşivi oluşturur. Oluşan arşivi düzenli olarak sunucu dışına, ayrı bir konuma kopyalamanız kritiktir; yedeği aynı sunucuda tutmak, sunucu tümden kaybolduğunda hiçbir işe yaramaz. PostgreSQL kullanıyorsanız veritabanını pg_dump ile ayrıca yedeklemek de ek bir güvenlik katmanı sağlar. Bu yedekleme işlemini bir zamanlanmış görev (cron) ile otomatikleştirmek, insan hatasını en aza indirir.
Güvenlik#
Kendi Git sunucunuzu yönetiyorsanız güvenliğinden de siz sorumlusunuz. Birkaç temel önlem, kurulumunuzu ciddi ölçüde sağlamlaştırır:
- Her zaman HTTPS kullanın. Yukarıda anlattığımız gibi SSL olmadan yayına almayın.
- Yönetici olmayan varsayılan kayıtları kapatın. Herkesin kaydolabildiği açık bir kayıt sistemi istemiyorsanız,
app.iniiçindeki kayıt ayarlarını kısıtlayın ya da kaydı yalnızca yöneticiye bırakın. - İki adımlı doğrulamayı (2FA) etkinleştirin. Gitea, TOTP tabanlı iki adımlı doğrulamayı destekler; özellikle yönetici hesapları için bunu açmak şarttır.
- SSH ve sunucu güvenliğini ihmal etmeyin. Sunucunun kendisini de sağlamlaştırmanız gerekir; SSH bağlantısı ve güvenliği ile sunucu güvenliğinin temelleri rehberlerimiz bu konuda yol gösterir.
- Güncel kalın. Gitea'yı ve temel imajlarını düzenli olarak güncelleyin. Docker kurulumunda güncelleme, imajı yenileyip konteyneri yeniden oluşturmak kadar basittir.
- Güvenlik duvarı kurun. Yalnızca gerekli portları (443 ve SSH) dışarıya açık tutun; veritabanı portunu asla internete açmayın.
Bu önlemler, kendi kontrolünüzdeki bir sistemin sunduğu özgürlüğü güvenlik riskine dönüştürmeden kullanmanızı sağlar.
Sıkça Sorulan Sorular#
Gitea ücretsiz mi?#
Evet. Gitea açık kaynaklıdır ve MIT lisansıyla tamamen ücretsiz dağıtılır. Herhangi bir kullanıcı, depo ya da özellik için lisans ücreti ödemezsiniz. Yalnızca aracı çalıştıracağınız sunucunun maliyeti vardır. Daha kapsamlı kurumsal ihtiyaçlar için ticari destek sunan Gitea Cloud gibi seçenekler de bulunur, ancak temel kullanım için bunlara gerek yoktur.
Gitea gerçekten GitHub'ın yerini tutar mı?#
Çoğu ekip için evet. Depo yönetimi, issue takibi, pull request iş akışı, wiki, CI/CD ve organizasyon yönetimi gibi günlük çalışmada ihtiyaç duyulan işlevlerin neredeyse tamamını sunar. Farkı ekosistem tarafında hissedersiniz; GitHub'ın devasa topluluğu ve üçüncü taraf entegrasyonları daha geniştir. Ancak kod yönetiminin çekirdek işlevleri açısından Gitea fazlasıyla yeterlidir ve veri sahipliği ile maliyet tarafında öne geçer.
Gitea çalışması için ne kadar kaynak gerekir?#
Gitea'nın en güçlü yanlarından biri düşük kaynak tüketimidir. Küçük bir ekip için 1 vCPU ve 1-2 GB RAM'e sahip mütevazı bir sunucu rahatlıkla yeterlidir. Bu, onu GitLab gibi birkaç gigabayt bellek isteyen alternatiflerden belirgin biçimde ayırır ve düşük maliyetli bir sunucuda barındırmayı mümkün kılar.
Gitea ile GitHub Actions iş akışlarımı çalıştırabilir miyim?#
Büyük ölçüde evet. Gitea Actions, GitHub Actions ile uyumlu olacak şekilde tasarlanmıştır ve benzer YAML söz dizimini kullanır. Mevcut iş akışlarınızın çoğu küçük düzenlemelerle çalışır. Yine de her eylemin (action) birebir aynı davranacağını garanti etmemek gerekir; kritik hatlarınızı taşıdıktan sonra mutlaka test etmelisiniz.
Verilerimi nasıl yedeklerim?#
Gitea, depoları, veritabanını ve yapılandırmayı tek bir arşive toplayan gömülü bir gitea dump komutu sunar. Bu komutu düzenli olarak çalıştırıp oluşan arşivi sunucu dışında, ayrı bir konumda saklamanız gerekir. En iyi uygulama, bu işlemi bir cron görevi ile otomatikleştirmek ve yedekleri düzenli aralıklarla test etmektir.
Küçük bir sunucuda Gitea barındırabilir miyim?#
Kesinlikle. Gitea, tam da bu tür senaryolar için idealdir. Go ile yazılmış tek dosyalık yapısı sayesinde küçük bir sanal sunucuda ya da düşük özellikli bir VDS üzerinde sorunsuz çalışır. Depo sayınız ve kullanıcı yoğunluğunuz arttıkça sunucunuzu büyütebilir, böylece ihtiyacınıza göre ölçekleyebilirsiniz.
Kapanış#
Gitea, kendi kod deponuzu üçüncü bir tarafa bağımlı kalmadan, düşük maliyetle ve tam kontrolle yönetmenin en pratik yollarından biridir. Hafif yapısı sayesinde küçük bir sunucuya bile sığar, buna rağmen modern bir Git platformundan beklediğiniz özelliklerin neredeyse tamamını sunar. Kodunuz sizin sunucunuzda kaldığında hem veri sahipliğini elde eder hem de öngörülemeyen plan değişikliklerinden korunmuş olursunuz.
Kendi Gitea sunucunuzu kurmak için sağlam ve ölçeklenebilir bir zemine ihtiyacınız var. Bu tür sürekli çalışan servisler için sanal sunucu (VDS) ve genel sunucu çözümlerimizi inceleyebilir, kurulumla tek tek uğraşmak istemiyorsanız hazır uygulamalar için App Center kataloğumuza göz atabilirsiniz. Kodunuzu kendi denetiminizde tutmaya bugün başlayabilirsiniz.