Git ile Sunucuya Deploy Nasıl Yapılır?
Git ile Deployment Neden Önemlidir?
Geleneksel FTP ile dosya yükleme yöntemi; hata riski yüksek, yavaş ve geri alınması güç bir deployment süreci doğurur. Git tabanlı deployment ise sürüm kontrolü, otomatik testler ve tek komutla yayına alma gibi avantajlarıyla modern yazılım geliştirmenin vazgeçilmez parçasıdır. Hangi değişikliğin ne zaman ve kim tarafından yapıldığını her zaman takip edebilir, sorun çıktığında önceki kararlı sürüme saniyeler içinde geri dönebilirsiniz.
Git ile deployment için birkaç farklı yaklaşım mevcuttur: doğrudan git pull komutuyla manuel güncelleme, Git hooks ile otomatik deployment ve GitHub Actions veya GitLab CI/CD gibi platformlarla tam otomatik pipeline. Bu rehberde her üç yöntemi de ele alacağız.
Sunucuya Git Kurulumu
# Ubuntu/Debian:
apt install git
# AlmaLinux/CentOS:
yum install git
# Git kurulumunu doğrulama:
git --version
# Kimlik yapılandırması:
git config --global user.name "Ad Soyad"
git config --global user.email "ornek@firmaniz.com"
Yöntem 1: Sunucuda Git Pull ile Deployment
En basit deployment yöntemi, değişikliklerinizi GitHub veya GitLab'a push ettikten sonra sunucuya SSH ile bağlanıp git pull çalıştırmaktır.
# İlk kez klonlama:
git clone https://github.com/kullanici/proje.git /var/www/proje
# Sonraki güncellemeler için:
cd /var/www/proje
git pull origin main
# SSH anahtarıyla private repo klonlama:
git clone git@github.com:kullanici/proje.git /var/www/proje
# Deployment scripti hazırlama:
# /home/deploy.sh
#!/bin/bash
cd /var/www/proje
git pull origin main
composer install --no-dev --optimize-autoloader
php artisan migrate --force
php artisan config:cache
php artisan route:cache
systemctl reload php8.2-fpm
Yöntem 2: Git Hooks ile Otomatik Deployment
Git hooks, belirli git olaylarında (push, commit gibi) otomatik olarak çalışan scriptlerdir. Sunucuda bare repository oluşturarak, push işleminden sonra otomatik deployment yapılmasını sağlayabilirsiniz.
# Sunucuda bare repository oluşturma:
git init --bare /home/repos/proje.git
# Post-receive hook oluşturma:
nano /home/repos/proje.git/hooks/post-receive
#!/bin/bash
GIT_WORK_TREE=/var/www/proje GIT_DIR=/home/repos/proje.git git checkout -f main
cd /var/www/proje
composer install --no-dev
php artisan migrate --force
php artisan config:cache
echo "Deployment tamamlandı!"
# Hook'a çalışma izni verin:
chmod +x /home/repos/proje.git/hooks/post-receive
# Lokal bilgisayardan remote olarak ekleyin:
git remote add production ssh://kullanici@sunucu-ip/home/repos/proje.git
# Deploy etmek için:
git push production main
Yöntem 3: GitHub Actions ile CI/CD Pipeline
GitHub Actions, main branch'e push edildiğinde otomatik test, build ve deployment gerçekleştiren tam otomatik bir CI/CD pipeline sunar. Bu yöntem kurumsal projeler için en önerilen yaklaşımdır.
# .github/workflows/deploy.yml dosyası:
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Sunucuya Deploy Et
uses: appleboy/ssh-action@v1.0.0
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
cd /var/www/proje
git pull origin main
composer install --no-dev
php artisan migrate --force
php artisan config:cache
systemctl reload php-fpm
Deployment Sırasında Siteyi Bakım Moduna Alma
Veritabanı migration veya büyük değişiklikler içeren deployment'lar sırasında kullanıcıların tutarsız bir site görmemesi için bakım modu aktifleştirilmelidir.
# Laravel bakım modu:
php artisan down --retry=60 --refresh=15
# Deployment işlemleri...
git pull && composer install && php artisan migrate
# Bakım modunu kapat:
php artisan up
# Özel bakım sayfası:
php artisan down --render="errors::503"
Git deployment pipeline kurulumu, CI/CD yapılandırması ve deployment otomasyonu konularında HostingKontrol teknik ekibimizden destek alabilirsiniz. Modern deployment pratikleri sayesinde projelerinizi daha hızlı ve güvenli biçimde yayına alabilirsiniz.