7/24 Türkçe destek:[email protected]Sistem durumuDestek talebi

Git ile VPS’e Otomatik Dağıtım

Okuma süresi: 5 dk

Kısa yanıt: Paylaşımlı hosting paketlerimizde cPanel Git Sürüm Kontrolü (Git Version Control) yoktur; Git ile dağıtım root erişimli bir VPS’te yapılır. VPS’te depoyu git clone ile çekip güncellemeleri git pull ile alabilir ya da sunucuda git init --bare ile bir depo açıp post-receive kancası sayesinde bilgisayarınızdan yaptığınız her git push işleminde siteyi kendiliğinden güncelleyebilirsiniz.

Bu rehber kimin için: Geliştiriciler ve ajanslar · Gereken süre: 20 dakika · Seviye: İleri

Paylaşımlı hosting paketlerimizde Git Sürüm Kontrolü ekranı, SSH ve cPanel Terminal bulunmaz; dosyalar orada FTP ya da Dosya Yöneticisi ile yüklenir. FTP ile tek tek dosya yüklemek ise hata yapmaya açıktır: unutulan bir dosya siteyi bozabilir. Git ile her sürüm kayıt altındadır; sunucuya hangi sürümün yüklendiğini bilir, sorun çıkarsa önceki commit’e dönebilirsiniz. Bu düzeni VPS’te iki yolla kurabilirsiniz: sunucuda git clone ve git pull ile ya da sunucudaki bare depoya git push ile.

Depoyu kurma ve dağıtma

  1. SSH anahtarı ekleyin: Özel bir GitHub ya da GitLab deposunu sunucuya çekecekseniz sunucuda ssh-keygen -t ed25519 -C deploy ile bir anahtar oluşturun ve ~/.ssh/id_ed25519.pub dosyasının içeriğini depo ayarlarında “Deploy key” olarak ekleyin; GitHub deploy anahtarlarını varsayılan olarak yalnız okuma yetkisiyle ekler. Herkese açık depolarda bu adım gerekmez.
  2. Depoyu klonlayın: sudo apt install -y git ile Git’i kurun ve depoyu web kökü dışındaki bir klasöre klonlayın (ör. git clone [email protected]:kullanici/site.git /srv/site). Nginx’in root yönergesini yalnız yayınlanacak alt klasöre (ör. /srv/site/public) yönlendirin; böylece .git klasörü web’den erişilemez.
  3. Dağıtım betiği: VPS’te .cpanel.yml dosyası kullanılmaz; bu dosya yalnız cPanel’in Git ekranında çalışır, depoda kalması zarar vermez. Derleme ya da kopyalama adımlarınız varsa (ör. npm ci ve npm run build) bunları depodaki bir dağıtım betiğine (ör. deploy.sh) yazın.
  4. Güncellemeleri çekin: Yeni sürümü yayınlamak için sunucuda depo klasöründe git pull komutunu çalıştırın. Sunucuda elle değiştirilmiş dosyalar çekmeyi durdurabilir; git status ile kontrol edin ve değişiklikleri sunucu yerine depoda yapın.
  5. Dağıtın: Varsa dağıtım betiğinizi çalıştırın (sh deploy.sh) ve gerekiyorsa uygulama servisini ya da PHP-FPM’i yeniden yükleyin (ör. sudo systemctl reload php8.3-fpm). Bu adımları her seferinde elle yapmak istemiyorsanız push ile dağıtım yöntemini kullanın.

Push ile otomatik dağıtım: bare depo ve post-receive kancası

Bu yöntemde sunucuda çalışma klasörü olmayan (bare) bir depo açarsınız. Bilgisayarınızdan bu depoya push ettiğinizde Git, push tamamlandıktan sonra post-receive kancasını bir kez çalıştırır; kanca da gönderilen dalı yayın klasörüne çıkarır.

  1. Dağıtım için ayrı bir kullanıcı açın (sudo adduser deploy) ve bilgisayarınızın açık SSH anahtarını bu kullanıcının ~/.ssh/authorized_keys dosyasına ekleyin; adımlar SSH anahtarı oluşturma rehberinde.
  2. Sunucuda deploy kullanıcısıyla bare depoyu oluşturun: git init --bare ~/site.git
  3. Yayın klasörünü açın ve sahibini deploy kullanıcısı yapın: sudo mkdir -p /var/www/site ve sudo chown deploy:deploy /var/www/site
  4. nano ~/site.git/hooks/post-receive ile kanca dosyasını oluşturun. İlk satıra #!/bin/sh, ikinci satıra git --work-tree=/var/www/site --git-dir=/home/deploy/site.git checkout -f main yazın; derleme adımınız varsa üçüncü satırda dağıtım betiğinizi çağırın.
  5. Kancayı çalıştırılabilir yapın: chmod +x ~/site.git/hooks/post-receive
  6. Bilgisayarınızda depoyu sunucuya bağlayın: git remote add canli [email protected]:site.git (IP adresi yerine kendi VPS adresinizi yazın).
  7. Yayınlayın: git push canli main. Push bitince main dalının son hâli /var/www/site klasörüne yazılır.
  8. Nginx’in root yönergesini /var/www/site klasörünü (ya da yayınlanacak alt klasörü) gösterecek şekilde ayarlayın; sunucu bloğu için Nginx kurulumu rehberine bakın.

