GitLab Kurulumu: Self-Hosted Sunucuya Adım Adım Kurulum
Yıllarca GitLab’ı sadece SaaS olarak kullananlardan biriydim. Sonra bir gün müşterimizin “kod dışarı çıkmasın” dedi ve self-hosted kurulum kaçınılmaz oldu. O ilk kurulum gecesini hâlâ hatırlıyorum: belgeleri okuyorum, bir yandan production ortamı kurmaya çalışıyorum, bir yandan da “acaba bir şeyi mahveder miyim” endişesiyle boğuşuyorum. Bu yazıyı o geceyi daha az acılı geçirmek isteyenler için yazıyorum.
Neden Self-Hosted GitLab?
GitLab.com ücretsiz ve kullanışlı, bunu kimse tartışmıyor. Ama kurumsal ortamlarda işler farklı işliyor. Compliance gereksinimleri, kodun şirket ağı dışına çıkmaması zorunluluğu, özel CI/CD runner ihtiyaçları veya basitçe “biz kendi altyapımızı yönetiriz” prensibi. Bunların herhangi biri varsa, self-hosted GitLab kaçınılmaz oluyor.
GitLab Community Edition (CE) tamamen açık kaynak ve ücretsiz. Enterprise Edition (EE) ise ek özellikler sunuyor ama lisans gerektiriyor. Çoğu ekip için CE gayet yeterli, kurulum adımları da neredeyse aynı.
Sistem Gereksinimleri
Kuruluma geçmeden önce doğru boyutlandırma kritik. GitLab oldukça ağır bir uygulama, bunu baştan kabul edelim.
Minimum (test ortamı için):
- 4 CPU core
- 4 GB RAM
- 20 GB disk
Önerilen (küçük-orta ekip, 20-50 kullanıcı):
- 8 CPU core
- 16 GB RAM
- 100 GB+ disk (SSD şiddetle tavsiye edilir)
Büyük ekipler (100+ kullanıcı):
- 16+ CPU core
- 32 GB RAM
- 500 GB+ SSD
Disk konusuna özellikle dikkat edin. GitLab’ın /var/opt/gitlab altında biriktirdiği veri, özellikle CI/CD artifact’ları ve container registry kullanıyorsanız, inanılmaz hızla büyüyor. Bir müşteride 6 ayda 200 GB’a çıktığını gördüm, kimse izlememişti.
Desteklenen işletim sistemleri arasında Ubuntu 20.04/22.04, Debian 11/12, CentOS/RHEL 8/9 ve Amazon Linux 2 var. Ben genellikle Ubuntu 22.04 veya RHEL 9 tercih ediyorum. Bu yazıda Ubuntu 22.04 üzerinden gideceğiz.
Kurulum Öncesi Hazırlık
Sunucuyu güncel tutmakla başlayalım:
sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get install -y curl openssh-server ca-certificates tzdata perl postfix
Postfix kurulumu sırasında “Internet Site” seçeneğini seçin ve sistem mail adını girin. GitLab bildirimler için mail göndereceğinden bu adım önemli, atlamayın.
Eğer bir firewall kullanıyorsanız HTTP, HTTPS ve SSH portlarını açın:
sudo ufw allow http
sudo ufw allow https
sudo ufw allow OpenSSH
sudo ufw enable
Şimdi hostname’i doğru ayarlayalım. GitLab kurulumunda en sık yapılan hatalardan biri bu adımı atlamak. Sonradan değiştirmek mümkün ama can sıkıcı:
sudo hostnamectl set-hostname gitlab.sirketiniz.com
/etc/hosts dosyasını da güncelleyin:
echo "SUNUCU_IP gitlab.sirketiniz.com" | sudo tee -a /etc/hosts
GitLab Paketinin Kurulumu
GitLab’ın resmi Omnibus paketi en temiz kurulum yöntemi. Docker veya Helm chart alternatifleri mevcut ama özellikle ilk kurulum için Omnibus’un getirdiği “her şey dahil” kolaylığı tartışmasız.
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
CE kullanmak isteyenler için URL’deki gitlab-ee kısmını gitlab-ce olarak değiştirin. Ben genellikle EE kuruyorum, lisans olmasa bile CE özellikleriyle çalışıyor ve ilerleyen dönemde lisans eklemek çok daha kolay oluyor.
Şimdi asıl kurulum komutu. EXTERNAL_URL değişkeni kritik, bunu doğru girmezseniz GitLab yanlış URL ile çalışacak:
sudo EXTERNAL_URL="https://gitlab.sirketiniz.com" apt-get install -y gitlab-ee
HTTP kullanmak isteyenler (ki production’da önerilmez):
sudo EXTERNAL_URL="http://gitlab.sirketiniz.com" apt-get install -y gitlab-ee
Kurulum 10-15 dakika sürebilir. GitLab bu sürede PostgreSQL, Redis, Nginx, Puma ve diğer bileşenleri kurup yapılandırıyor. Sabırla bekleyin.
İlk Giriş ve Şifre
Kurulum tamamlandıktan sonra root kullanıcısının geçici şifresi şu dosyada:
sudo cat /etc/gitlab/initial_root_password
Bu dosya 24 saat sonra otomatik siliniyor. Hemen not alın ve root şifresini değiştirin.
Tarayıcınızdan https://gitlab.sirketiniz.com adresine gidin, root kullanıcısı ve bu şifreyle girin. İlk yaptığınız iş root şifresini değiştirmek olsun.
gitlab.rb ile Temel Yapılandırma
GitLab’ın ana yapılandırma dosyası /etc/gitlab/gitlab.rb. Bu dosya yaklaşık 1500 satır ve her şeyi buradan yönetiyorsunuz. Her değişiklikten sonra gitlab-ctl reconfigure çalıştırmanız gerekiyor.
sudo nano /etc/gitlab/gitlab.rb
Temel ayarlar:
# Harici URL - kurulumda zaten ayarlandı ama kontrol edin
external_url 'https://gitlab.sirketiniz.com'
# Zaman dilimi
gitlab_rails['time_zone'] = 'Europe/Istanbul'
# E-posta ayarları
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = '[email protected]'
gitlab_rails['gitlab_email_display_name'] = 'GitLab'
gitlab_rails['gitlab_email_reply_to'] = '[email protected]'
# SMTP ayarları (örnek: Gmail SMTP)
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.gmail.com"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "[email protected]"
gitlab_rails['smtp_password'] = "uygulama-sifresi"
gitlab_rails['smtp_domain'] = "sirketiniz.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
# Yeni kullanıcı kaydını kapat (kurumsal kullanım için önerilir)
gitlab_rails['gitlab_signup_enabled'] = false
Değişiklikleri uygulamak için:
sudo gitlab-ctl reconfigure
SSL/TLS Yapılandırması
EXTERNAL_URL’yi https:// ile verdiyseniz GitLab otomatik olarak Let’s Encrypt sertifikası almaya çalışır. Sunucunuz internete açıksa bu genellikle çalışır. İnternete kapalı internal ağdaysanız kendi sertifikanızı kullanmanız gerekir.
Özel sertifika kullanımı:
sudo mkdir -p /etc/gitlab/ssl
sudo chmod 700 /etc/gitlab/ssl
# Sertifika dosyalarını kopyalayın
sudo cp sirketiniz.com.crt /etc/gitlab/ssl/gitlab.sirketiniz.com.crt
sudo cp sirketiniz.com.key /etc/gitlab/ssl/gitlab.sirketiniz.com.key
sudo chmod 600 /etc/gitlab/ssl/*
gitlab.rb dosyasında Let’s Encrypt’i devre dışı bırakın:
letsencrypt['enable'] = false
nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.sirketiniz.com.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.sirketiniz.com.key"
Sonra tekrar reconfigure çalıştırın.
Backup Yapılandırması
Kurulumun üçüncü gününde backup almayı düşünüyorsanız, o zaman zaten geç kalmışsınızdır. İlk günden backup rutinini kurun.
GitLab kendi backup mekanizmasına sahip:
sudo gitlab-backup create
Bu komut /var/opt/gitlab/backups/ altında bir tar dosyası oluşturuyor. Yapılandırma dosyaları bu backup’a dahil değil, onları ayrıca yedeklemeniz gerekiyor:
sudo tar -czf /backup/gitlab-config-$(date +%Y%m%d).tar.gz
/etc/gitlab/gitlab.rb
/etc/gitlab/gitlab-secrets.json
gitlab-secrets.json dosyasını backup almayı asla atlamayın. Bu dosya olmadan veritabanı backup’ınızı restore edemezsiniz.
Otomatik backup için cron job:
sudo crontab -e
# Her gün gece 02:00'da backup al
0 2 * * * /opt/gitlab/bin/gitlab-backup create CRON=1
# Eski backupları temizle (7 günden eskilerini sil)
0 3 * * * find /var/opt/gitlab/backups -name "*.tar" -mtime +7 -delete
gitlab.rb içinde backup retention ayarı da yapabilirsiniz:
gitlab_rails['backup_keep_time'] = 604800 # 7 gün (saniye cinsinden)
GitLab Runner Kurulumu
CI/CD kullanmak istiyorsanız en az bir runner kurmanız gerekiyor. Runner, GitLab sunucusunun dışında ayrı bir makinede çalışması önerilir. Aynı sunucuda da çalışabilir ama yük altında pişman olabilirsiniz.
Runner kurulumu (ayrı bir Ubuntu sunucusunda):
curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash
sudo apt-get install gitlab-runner
# Runner'ı servis olarak başlat
sudo systemctl enable gitlab-runner
sudo systemctl start gitlab-runner
Runner’ı GitLab’a kaydetmek için önce Admin Panel > CI/CD > Runners bölümünden registration token’ı alın. Sonra:
sudo gitlab-runner register
--url "https://gitlab.sirketiniz.com"
--registration-token "TOKEN_BURAYA"
--description "production-runner-01"
--tag-list "docker,production"
--executor "docker"
--docker-image "ubuntu:22.04"
Docker executor kullanıyorsanız runner makinesinde Docker kurulu olmalı:
sudo apt-get install -y docker.io
sudo usermod -aG docker gitlab-runner
Performans Tuning
Küçük sunucularda GitLab bazen yavaş hissettiriyor. Birkaç kritik ayar:
# Puma worker sayısını sınırla (düşük RAM'li sunucular için)
puma['worker_processes'] = 2
# Sidekiq concurrency
sidekiq['concurrency'] = 10
# PostgreSQL shared buffers
postgresql['shared_buffers'] = "256MB"
# Unicorn/Puma timeout
puma['worker_timeout'] = 60
# Prometheus monitoring'i kapat (RAM tasarrufu için, opsiyonel)
prometheus_monitoring['enable'] = false
4 GB RAM’li bir sunucuda bu ayarlarla GitLab gayet makul çalışıyor. 8 GB ve üzerinde standart ayarlar genellikle yeterli.
Güvenlik Sertleştirme
Production ortamında mutlaka yapılması gerekenler:
Admin Area > Settings > General bölümünden:
- Sign-up restrictions: Kapalı tutun, sadece davet ile katılım
- Require admin approval for new sign-ups: Açın
- Two-factor authentication: Tüm kullanıcılar için zorunlu yapın
- Session duration: İhtiyacınıza göre ayarlayın
SSH key algoritmaları için gitlab.rb:
gitlab_rails['gitlab_shell_ssh_port'] = 22
# Zayıf SSH algoritmalarını devre dışı bırak
nginx['custom_gitlab_server_config'] = "
add_header Strict-Transport-Security 'max-age=31536000';
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
"
Fail2ban ile brute force koruması:
sudo apt-get install fail2ban
/etc/fail2ban/jail.local:
[gitlab]
enabled = true
filter = gitlab
logpath = /var/log/gitlab/gitlab-rails/application.log
maxretry = 10
findtime = 3600
bantime = 3600
Sorun Giderme
GitLab servislerinin durumunu kontrol etmek için:
sudo gitlab-ctl status
Logları takip etmek için:
# Tüm loglar
sudo gitlab-ctl tail
# Sadece Nginx logları
sudo gitlab-ctl tail nginx
# Application logları
sudo gitlab-ctl tail gitlab-rails
Sık karşılaşılan sorunlar:
502 Bad Gateway: Puma başlamamış ya da çökmüş demek. gitlab-ctl restart puma deneyin ve logları inceleyin.
Disk doldu, push kabul etmiyor: /var/opt/gitlab diskini kontrol edin. CI artifact’larını temizlemek için Admin > CI/CD > Job Artifacts bölümüne bakın.
Reconfigure takılı kalıyor: Genellikle PostgreSQL migration’larında olur. Sabırla bekleyin, 10-15 dakika sürebilir. Takılıp kalmışsa sudo gitlab-ctl stop sonra tekrar reconfigure deneyin.
LDAP entegrasyonu çalışmıyor: sudo gitlab-rake gitlab:ldap:check komutu durumu size söyler.
GitLab sürümünü güncellemek için:
sudo apt-get update
sudo apt-get install gitlab-ee
# veya
sudo apt-get install gitlab-ce
Güncelleme öncesi mutlaka backup alın ve GitLab’ın sürüm atlama kısıtlamalarını kontrol edin. Bazı sürümler arası direkt geçiş desteklenmiyor, ara sürümden geçmeniz gerekebilir.
Sonuç
Self-hosted GitLab kurmak ilk bakışta göz korkutucu ama aslında Omnibus paketi işlerin büyük kısmını sizin yerinize hallediyor. Kritik noktaları özetlersek: doğru boyutlandırma yapın, backup’ı ihmal etmeyin ve gitlab-secrets.json dosyasını her zaman güvende tutun. SSL’i doğru kurun, signup’ı kapatın, runner’ı ayrı bir makinede çalıştırın.
GitLab’ın en güzel yanlarından biri kapsamlı belgelerinin olması. Bir sorunla karşılaştığınızda büyük ihtimalle GitLab Docs’ta veya GitLab’ın kendi issue tracker’ında çözümü bulabilirsiniz. Topluluk oldukça aktif ve CE kullanıcıları da destek açısından ihmal edilmiyor.
Kurulum sonrasında ilk yapmanız gereken şey bir disaster recovery senaryosu yazmak. Bugün aldığınız backup’ı başka bir sunucuya restore edebiliyor musunuz? Bunu test etmeden işin bittiğini düşünmeyin. Gerçek anlamda güvenilir bir GitLab kurulumu, restore testi başarıyla geçen kurulumdan ibarettir.
