Takip et

PHP Uygulama Dağıtım Sürecini Capistrano ile Otomatikleştirme: Ubuntu 13 Üzerinde Kapsamlı Bir Rehber

PHP Uygulama Dağıtım Sürecini Capistrano ile Otomatikleştirme: Ubuntu 13 Üzerinde Kapsamlı Bir Rehber Günümüz yazılım geliştirme dünyas

PHP Uygulama Dağıtım Sürecini Capistrano ile Otomatikleştirme: Ubuntu 13 Üzerinde Kapsamlı Bir Rehber

Günümüz yazılım geliştirme dünyasında, uygulamaların hızlı, güvenilir ve tekrarlanabilir bir şekilde canlı ortama alınması kritik öneme sahiptir. Manuel dağıtım süreçleri zaman alıcıdır, insan hatasına açıktır ve genellikle tutarsız sonuçlar doğurur. Özellikle PHP gibi dinamik dillerde geliştirilen uygulamalar için bu durum, geliştiricilerin verimliliğini düşüren ve operasyonel riskleri artıran bir faktör haline gelebilir. İşte tam bu noktada, otomasyon araçları devreye girer. Bu makalede, Ruby tabanlı güçlü bir otomasyon aracı olan Capistrano’yu kullanarak PHP uygulamalarınızın dağıtım sürecini Ubuntu 13 sunucular üzerinde nasıl otomatikleştireceğinizi adım adım inceleyeceğiz.

Her ne kadar Ubuntu 13 eski bir işletim sistemi sürümü olsa da, Capistrano’nun temel prensipleri ve dağıtım mantığı modern Ubuntu sürümleri ve diğer Linux dağıtımları için de büyük ölçüde geçerlidir. Bu rehber, Capistrano’nun kurulumundan yapılandırmasına, sunucu hazırlığından ilk dağıtımın gerçekleştirilmesine kadar tüm süreci kapsayarak, PHP geliştiricilerine dağıtım otomasyonunun kapılarını aralayacaktır.

Neden Dağıtım Otomasyonu?

Dağıtım otomasyonu, yazılım geliştirme yaşam döngüsünün en önemli aşamalarından biridir. Manuel dağıtımın getirdiği zorluklar ve otomasyonun sunduğu avantajlar aşağıdaki gibi özetlenebilir:

  • Hata Azaltma: Manuel adımlar, unutulan bir dosya kopyalama, yanlış bir komut çalıştırma veya eksik bir yapılandırma gibi hatalara yol açabilir. Otomatikleştirilmiş süreçler, bu tür insan hatalarını ortadan kaldırır.
  • Tutarlılık: Her dağıtım aynı adımları, aynı sırada ve aynı şekilde gerçekleştirir. Bu, farklı ortamlar (geliştirme, test, hazırlık, üretim) arasında tutarlılık sağlar.
  • Hız: Dakikalar hatta saniyeler içinde dağıtım yapabilme yeteneği, hızlı geri bildirim döngüleri ve daha sık yayınlar anlamına gelir.
  • Tekrarlanabilirlik: Bir dağıtımın herhangi bir zamanda ve herhangi bir ortamda sorunsuz bir şekilde tekrarlanabilmesini sağlar.
  • Geri Alma (Rollback) Kolaylığı: Otomatikleştirilmiş sistemler, sorunlu bir dağıtımın hızla önceki çalışan sürüme geri alınmasını kolaylaştırır, bu da kesinti süresini minimize eder.
  • Ekip Verimliliği: Geliştiriciler, dağıtımın teknik detaylarıyla uğraşmak yerine kod yazmaya ve yeni özellikler geliştirmeye odaklanabilirler.

Capistrano’ya Giriş

Capistrano Nedir?