checkout -f, depodaki dosyalarda sunucuda yapılmış elle değişikliklerin üzerine yazar; depoda olmayan dosyalara (ör. sunucuda oluşturduğunuz .env ya da yüklenen görseller) dokunmaz. Kancanın çıktısı push yaptığınız terminalde görünür; betiğe echo satırları ekleyerek dağıtımın hangi adımda olduğunu izleyebilirsiniz. VPS yönetimsiz teslim edilir; sunucu kurulumunu, güvenlik sıkılaştırmasını ve güncellemeleri ekibimize bırakmak isterseniz sunucu yönetimi hizmetini ekleyebilirsiniz.

Gizli dosyalar

Veritabanı şifreleri içeren yapılandırma dosyalarını depoya eklemeyin; .gitignore ile hariç tutun ve sunucuda bir kez elle oluşturun. Deponun .git klasörünü Nginx’in kök dizini (root) içinde tutmak, kaynak kodunuzun ve geçmişinizin dışarıdan indirilmesine yol açabilir; kökü yayınlanacak alt klasöre yönlendirin ya da sunucu bloğuna location ^~ /.git/ { deny all; } kuralını ekleyin.

Hâlâ çözülmediyse

Push sonrası site güncellenmiyorsa kanca dosyasının çalıştırılabilir olduğunu (chmod +x hooks/post-receive), --work-tree klasörüne dağıtım kullanıcısının yazabildiğini ve gönderdiğiniz dalın kancadaki dal adıyla (main ya da master) aynı olduğunu kontrol edin. git push sırasında “Permission denied (publickey)” hatası, açık anahtarınızın sunucudaki kullanıcının ~/.ssh/authorized_keys dosyasında olmadığını gösterir. Push ile dağıtım için VPS sunucu gerekir; isterseniz aynı sunucuda GitHub webhook’u ya da bir CI aracıyla tetiklenen dağıtım da kurabilirsiniz.

Sık sorulan sorular

GitHub’a push yaptığımda otomatik dağıtım olur mu?

Kendiliğinden olmaz; dağıtımı bir şeyin tetiklemesi gerekir. En basit yol, bu rehberde anlatıldığı gibi sunucudaki bare depoya push etmektir. GitHub’daki depoya push ettiğinizde dağıtım istiyorsanız GitHub Actions gibi bir CI aracında sunucuya SSH ile bağlanıp git pull çalıştıran bir iş tanımlayabilir ya da sunucuda GitHub webhook’unu dinleyen küçük bir uç nokta kurabilirsiniz. Paylaşımlı hosting paketlerimizde bu yöntemler kullanılamaz.

Mevcut sitemi Git’e nasıl alırım?

Dosyaları yerelde bir depoya ekleyip uzak depoya gönderin, ardından bu rehberdeki gibi klonlayın.

Paylaşımlı hostingte Git kullanabilir miyim?

Paylaşımlı hosting paketlerimizde cPanel Git Sürüm Kontrolü, SSH ve cPanel Terminal yoktur; sunucuda Git komutu çalıştırılamaz. Kodunuzu kendi bilgisayarınızda Git ile yönetmeye devam edebilir, yayınlanacak dosyaları FTP ile ya da Dosya Yöneticisi ile yükleyebilirsiniz. Push ile dağıtım için VPS sunucu gerekir; sunucu tarafı kurulumu ekibimize bırakmak isterseniz sunucu yönetimi hizmetini ekleyebilirsiniz.

Hatalı bir sürümü yayınladım, önceki sürüme nasıl dönerim?

Bilgisayarınızda git revert ile hatalı commit’i geri alan yeni bir commit oluşturup git push canli main ile yeniden gönderin; geçmiş korunur ve kanca düzeltilmiş sürümü yayınlar. Acil durumda sunucuda kancadaki komutu dal adı yerine önceki commit’in kimliğiyle çalıştırarak (ör. checkout -f a1b2c3d) o sürümü yayın klasörüne çıkarabilirsiniz; bir sonraki push yine main dalını yayınlar.

İlgili rehberler