Ana içeriğe geç

GitLab CI/CD ile Ubuntu Üzerinde Sürekli Dağıtım (CD) Kurulumu

Bu rehberde ne öğreneceksiniz?

Bu rehberde

oaicite:0
CI/CD ile
oaicite:1
çalışan bir sunucuya
oaicite:2
tabanlı otomatik dağıtım hattı kuracaksınız.

Her commit sonrası Docker imajı üretme, registry’ye gönderme ve SSH ile canlıya alma sürecini öğreneceksiniz.
Rollback (geri alma) dahil, gerçek hayatta kullanılan production-ready bir CD yapısı kuracağız.
Kısaca: push at → site otomatik güncellensin. Reis işi 😎


🧠 Aşama 1 – Teknik Analiz (Özet)

Ana konu: GitLab CI/CD ile Continuous Deployment kurulumu
Çözülen problem: Manuel deploy, insan hatası ve zaman kaybı

İzlenen adımlar:

  • GitLab reposu oluşturma
  • GitLab Runner kurma
  • SSH ile güvenli deploy
  • Docker imajı üretme ve çalıştırma
  • Rollback (geri alma)

📦 Ön Gereksinimler

  • Ubuntu 18.04 veya üzeri bir sunucu
  • En az 1 GB RAM, 1 CPU
  • Sunucuda Docker kurulu olmalı
  • Container Registry açık bir GitLab hesabı
  • sudo yetkili, root olmayan kullanıcı

1️⃣ GitLab Projesi Oluşturma

GitLab’te New Project → Blank Project seçin.
Proje adını belirleyin ve görünürlüğü ihtiyaca göre ayarlayın.

index.html oluşturma

<html>
<body>
<h1>My Personal Website</h1>
</body>
</html>
  • Bu dosya, deploy sonrası tarayıcıda görüntülenecek örnek web sayfasıdır.

2️⃣ Dockerfile Oluşturma

  1. Dockerfile
COPY index.html /usr/share/nginx/html
  • Bu Dockerfile, Nginx imajı üzerine statik site ekler. Sabit sürüm kullanmak, ileride sürpriz yaşamamak için iyi pratiktir.

3️⃣ GitLab Runner Kurulumu

  1. Sunucuya bağlanın:

ssh deployer@SUNUCU_IP

  1. GitLab Runner’ı kurun:

curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash
sudo apt install gitlab-runner
  • Bu servis CI/CD job’larını çalıştırır.

  1. Runner’ı projeye kaydedin:

sudo gitlab-runner register -n \
--url https://gitlab.com \
--registration-token PROJE_TOKEN \
--executor docker \
--docker-image docker:stable \
--tag-list deployment \
--docker-privileged
  • Bu runner yalnızca bu proje için deploy işlemi yapar. Shared runner derdi yok, güvenlik bizde. 💪

4️⃣ Deployment Kullanıcısı Oluşturma


sudo adduser deployer
sudo usermod -aG docker deployer
  • Bu kullanıcı sadece dağıtım işlemleri için kullanılır.

(Evet, Docker grubu root kadar yetkili — bilerek yapıyoruz.)


5️⃣ SSH Anahtarı Oluşturma


su deployer
ssh-keygen -b 4096
  • cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  • CI/CD pipeline bu anahtar ile sunucuya bağlanır.

Parola boş bırakılır; pipeline interaktif değildir.


6️⃣ SSH Anahtarını GitLab’e Kaydetme

  1. GitLab → Settings → CI/CD → Variables
KeyTypeAçıklama
ID_RSAFileSSH private key
SERVER_IPVariableSunucu IP
SERVER_USERVariabledeployer

ID_RSA değişkeni Protected olarak işaretlenmelidir.


7️⃣ .gitlab-ci.yml Dosyası


stages:
- publish
- deploy

variables:
TAG_LATEST: $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:latest
TAG_COMMIT: $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:$CI_COMMIT_SHORT_SHA

publish:
image: docker:latest
stage: publish
services:
- docker:dind
script:
- docker build -t $TAG_COMMIT -t $TAG_LATEST .
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
- docker push $TAG_COMMIT
- docker push $TAG_LATEST

deploy:
image: alpine:latest
stage: deploy
tags:
- deployment
script:
- chmod og= $ID_RSA
- apk add --no-cache openssh-client
- ssh -i $ID_RSA -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP "docker pull $TAG_COMMIT"
- ssh -i $ID_RSA -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP "docker rm -f my-app || true"
- ssh -i $ID_RSA -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP "docker run -d -p 80:80 --name my-app $TAG_COMMIT"
environment:
name: production
url: http://SUNUCU_IP
only:
- master

  • Bu yapı Docker imajını üretir ve otomatik olarak canlıya alır. Commit attın mı? Site güncel. Olay bu 😎

8️⃣ Deploy Doğrulama

  1. GitLab → CI/CD → Pipelines
  • Pipeline durumu Passed olmalıdır.
  1. Tarayıcıdan kontrol edin:

http://SUNUCU_IP

  • Sunucuda konteyneri doğrulayın:

docker ps
  • my-app konteyneri çalışıyor olmalıdır.

🔄 Rollback (Geri Alma)

  1. Eski deployment için Run Again tıklayın

  2. GitLab eski imajı tekrar deploy eder

  3. Canlı sistem önceki haline döner


❓ Sıkça Sorulan Sorular (SSS)

1. Bu yapı production için uygun mu? Evet, küçük ve orta ölçekli projeler için gayet uygundur.

2. SSH yerine başka yöntemler var mı? Evet, Kubernetes veya GitOps tercih edilebilir.

3. Shared Runner kullanabilir miyim? Güvenlik sebebiyle önerilmez.

4. HTTPS nasıl eklenir? Nginx + Let’s Encrypt veya Traefik kullanılabilir.

5. Rollback neden başarısız olur? Eski imaj registry’den silinmiş olabilir.


🎯 Sonuç Bu rehberle GitLab CI/CD kullanarak tam otomatik bir dağıtım zinciri kurdunuz. Her commit sonrası uygulamanız kendi kendine yayına alınır.

👉 Rabisu Bulut altyapısında bu yapıyı dakikalar içinde hayata geçirebilirsiniz.