Blue-Green Deployment, yazılım uygulamalarının yeni sürümlerini kesinti olmadan yayınlamak ve gerekirse eski sürüme hızlı bir şekilde geri dönmek için kullanılan bir yayınlama stratejisidir. Bu yöntem, hem geliştirici ekiplerine hem de son kullanıcılara önemli avantajlar sunar.


Blue-Green Deployment Nedir?

Blue-Green Deployment, üretimdeki sistemin iki ayrı sürümünün (çoğu zaman "blue" ve "green" olarak adlandırılır) aynı anda hazır bulundurulduğu bir yayınlama modelidir:

  • Blue (Mevcut Sürüm): Halihazırda çalışan ve tüm trafiği alan kararlı sürüm.
  • Green (Yeni Sürüm): Yeni özellikler ve değişiklikler içeren, hazırda bekleyen sürüm.

Kullanıcı trafiği, bir ters proxy veya load balancer (NGINX gibi) aracılığıyla bu iki sürüm arasında hızlıca aktarılabilir.

Avantajları

  1. Kesintisiz Geçiş: Trafik yeni sürüme taşındıktan sonra bile mevcut sürüm hazır bekler, böylece eski sürüme kolayca geri dönülebilir.
  2. Risk Azaltma: Yeni sürümün hataları sınırlı bir gruba yönlendirilebilir, örneğin test kullanıcılarına.
  3. Kolay Test: Gerçek dünya koşullarında, çok daha doğru şekilde test yapılabilir.
  4. Rollback: Yeni sürümde bir hata bulunduğunda trafiği hemen eski sürüme geri yönlendirme.

Bu Yönteme Neden İhtiyaç Duyarız?

  1. Kesintisiz Hizmet: Kullanıcı deneyimini etkilemeden yazılımı güncelleyebilmek.
  2. Hızlı Rollback: Beklenmedik hataların çıkması durumunda eski kararlı sürümü aktif edebilmek.
  3. Daha Az Riskli Yayınlama: Yeni sürümü tüm kullanıcılara sunmadan önce düşük riskle test edebilmek.

Blue-Green Deploymentın Mimari Yapısı

Bu yöntemi uygulamak için aşağıdaki adımlar ve bıleşenler gereklidir:

1. Sunucular/Dizinler

  • Blue Sürüm: Eski sürüm, örneğin /var/www/app_blue/
  • Green Sürüm: Yeni sürüm, örneğin /var/www/app_green/

2. NGINX (Ters Proxy)

NGINX, kullanıcı isteklerini blue ve green sürümlerine yönlendirmek için kullanılır.

3. Gunicorn (Uygulama Sunucusu)

Her iki sürüm de farklı portlarda veya socket dosyalarında çalışacak şekilde ayarlanır: - Blue: unix:/var/www/app_blue/gunicorn.sock - Green: unix:/var/www/app_green/gunicorn.sock


Blue-Green Deployment Nasıl Uygulanır?

Aşağıda, bir Django uygulaması için Blue-Green Deploymentını nasıl yapabileceğiniz anlatılmıştır.

1. Dizin Yapısı Hazırlama

Mevcut blue sürümü yeni bir dizine kopyalayın:

cp -r /var/www/app_blue /var/www/app_green

Yeni sürümün kodunu green dizinine deploy edin ve gerekirse virtual environmentı yeniden oluşturun:

cd /var/www/app_green
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

2. Gunicorn Servis Dosyası Oluşturma

Her iki sürüm için ayrı Gunicorn servis dosyaları oluşturun.

Blue Sürümü (Zaten çalışıyor olabilir):

/etc/systemd/system/gunicorn_blue.service

[Unit]
Description=Gunicorn for Blue Version of Example
After=network.target

[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/app_blue
ExecStart=/var/www/app_blue/venv/bin/gunicorn --workers 3 --bind unix:/var/www/app_blue/gunicorn.sock project.wsgi:application

[Install]
WantedBy=multi-user.target

Green Sürümü:

/etc/systemd/system/gunicorn_green.service

[Unit]
Description=Gunicorn for Green Version of Example
After=network.target

[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/app_green
ExecStart=/var/www/app_green/venv/bin/gunicorn --workers 3 --bind unix:/var/www/app_green/gunicorn.sock project.wsgi:application

[Install]
WantedBy=multi-user.target

Servisleri etkinleştirin ve başlatın:

sudo systemctl daemon-reload
sudo systemctl enable gunicorn_blue.service gunicorn_green.service
sudo systemctl start gunicorn_green.service

3. NGINX Yapılandırması

NGINX, blue ve green sürümler arasında trafiği yönlendirecek şekilde ayarlanmalıdır.

upstreams.conf

/etc/nginx/conf.d/upstreams.conf dosyasını oluşturun:

upstream app_blue {
    server unix:/var/www/app_blue/gunicorn.sock;
}

upstream app_green {
    server unix:/var/www/app_green/gunicorn.sock;
}

Site Konfigürasyonu

/etc/nginx/sites-available/example.com dosyasını düzenleyin:

server {
    listen 80;
    server_name example.com www.example.com;

    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name example.com www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;

    location / {
        proxy_pass http://app_blue; # Mevcut sürüm (Blue)
        # proxy_pass http://app_green; # Yeni sürüm (Green)

        include proxy_params;
    }
}

NGINX'i yeniden başlatın:

sudo nginx -t
sudo systemctl reload nginx

4. Geçiş Yapma ve Rollback

  1. Yeni sürümü etkinleştirmek için:
  2. NGINX konfigürasyonunda proxy_pass http://app_green; satırını etkinleştirin.
  3. NGINX'i yeniden başlatın: bash sudo systemctl reload nginx

  4. Sorun yaşarsanız, proxy_pass http://app_blue; satırına geri dönerek eski sürüme kolayca geçebilirsiniz.


Sonuç

Blue-Green Deployment, hem geliştirici ekiplerine hem de kullanıcılara önemli avantajlar sunan güvenli bir yayınlama modelidir. NGINX ve Gunicorn kullanarak bu yapıyı basit ve etkili bir şekilde uygulayabilirsiniz. Bu yöntemle sisteminiz hem kesintisiz çalışacak hem de yeni sürümleri yayınlamanız daha az riskli hale gelecektir.

Intricate Crystal Cluster
“Create a dense cluster of various crystal shapes with thick black outlines on a white background. Overlap the crystals so they form a complex, layered centerpiece, strictly 2D with no perspective, and ensure no edges or borders are formed.”