Capistrano, Ruby ile yazılmış, uzak sunucularda otomasyon görevlerini gerçekleştirmek için tasarlanmış bir açık kaynak araçtır. Özellikle web uygulamalarının dağıtımı için popülerdir. SSH üzerinden sunuculara bağlanarak komutları çalıştırır, dosya transferleri yapar ve uygulama yaşam döngüsünü yönetir. Capistrano’nun temel özellikleri şunlardır:

  • Ruby Tabanlı: Konfigürasyon dosyaları Ruby dilinde yazılır, bu da esneklik ve genişletilebilirlik sağlar.
  • SSH Üzerinden Çalışma: Tüm işlemler güvenli bir şekilde SSH protokolü üzerinden gerçekleştirilir.
  • Paralel Çalışma: Birden fazla sunucuya aynı anda dağıtım yapabilir.
  • Sürüm Yönetimi: Uygulamanın farklı sürümlerini sunucuda tutar ve kolayca geri alma imkanı sunar.
  • Genişletilebilir: Eklentiler (gem’ler) ve özel görevler (task’ler) aracılığıyla kolayca genişletilebilir.

Neden Capistrano PHP Uygulamaları İçin Uygun?

Capistrano, başlangıçta Ruby on Rails uygulamaları için geliştirilmiş olsa da, genel bir uzak otomasyon aracı olduğu için PHP uygulamaları için de mükemmel bir şekilde kullanılabilir. PHP ekosistemindeki Composer, Symfony, Laravel gibi araçlarla entegrasyonu sağlayan eklentileri (gem’ler) mevcuttur. PHP uygulamalarının dağıtımında sıklıkla karşılaşılan Composer bağımlılıklarının yüklenmesi, cache temizliği, veritabanı migrasyonları gibi adımlar Capistrano ile kolayca otomatikleştirilebilir.

Ön Gereksinimler

Capistrano ile PHP uygulama dağıtımını otomatikleştirmek için hem geliştirme ortamınızda hem de hedef sunucunuzda belirli araçların kurulu ve yapılandırılmış olması gerekir.

Geliştirme Ortamı (Local Makine)

  • Ruby ve Bundler

    Capistrano bir Ruby uygulaması olduğu için, makinenizde Ruby kurulu olmalıdır. Ubuntu 13 üzerinde Ruby kurulumu için apt-get kullanabilirsiniz, ancak sürüm yöneticileri (RVM veya rbenv) kullanmak daha iyi bir yaklaşımdır, zira farklı projeler için farklı Ruby sürümlerine ihtiyacınız olabilir.

    sudo apt-get update
    sudo apt-get install ruby-full # Veya RVM/rbenv kurulumu
    sudo gem install bundler

    Bundler, Ruby projelerinin bağımlılıklarını yönetmek için kullanılır.

  • Git

    Uygulamanızın kaynak kodu bir Git deposunda olmalıdır. Capistrano, kodu bu depodan çekecektir.

    sudo apt-get install git
  • SSH Anahtarları

    Capistrano’nun sunucuya güvenli bir şekilde bağlanabilmesi için SSH anahtar çifti (public/private key) gereklidir. Geliştirme makinenizdeki public anahtarınızın, hedef sunucudaki ~/.ssh/authorized_keys dosyasına eklenmiş olması önemlidir.

    ssh-keygen -t rsa -b 4096 -C "your_email@example.com" # Eğer anahtarınız yoksa
    ssh-copy-id deploy_user@your_server_ip # Public anahtarınızı sunucuya kopyalamak için

Sunucu Ortamı (Ubuntu 13)

  • Ubuntu 13 İşletim Sistemi

    Dağıtımın yapılacağı sunucuda Ubuntu 13 kurulu ve SSH erişimi açık olmalıdır.

  • Web Sunucusu

    Uygulamanızı çalıştırmak için Apache veya Nginx gibi bir web sunucusu kurulu ve yapılandırılmış olmalıdır. Bu rehberde, Nginx ve PHP-FPM kombinasyonunu varsayacağız.

    sudo apt-get install nginx php5-fpm php5-cli php5-mysql # Gerekli diğer PHP eklentileri
  • Veritabanı Sunucusu

    Uygulamanızın kullandığı veritabanı (MySQL, PostgreSQL vb.) kurulu olmalıdır.

    sudo apt-get install mysql-server
  • Git

    Capistrano, sunucu üzerinde Git komutlarını kullanarak depodan kodu çeker. Bu nedenle sunucuda Git kurulu olmalıdır.

    sudo apt-get install git
  • Composer

    PHP bağımlılıklarını yönetmek için Composer’ın sunucuda kurulu olması gereklidir.

    curl -sS https://getcomposer.org/installer | php
    sudo mv composer.phar /usr/local/bin/composer
  • Dizin İzinleri ve Kullanıcı

    Dağıtım işlemini gerçekleştirecek bir deploy kullanıcısı oluşturulmalı ve bu kullanıcının dağıtım dizinlerine yazma/okuma/çalıştırma izinleri olmalıdır. Ayrıca, web sunucusunun (nginx/apache) PHP-FPM üzerinden uygulama dosyalarına erişebilmesi için uygun izinler ayarlanmalıdır.

