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-getkullanabilirsiniz, 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 bundlerBundler, 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_keysdosyası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
deploykullanı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 sunucunuzunDocumentRoot‘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:
deploy:updating(Kodu Güncelleme): Git deposundan en son kodu çeker vereleases/dizini altında yeni bir zaman damgalı sürüm dizini oluşturur (örn:releases/20231027103000).deploy:updated(Güncelleme Sonrası İşlemler):linked_filesvelinked_dirsayarlarınızda belirtilen paylaşılan dosyaları ve dizinleri yeni sürüm dizinine sembolik olarak bağlar.composer installkomutunu ç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.
deploy:publishing(Yayınlama):currentsembolik 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.
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).
deploy:finishing(Bitirme):keep_releasesayarına göre eski sürümleri temizler.
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ümlerindesystemdtabanlısystemctl(örn:systemctl restart php7.4-fpm) kullanılır. Capistrano yapılandırmanızdaphp_fpm_serviceadı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-fpmyerinephp7.4-fpmveyaphp8.1-fpm) ve PHP-FPM soket yolları farklılık gösterecektir. - Paket Yöneticisi: Temel
apt-getkomutları 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.