İçeriğe atla
VDS Panel
VDS Panel
Sunucu Yönetimi
Deploy 08 Şubat 2026 · 8 dk okuma

Git Push ile Otomatik Deploy: Kendi Sunucunuzda Bulut Deneyimi

modern bulut deploy servisleri ile alıştığımız 'git push → canlıda' deneyimini kendi sunucunuzda nasıl kurarsınız? Webhook, CI/CD, atomic deploy, tam rehber.

#git push deploy #ci cd #webhook #otomatik deploy
VDS Panel
VDS Panel Ekibi
Ürünü geliştiren ekip

git push origin main” ve birkaç saniye sonra siteniz canlıda, modern bulut platformlarının standart yaptığı deneyim. Bu kolaylık artık beklentimiz oldu. Ancak kendi sunucumuzda aynı deneyimi kurmak genelde düşündüğümüzden daha karmaşık çıkar: webhook secret’lar, build runner’lar, artifact yönetimi, atomic swap…

Bu yazıda git push ile otomatik deploy mekanizmasının altında yatanları ve bu sistemi nasıl kendi VPS’nizde kurabileceğinizi anlatacağız.

”git push = deploy” nasıl çalışır?

Üç temel bileşen var:

  1. 01
    Webhook
    Git repository her push'ta HTTP POST gönderir. İçinde hangi branch, hangi commit, kim tarafından bilgileri taşır.
  2. 02
    Receiver
    Sunucunuzda webhook'u dinleyen endpoint. Gelen isteğin HMAC-SHA256 imzasını doğrular, meşru bir push olduğunu kontrol eder.
  3. 03
    Pipeline
    İmza doğrulandıktan sonra kodu çeker, build eder, mevcut servisi yeni artifact ile değiştirir (atomic swap), health check yapar, sonucu notify eder.

Bu 3 bileşenin her birini elle kodlamak teknik olarak zor değil, ama production-grade yapmak uzun sürer: rollback, concurrent deploy koruması, build cache, log streaming, secret yönetimi…

Webhook kurulumu, manuel

Örnek bir webhook receiver (Node.js + Express):

import express from 'express';
import crypto from 'crypto';
import { spawn } from 'child_process';

const app = express();
const SECRET = process.env.WEBHOOK_SECRET;

app.post('/webhook', express.raw({ type: 'application/json' }), (req, res) => {
  const signature = req.headers['x-hub-signature-256'];
  const expected = 'sha256=' + crypto
    .createHmac('sha256', SECRET)
    .update(req.body)
    .digest('hex');

  if (!crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected))) {
    return res.status(401).send('invalid signature');
  }

  const payload = JSON.parse(req.body);
  if (payload.ref !== 'refs/heads/main') return res.send('skip');

  spawn('bash', ['/opt/deploy.sh'], { detached: true });
  res.send('deploy queued');
});

app.listen(9000);

Ve /opt/deploy.sh:

#!/bin/bash
set -e
cd /opt/myapp
git pull origin main
npm ci --production
pm2 reload myapp
Bu naive implementasyonun sorunları
  • Race condition: iki push arka arkaya gelirse iki pipeline çakışır.
  • Rollback yok: deploy başarısız olursa app çalışmaz kalır.
  • Secret management zayıf: .env dosyasını her deploy silmeli mi, korumalı mı?
  • Build cache yok: npm ci her deploy için 2-3 dakika alır.
  • Log stream yok: deploy başarısızsa SSH’la sunucuya bakmak zorunda kalırsın.

Production-grade çözüm: VDS Panel ile git push deploy

VDS Panel webhook entegrasyonunu yerleşik olarak sunar. Kurulum 1 dakikalık bir iş:

  1. 01
    GitHub hesabını bağla
    Panel ayarlarında GitHub OAuth ile repository listesi çekilir.
  2. 02
    Projeyi oluştur
    Repository'yi seçin. Panel webhook'u otomatik kurar, GitHub ayarlarından secret oluşturmanıza gerek yok.
  3. 03
    Push yapmaya başla
    Bundan sonraki her git push'ta panel webhook'u yakalar, imzayı doğrular, pipeline'ı başlatır.

git push origin main attığınız anda panel:

  1. Kodu shallow clone (hızlı)
  2. Framework tespiti (package.json/pom.xml/go.mod/Dockerfile)
  3. Dependency cache kontrol (npm/maven/go cache aynıysa skip)
  4. Build (paralel: image + DB migration + SSL kontrolü)
  5. Artifact production’a atomic swap (eski version 5 dakika bekletilir, rollback hızlı olsun)
  6. Health check (30 saniye boyunca readiness probe)
  7. Başarılı → nginx reload. Başarısız → otomatik rollback.
~90sn
push'tan canlıya
Cache sıcakken ve küçük commit'lerde 30 saniye altına düşer.

Süreç panel arayüzünde canlı akar: build log’u, test çıktıları, deploy durumu, hepsi real-time.

Gelişmiş senaryolar

Branch-based deploy

Panel, main branch için production, develop için staging deploy yapabilir. Her branch ayrı subdomain alır: api.sirket.com ve staging-api.sirket.com. DNS + SSL otomatik kurulur.

Manuel onay (approval gate)

Güvenlik-kritik production ortamları için “manuel onay” modunu aktif edebilirsiniz. Push geldiğinde panel build yapar ama deploy’u beklemeye alır; onaylayan bir kullanıcı tıklamadan canlıya geçmez.

Rollback

Deploy ekranında “Önceki version’a dön” bir tıklama. Panel son 10 başarılı deploy’un artifact’ını saklar; istediğinize anında swap yapar. Veritabanı migration’larını da tersine çevirmek için Flyway/Liquibase gibi tool’larla entegre çalışır.

Multi-env secret

Test, staging, production için ayrı env değişkenleri. Her ortama özel secret’lar secret vault’ta saklanır, runtime’da inject edilir.

Git'e secret sızdırma riski

Panel env değişkenlerini git’e yazmaz, repo’dan değil panel DB’sinden çeker. Geliştiricilerin yanlışlıkla .env dosyalarını commit etmesi durumunda bile production secret’ları korunur.

Build arguments

Dockerfile’a build arg geçirmek, Gradle’a custom task çağırmak, pre-deploy script çalıştırmak, her biri panel arayüzünden yönetilir.

Sonuç

“git push = deploy” deneyimi, modern bir geliştiricinin vazgeçilmezi. modern bulut deploy servisleri’a cloud ücreti ödemeden kendi sunucunuzda aynı deneyimi kurmak mümkün, sadece ne kadar zaman ayırabileceğinizin sorusudur.

Kendi elinizle kurmak 2-3 haftalık bir iş; VDS Panel ile ise webhook entegrasyonu ilk projeyi oluştururken otomatik tamamlanır. Detaylar için özellikler sayfamıza bakabilir veya demo talebinde bulunabilirsiniz.

Kendi sunucunuzda denemek ister misiniz?

İletişim formundan ulaşın, kullanım senaryonuza uygun lisans + kurulum planını birlikte hazırlayalım.

Hazır olduğunuzda buradayız

Kendi sunucunuzda modern deploy deneyimi, bir iletişim mesajı uzakta.

Kullanım senaryonuzu anlayıp size uygun lisans ve kurulum planını hazırlayalım. Ortalama yanıt süremiz 24 saatin altında.