Capistrano Kurulumu ve Projeye Entegrasyonu

Şimdi Capistrano’yu geliştirme ortamınıza kurup PHP projenize entegre edelim.

1. Capistrano Gem’lerini Ekleme

Projenizin kök dizininde bir Gemfile oluşturun (eğer yoksa) ve Capistrano ile ilgili gem’leri ekleyin:

# Gemfile
source 'https://rubygems.org'

gem 'capistrano', '~> 3.11' # Ubuntu 13 için daha eski bir Capistrano sürümü gerekebilir.
gem 'capistrano-php', '~> 1.0'
gem 'capistrano-composer', '~> 1.0'

İsteğe bağlı, eğer Symfony projesi ise:

gem 'capistrano-symfony', '~> 1.x'

Daha sonra terminalde projenizin kök dizininde bundle install komutunu çalıştırarak gem’leri yükleyin:

bundle install

2. Capistrano Dosyalarını Oluşturma

Capistrano’nun temel yapılandırma dosyalarını oluşturmak için aşağıdaki komutu kullanın:

bundle exec cap install

Bu komut, projenizin kök dizininde aşağıdaki dosyaları oluşturacaktır:

  • Capfile: Capistrano’nun ana giriş noktasıdır ve eklentileri yükler.
  • config/deploy.rb: Tüm ortamlar için geçerli temel dağıtım yapılandırmalarını içerir.
  • config/deploy/staging.rb: Hazırlık (staging) ortamına özel yapılandırmalar.
  • config/deploy/production.rb: Üretim (production) ortamına özel yapılandırmalar.

Capistrano Konfigürasyonu

Capistrano’nun doğru çalışabilmesi için config/deploy.rb ve ortam dosyalarını (config/deploy/production.rb gibi) dikkatlice yapılandırmamız gerekir.

Temel Ayarlar (config/deploy.rb)

Bu dosya, uygulamanızın adı, Git deposunun URL’si, dağıtımın yapılacağı dizin gibi global ayarları içerir.

# config/deploy.rb

Uygulamanızın adı

set :application, 'my-php-app'

Git deposunun URL'si

set :repo_url, 'git@github.com:your-username/my-php-app.git'

Dağıtımın yapılacağı sunucudaki ana dizin

set :deploy_to, "/var/www/#{fetch(:application)}"

Dağıtılacak Git dalı (branch)

set :branch, ENV['BRANCH'] || 'master'

SCM (Source Code Management) tipi

set :scm, :git

Çıktı formatı ve log seviyesi

set :format, :pretty set :log_level, :debug # Hata ayıklama için debug, normalde info

Paylaşılan dosyalar ve dizinler. Bu dosyalar/dizinler her yeni sürümde korunur ve sembolik olarak bağlanır.

Örn: .env dosyası, kullanıcı yüklemeleri

set :linked_files, fetch(:linked_files, []).push('.env') set :linked_dirs, fetch(:linked_dirs, []).push('storage', 'web/uploads') # Laravel için 'storage', Symfony için 'var/log', 'var/cache'

Sunucuda kaç tane eski sürümün saklanacağı

set :keep_releases, 5

SSH agent forwarding'i etkinleştir. Bu, Capistrano'nun SSH anahtarlarınızı kullanmasına izin verir.

