VPS sunucularında manuel kod dağıtımı, zaman kaybına ve insan hatasına yol açan geleneksel bir yaklaşımdır.
VPS sunucularında manuel kod dağıtımı, zaman kaybına ve insan hatasına yol açan geleneksel bir yaklaşımdır. Otomatik deployment sistemleri kurmak, geliştirme ekiplerinin verimliliğini artırır, tutarlılık sağlar ve kesintisiz entegrasyonun temelini atar. Bu makalede, bir Ubuntu tabanlı VPS üzerinde Git webhook’ları kullanarak basit ama etkili bir otomatik deployment süreci kurmayı adım adım ele alacağız. Bu yöntem, özellikle küçük ve orta ölçekli ekipler için idealdir ve Node.js tabanlı bir web uygulamasını temel alarak somut örnekler vereceğiz. Süreci takip ederek, kod değişikliklerinizi anında üretim ortamına yansıtabilirsiniz.
VPS’inizi otomatik deployment için hazırlamak, güvenlik ve performans açısından kritik öneme sahiptir. Öncelikle, sunucunuzu en son sürüme güncelleyin: sudo apt update && sudo apt upgrade -y komutunu çalıştırın. Ardından, root erişimini sınırlamak için yeni bir sudo kullanıcısı oluşturun: sudo adduser deployer ve sudo usermod -aG sudo deployer. Bu kullanıcıya SSH anahtarı tabanlı erişim sağlayın; yerel makinenizde ssh-keygen ile anahtar çifti üretip public key’i sunucuya kopyalayın: ssh-copy-id deployer@VPS_IP. Bu adımlar, yetkisiz erişimleri minimize eder.
Sonraki adım, Git ve Node.js gibi temel araçları kurmaktır. Git için sudo apt install git -y, Node.js için ise NodeSource deposunu ekleyerek curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - && sudo apt-get install -y nodejs komutlarını kullanın. Uygulamanızı yönetmek üzere PM2 process manager’ını global olarak yükleyin: sudo npm install -g pm2. Nginx’i ters proxy olarak kurun: sudo apt install nginx -y. Bu araçlar, deployment script’inizin temel taşlarını oluşturur ve her birinin konfigürasyonu, uygulamanızın sorunsuz çalışmasını sağlar. Örneğin, Nginx site konfigürasyonunda server bloğuna proxy_pass http://localhost:3000; ekleyerek trafiği Node.js portuna yönlendirin.
Otomatik deployment’ın kalbi, bir post-receive hook veya GitHub webhook’u ile tetiklenen bir bash scriptidir. VPS’te /var/www/myapp dizininde bir bare Git reposu oluşturun: git init --bare /var/www/myapp/hooks.git. Ardından, hooks/post-receive dosyasını oluşturup şu içeriği ekleyin:
#!/bin/bashgit --work-tree=/var/www/myapp --git-dir=/var/www/myapp/hooks.git checkout -fcd /var/www/myappnpm install --productionpm2 restart ecosystem.config.jspm2 saveScript’e çalıştırılabilir izin verin: chmod +x hooks/post-receive. GitHub repositorunuzda Settings > Webhooks sekmesinden yeni bir webhook ekleyin; Payload URL olarak http://VPS_IP/deploy belirtin ve Content type’ı application/json yapın. VPS’te bu URL’yi yakalamak için basit bir Node.js webhook sunucusu kurun veya Nginx ile bir PHP scripti kullanın. Bu entegrasyon, push eventi her gerçekleştiğinde scripti otomatik çalıştırır ve sıfır downtime ile deployment sağlar.
Otomatik deployment sırasında güvenlik ihlallerini önlemek için, webhook’lara secret token ekleyin; GitHub’da webhook secret tanımlayın ve script’te doğrulayın: if [ "$X_Hub_Signature" != "sha1=$(echo -n $payload | openssl sha1 -hmac $SECRET)" ]; then exit 1; fi. Firewall kurun: sudo ufw allow OpenSSH && sudo ufw allow 'Nginx Full' && sudo ufw enable. PM2’yi deployer kullanıcısı altında çalıştırın ve logları /var/log/pm2‘e yönlendirin. Bu önlemler, olası saldırıları engeller ve denetlenebilirlik sağlar.
Sistemi test etmek için yerel bir branch’ten push yapın ve pm2 logs ile çıktıyı izleyin. Sağlık kontrolleri ekleyin: PM2 cluster modunda pm2 start ecosystem.config.js -i max kullanarak yük dengeleme yapın. İzleme için PM2 plus veya basit cron job ile pm2 monit entegre edin. Hata durumunda rollback için Git tag’leri kullanın: git checkout v1.0. Düzenli bakımda, pm2 update ve bağımlılık güncellemeleriyle sistemi optimize edin; bu yaklaşım, üretim ortamınızın güvenilirliğini uzun vadede korur.
Bu kurulumla, VPS’inizde tam otomatik bir deployment pipeline’ı elde etmiş olursunuz. Pratik adımları takip ederek, ekipleriniz kod odaklı kalabilir ve operasyonel yükü minimize edebilirsiniz. Süreci ihtiyaçlarınıza göre genişleterek, Docker entegrasyonu veya çoklu ortam desteği ekleyin; sonuçta, ölçeklenebilir bir altyapıya sahip olacaksınız.