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 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:
- 01WebhookGit repository her push'ta HTTP POST gönderir. İçinde hangi branch, hangi commit, kim tarafından bilgileri taşır.
- 02ReceiverSunucunuzda webhook'u dinleyen endpoint. Gelen isteğin HMAC-SHA256 imzasını doğrular, meşru bir push olduğunu kontrol eder.
- 03Pipelineİ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
- 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:
.envdosyasını her deploy silmeli mi, korumalı mı? - Build cache yok:
npm ciher 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ş:
- 01GitHub hesabını bağlaPanel ayarlarında GitHub OAuth ile repository listesi çekilir.
- 02Projeyi oluşturRepository'yi seçin. Panel webhook'u otomatik kurar, GitHub ayarlarından secret oluşturmanıza gerek yok.
- 03Push yapmaya başlaBundan 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:
- Kodu shallow clone (hızlı)
- Framework tespiti (package.json/pom.xml/go.mod/Dockerfile)
- Dependency cache kontrol (npm/maven/go cache aynıysa skip)
- Build (paralel: image + DB migration + SSL kontrolü)
- Artifact production’a atomic swap (eski version 5 dakika bekletilir, rollback hızlı olsun)
- Health check (30 saniye boyunca readiness probe)
- Başarılı → nginx reload. Başarısız → otomatik rollback.
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.
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.
Bunlar da hoşuna gidebilir
Node.js Projelerini PM2 ile Production'da Çalıştırmak: Panel Rehberi
Node.js ve Express projelerinizi VPS'te production'a almak için PM2 cluster mode, otomatik restart, memory limit ve log rotation ayarlarını panel üzerinden yapın.
Okumaya başlaSpring Boot Projesini VPS'e Deploy Etmek: Adım Adım Rehber
Spring Boot uygulamanızı kendi VPS'nize nasıl deploy edersiniz? JAR upload, Git-based build, systemd, Docker ve Kubernetes ile 5 farklı yolu karşılaştıran kapsamlı rehber.
Okumaya başlaKendi sunucunuzda denemek ister misiniz?
İletişim formundan ulaşın, kullanım senaryonuza uygun lisans + kurulum planını birlikte hazırlayalım.