Git ile deploy ne demektir?
Basit model: VDS’te bare repo veya uygulama dizininde git pull, ardından build ve süreç yenileme. CI (GitHub Actions) SSH ile aynı komutları koşar. FTP ile dosya atmak sürüm ve rollback vermez.
Asla üretimde git config ile kişisel token düz metin bırakmayın. Deploy anahtarı (read-only SSH key) repoya eklenir. .env Git’e girmez; örnek .env.example girer. git status üretimde temiz kalmalı; uploads gitignore’da. submodule varsa git submodule update --init. LFS büyük medyada ayrı kotadır. hook’un PATH’inde node/php yoksa cron/systemd Environment= ekleyin. rollback: git log --oneline | head ve checkout önceki SHA, sonra build. tagged release olmadan “dün geceki hali” bulunamaz.
Sunucuda clone ve pull akışı
ssh-keygen -t ed25519 -f /home/deploy/.ssh/id_ed25519_deploy -N "". Genel anahtarı GitHub Deploy keys’e ekleyin. git clone [email protected]:org/proje.git /var/www/proje. Güncelleme: cd /var/www/proje && git fetch --prune && git checkout main && git pull --ff-only.
--ff-only, sunucuda unutulmuş commit varsa merge karmaşasını keser. Çalışma ağacı kirlendiyse (log, upload) bu dosyalar gitignore’da olmalıdır. npm ci && npm run build && pm2 reload api. PHP: composer install --no-dev && systemctl reload php8.2-fpm. Deploy kullanıcısının /var/www yazma izni: chown -R deploy:www-data /var/www/proje && chmod -R g+w storage veya wp-content/uploads. set -euo pipefail scriptte yarım build’i canlıya almayı keser. ln -sfn releases/YENI current atomik geçiştir. GitHub Actions secrets.SSH_KEY ile ssh-agent; token’ı repo değişkenine düz yazmayın. Tag ile deploy (git checkout v1.2.3) rollback’i kolaylaştırır: önceki tag’e dönüş.
Git hook veya küçük bir deploy script
post-receive bare repo modelinde: GIT_WORK_TREE=/var/www/proje git checkout -f main sonra build. Script: set -euo pipefail, log /var/log/deploy.log. Hook’u root yerine deploy kullanıcısı çalıştırsın.
Sıfır downtime: pm2 reload (cluster) veya iki dizin (releases/20260815) symlink current. Küçük ekiplerde reload yeter. Veritabanı migrasyonu geri alınamazsa yedek alın; git revert SQL’i geri almaz. healthcheck 200 dönmeden symlink çevirmeyin. migrate komutu pull’dan sonra, reload’dan önce çalışsın.
Sık hatalar
Permission denied (publickey): yanlış anahtar, known_hosts. diverged branch: sunucuda commit. node_modules root ile kurulmuş, deploy kullanıcısı yazamıyor. SELinux/AppArmor nadir; Ubuntu’da çoğunlukla izin ve cwd.
| Adım | Komut özeti | Başarısızlık |
|---|---|---|
| Anahtar | ssh -T [email protected] | deploy key yok |
| Güncelle | git pull --ff-only | kirli tree |
| Bağımlılık | npm ci / composer | Node sürümü |
| Süreç | pm2 reload / systemctl | 502 |
| Sağlık | curl -I https://... | SSL/DNS |
Emriva ürün eşlemesi
Bu bölüm ürün eşlemesidir. Git deploy Linux VDS (Xeon küçük API, Ryzen paralel build) ister. cPanel Git Version Control bazı paketlerde vardır ama PM2/Nginx tam kontrol VDS’tedir. Günlük yedek .git’i kurtarır; secret’lar ayrı durmalıdır.
SSH deploy key parçasını destek kaydına yapıştırmayın.