set :ssh_options, { forward_agent: true, auth_methods: %w[publickey], keys: %w[~/.ssh/id_rsa] # Kendi anahtarınızın yolunu belirtin }

PHP FPM servisini yeniden başlatma komutu (Ubuntu 13'te 'service' kullanılır)

set :php_fpm_service, 'php5-fpm'

Composer ile ilgili ayarlar

set :composer_install_flags, '--no-dev --prefer-dist --no-interaction --optimize-autoloader'

Capistrano eklentilerini yükle

Capfile'da da yüklenebilirler, burada da tekrar kontrol edilebilir

require 'capistrano/php'

require 'capistrano/composer'

Ekstra görevler ve hook'lar

namespace :deploy do desc 'Restart application services' task :restart do on roles(:web) do execute :sudo, "service #{fetch(:php_fpm_service)} restart" end end # Dağıtım tamamlandıktan sonra PHP-FPM'i yeniden başlat after :publishing, :restart # Gerekirse veritabanı migrasyonlarını çalıştırma (Laravel örneği) desc 'Run database migrations' task :migrate do on roles(:db) do within release_path do execute :php, 'artisan migrate --force' # Laravel için end end end # after 'deploy:updated', 'deploy:migrate' # Eğer her dağıtımda migrate edilecekse end

Ortam Ayarları (config/deploy/production.rb)

Her ortam için (production, staging vb.) ayrı ayrı sunucu tanımlamaları ve ortama özel ayarlar yapılır.

# config/deploy/production.rb

Ortam adı

set :stage, :production

Sunucu tanımlaması: IP adresi veya hostname, kullanıcı adı ve rolleri

server 'your_production_server_ip', user: 'deploy_user', roles: %w{web app db}

Ortama özel değişkenler (örn: APP_ENV)

set :default_env, { 'APP_ENV' => 'production', 'SYMFONY_ENV' => 'prod' # Symfony için }

Benzer şekilde, bir config/deploy/staging.rb dosyası oluşturarak hazırlık ortamınız için farklı bir sunucu ve ayarlar tanımlayabilirsiniz.

Capistrano PHP Eklentileri

capistrano-php ve capistrano-composer gibi eklentiler, PHP uygulamalarına özel dağıtım adımlarını kolaylaştırır. Capfile içinde bu eklentileri çağırmanız gerekir:

# Capfile

Load DSL and set up stages

require 'capistrano/setup'

Include default deployment tasks

require 'capistrano/deploy'

Load Capistrano PHP extensions

require 'capistrano/php' require 'capistrano/composer'

Load custom tasks from lib/capistrano/tasks if any

Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }

Bu eklentiler, Composer bağımlılıklarının otomatik olarak kurulması, PHP-FPM’in yeniden başlatılması gibi görevleri Capistrano’nun standart dağıtım akışına entegre eder.

Sunucu Hazırlığı

Dağıtım yapmadan önce sunucunuzun Capistrano için hazır olması gerekir.

1. Deploy Kullanıcısı Oluşturma ve SSH Anahtarları

Sunucunuzda deploy adında bir kullanıcı oluşturun ve SSH anahtarınızı bu kullanıcının authorized_keys dosyasına ekleyin.

sudo adduser deploy_user
sudo mkdir /home/deploy_user/.ssh
sudo chmod 700 /home/deploy_user/.ssh
sudo nano /home/deploy_user/.ssh/authorized_keys # Kendi public anahtarınızı buraya yapıştırın
sudo chmod 600 /home/deploy_user/.ssh/authorized_keys
sudo chown -R deploy_user:deploy_user /home/deploy_user/.ssh

Bu kullanıcının gerektiğinde sudo komutlarını çalıştırabilmesi için sudoers dosyasına eklemek isteyebilirsiniz:

sudo visudo

Dosyanın sonuna ekleyin:

deploy_user ALL=(ALL) NOPASSWD: ALL

NOPASSWD: ALL kısmı, şifre sormadan sudo komutlarını çalıştırmasına izin verir. Güvenlik nedeniyle, yalnızca belirli komutlara izin vermek daha iyi bir pratiktir.

2. Dizin Yapısı ve İzinler

Capistrano, sunucuda belirli bir dizin yapısı kullanır. deploy_to olarak belirttiğiniz dizin (örn: /var/www/my-php-app) altında aşağıdaki yapıyı oluşturur:

  • releases/: Her yeni dağıtımın tutulduğu dizin. Sürüm numarasına göre alt dizinler (örn: 20230101120000/) içerir.
  • current/: Her zaman en son başarılı dağıtıma işaret eden sembolik bir bağ (symlink). Web sunucunuzun DocumentRoot‘u bu dizine işaret etmelidir.
  • repo/: Git deposunun sunucudaki kopyası.
  • shared/: Dağıtımlar arasında kalıcı olması gereken dosyaların ve dizinlerin tutulduğu yer (örn: .env, storage, uploads).

deploy_to dizinini ve alt dizinlerini deploy_user kullanıcısının sahipliğine verin ve web sunucusu kullanıcısının (örn: www-data) bu dizinlere yazma/okuma izni olduğundan emin olun.

sudo mkdir -p /var/www/my-php-app
sudo chown -R deploy_user:deploy_user /var/www/my-php-app
sudo chmod -R 775 /var/www/my-php-app # Gerekirse daha kısıtlı izinler verin

shared dizinleri için de izinleri ayarlayın

sudo mkdir -p /var/www/my-php-app/shared/storage sudo mkdir -p /var/www/my-php-app/shared/web/uploads sudo chown -R deploy_user:www-data /var/www/my-php-app/shared # www-data kullanıcısına yazma izni verin sudo chmod -R 775 /var/www/my-php-app/shared

.env gibi hassas dosyaları shared dizininde manuel olarak oluşturmanız gerekebilir:

sudo nano /var/www/my-php-app/shared/.env

3. Web Sunucusu Konfigürasyonu (Nginx Örneği)

Nginx yapılandırma dosyanızı (örn: /etc/nginx/sites-available/my-php-app.conf) Capistrano’nun current/public (veya uygulamanızın public dizini) dizinine işaret edecek şekilde düzenleyin.

server {
    listen 80;
    server_name your_domain.com; # Alan adınızı veya IP adresinizi girin

    root /var/www/my-php-app/current/public; # Capistrano'nun current symlink'ine işaret eder

    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php5-fpm.sock; # Ubuntu 13'te PHP-FPM soket yolu
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # Diğer Nginx ayarları (statik dosyalar, loglar vb.)
}

Yapılandırma dosyasını etkinleştirin ve Nginx’i yeniden başlatın:

sudo ln -s /etc/nginx/sites-available/my-php-app.conf /etc/nginx/sites-enabled/
sudo service nginx restart

Dağıtım Süreci

Tüm kurulum ve yapılandırma adımları tamamlandıktan sonra, artık ilk dağıtımınızı gerçekleştirmeye hazırsınız.

1. İlk Dağıtım (Cold Deployment)

İlk kez bir sunucuya dağıtım yaparken deploy:cold görevini kullanırız. Bu görev, Capistrano’nun tüm dizin yapısını oluşturur ve uygulamayı ilk kez dağıtır.

bundle exec cap production deploy:cold

Bu komut, Git deposunu sunucuya klonlar, ilk sürümü oluşturur, Composer bağımlılıklarını kurar ve gerekli sembolik bağlantıları oluşturur.

2. Sonraki Dağıtımlar

İlk dağıtımdan sonra, kodunuzda yaptığınız değişiklikleri dağıtmak için sadece deploy görevini kullanırsınız:

bundle exec cap production deploy

Capistrano, bu komutla aşağıdaki adımları sırasıyla gerçekleştirecektir:

  1. deploy:updating (Kodu Güncelleme): Git deposundan en son kodu çeker ve releases/ dizini altında yeni bir zaman damgalı sürüm dizini oluşturur (örn: releases/20231027103000).
  2. deploy:updated (Güncelleme Sonrası İşlemler):
    • linked_files ve linked_dirs ayarlarınızda belirtilen paylaşılan dosyaları ve dizinleri yeni sürüm dizinine sembolik olarak bağlar.
    • composer install komutunu çalıştırarak PHP bağımlılıklarını yükler.
    • Diğer özel görevler (örn: cache temizleme, asset derleme, veritabanı migrasyonları) bu aşamada çalıştırılabilir.
  3. deploy:publishing (Yayınlama):
    • current sembolik bağlantısını eski sürümden yeni dağıtılan sürüm dizinine günceller. Bu an, uygulamanızın yeni sürüme geçiş yaptığı andır.
  4. deploy:published (Yayınlama Sonrası İşlemler):
    • Web sunucunuzu veya PHP-FPM servisini yeniden başlatır (eğer yapılandırıldıysa).
    • Diğer özel görevler (örn: bildirim gönderme).
  5. deploy:finishing (Bitirme):
    • keep_releases ayarına göre eski sürümleri temizler.
  6. deploy:finished (Tamamlama):
    • Dağıtımın başarıyla tamamlandığını bildirir.

3. Geri Alma (Rollback)

Eğer yeni bir dağıtımda sorun yaşarsanız, Capistrano önceki çalışan sürüme kolayca geri dönmenizi sağlar:

bundle exec cap production deploy:rollback

Bu komut, current sembolik bağlantısını bir önceki başarılı sürüme işaret edecek şekilde günceller ve PHP-FPM’i yeniden başlatır. Bu sayede uygulamanız hızla çalışır duruma geri döner.

Özel Görevler ve İpuçları

Veritabanı Migrasyonları

PHP uygulamalarında veritabanı şemasında değişiklikler sıkça yapılır. Bu değişikliklerin dağıtım sırasında uygulanması gerekir. Capistrano’da özel bir görev tanımlayarak veritabanı migrasyonlarını dağıtım akışına dahil edebilirsiniz.

# config/deploy.rb içinde
namespace :deploy do
  # ... diğer görevler ...

  desc 'Run database migrations'
  task :migrate do
    on roles(:db) do
      within release_path do
        execute :php, 'artisan migrate --force' # Laravel için örnek
        # execute :php, 'bin/console doctrine:migrations:migrate --no-interaction' # Symfony Doctrine için örnek
      end
    end
  end

  # Migrasyonları 'deploy:updated' görevinden sonra çalıştır
  # Bu, yeni kod sunucudayken ancak henüz canlıya geçmeden önce çalışır.
  after 'deploy:updated', 'deploy:migrate'
end

Veritabanı migrasyonlarının geri alınması durumunda sorun yaratabileceğini unutmayın. Geri alınamayacak migrasyonlar yapıyorsanız, rollback stratejinizi buna göre planlamanız önemlidir.

Ortam Değişkenleri ve Hassas Veriler

.env dosyası gibi hassas veriler içeren dosyalar veya ortam değişkenleri, Git deposunda tutulmamalıdır. Capistrano’nun linked_files özelliği bu tür durumlar için idealdir. Bu dosyalar shared dizininde saklanır ve her yeni sürüme sembolik olarak bağlanır. Bu sayede hassas veriler güvenli bir şekilde yönetilir ve her dağıtımda manuel olarak kopyalanmasına gerek kalmaz.

Hata Ayıklama

Dağıtım sırasında bir sorunla karşılaştığınızda, Capistrano’nun log seviyesini artırarak daha detaylı bilgi alabilirsiniz:

bundle exec cap production deploy --trace # Detaylı hata izi

veya config/deploy.rb içinde:

set :log_level, :debug

Karşılaşılan yaygın sorunlar arasında SSH bağlantı hataları, dosya izinleri sorunları, Composer bağımlılıklarının yüklenememesi veya web sunucusu yapılandırma hataları bulunur. Hata mesajlarını dikkatlice okuyarak sorunun kökenine inebilirsiniz.

Capistrano Hooks (Kancalar)

Capistrano, dağıtım akışının farklı aşamalarına özel görevler eklemenizi sağlayan kancalar (hooks) sunar. Örneğin:

  • before 'deploy:updated', 'my_custom_task': Kod güncellenmeden önce.
  • after 'deploy:updated', 'my_custom_task': Kod güncellendikten ve bağımlılıklar yüklendikten sonra (migrasyonlar için ideal).
  • after 'deploy:publishing', 'my_custom_task': Yeni sürüm canlıya geçtikten sonra (cache temizliği, servis restart için ideal).

Bu kancaları kullanarak uygulamanızın özel ihtiyaçlarına göre dağıtım sürecini özelleştirebilirsiniz.

Sıfır Kesintiyle Dağıtım (Zero-Downtime Deployment)

Capistrano’nun sembolik bağlantı mekanizması sayesinde, uygulamanızı sıfır kesintiyle dağıtmak mümkündür. Yeni sürüm, eski sürüm hala çalışırken hazırlanır. Tüm bağımlılıklar kurulur, dosyalar bağlanır ve her şey hazır olduğunda, current sembolik bağlantısı atomik bir şekilde yeni sürüme yönlendirilir. Bu işlem genellikle milisaniyeler sürdüğü için kullanıcılar herhangi bir kesinti hissetmez.

Ancak, veritabanı migrasyonları gibi uzun süren veya geriye dönük uyumlu olmayan değişiklikler, bu sıfır kesinti vaadini bozabilir. Bu tür durumlarda, migrasyonları iki aşamalı dağıtım stratejileriyle veya blue/green deployment gibi daha gelişmiş tekniklerle yönetmek gerekebilir.

Ubuntu 13 ve Güncel Uygulamalar İçin Notlar

Bu rehber, özel olarak Ubuntu 13 üzerinde Capistrano kullanımına odaklanmış olsa da, Ubuntu 13’ün artık güncel olmayan bir işletim sistemi sürümü olduğunu belirtmek önemlidir. Güncel Ubuntu sürümleri (18.04, 20.04, 22.04) ve modern PHP versiyonları (PHP 7.x, PHP 8.x) ile çalışırken bazı farklılıklar olacaktır:

  • Servis Yönetimi: Ubuntu 13’te servisler genellikle service (örn: service php5-fpm restart) ile yönetilirken, yeni Ubuntu sürümlerinde systemd tabanlı systemctl (örn: systemctl restart php7.4-fpm) kullanılır. Capistrano yapılandırmanızda php_fpm_service adını buna göre güncellemeniz gerekebilir.
  • PHP Sürümleri: Ubuntu 13 genellikle PHP 5.x sürümleriyle gelirken, güncel projeler PHP 7.x veya 8.x kullanır. Paket isimleri (php5-fpm yerine php7.4-fpm veya php8.1-fpm) ve PHP-FPM soket yolları farklılık gösterecektir.
  • Paket Yöneticisi: Temel apt-get komutları aynı kalsa da, bazı paket isimleri veya varsayılan konfigürasyonlar değişmiş olabilir.

Bu farklılıklara rağmen, Capistrano’nun temel dağıtım prensipleri, dizin yapısı, hook’ları ve otomasyon mantığı güncel sistemlerde de aynı şekilde uygulanır. Bu rehberdeki bilgileri, modern bir Ubuntu ve PHP ortamına kolayca adapte edebilirsiniz.

Sonuç

PHP uygulama dağıtım sürecini Capistrano ile otomatikleştirmek, geliştirme ekiplerine önemli avantajlar sağlar. Manuel hataları ortadan kaldırır, dağıtım hızını artırır, tutarlılık sağlar ve geri alma işlemlerini basitleştirir. Bu rehberde, Ubuntu 13 üzerinde Capistrano’yu kurmaktan, yapılandırmaya ve ilk dağıtımı gerçekleştirmeye kadar tüm adımları ayrıntılı bir şekilde ele aldık.

Capistrano’nun sunduğu esneklik ve genişletilebilirlik sayesinde, projenizin özel ihtiyaçlarına göre dağıtım akışını özelleştirebilir, veritabanı migrasyonları, cache yönetimi, asset derleme gibi adımları kolayca entegre edebilirsiniz. Dağıtım otomasyonuna yatırım yapmak, uzun vadede geliştirme verimliliğinizi artıracak ve operasyonel yükünüzü azaltacaktır. Capistrano, sürekli entegrasyon ve sürekli dağıtım (CI/CD) stratejilerinin önemli bir parçası olarak, modern yazılım geliştirme pratiklerinin vazgeçilmez bir aracıdır.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Exit mobile version