İçindekiler
- 1 Laravel ve Node.js Projelerinde Neden Staging Ortamı Şart Hale Geldi?
- 2 Staging Ortamının Temel Mimarisi: Laravel ve Node.js Açısından Farklar
- 3 Veritabanı Senkronizasyonu: Canlı Veriyi Staging’e Taşırken Yapılması ve Yapılmaması Gerekenler
- 3.1 Öncelik: Ayrı Veritabanı ve Ayrı Kullanıcı
- 3.2 Senaryo Analizi: Ne Tür Senkronizasyona İhtiyacınız Var?
- 3.3 MySQL/MariaDB ve PostgreSQL İçin Temel Senkronizasyon Yöntemi
- 3.4 Kişisel Veriler ve KVKK/GDPR: Maskeleme Zorunluluğu
- 3.5 Laravel Özelinde: Migration ve Seeder Stratejisi
- 3.6 Node.js Özelinde: ORM Migration Araçlarını Disiplinli Kullanmak
- 4 .env, Ortam Değişkenleri ve Secret Yönetimi: Staging ile Canlıyı Ayırmanın İncelikleri
- 5 Laravel İçin Adım Adım Staging Ortamı Kurulumu
- 6 Node.js İçin Adım Adım Staging Ortamı Kurulumu
- 7 CI/CD ile Laravel ve Node.js Staging Ortamını Otomatikleştirmek
- 8 Staging Ortamında Güvenlik, Performans ve SEO Detayları
- 9 DCHost Üzerinde Örnek Staging Mimarileri
- 10 Özet ve Sonraki Adımlar
Laravel ve Node.js Projelerinde Neden Staging Ortamı Şart Hale Geldi?
Laravel veya Node.js ile ciddi bir proje geliştiriyorsanız, geliştirme ortamından doğrudan canlıya deploy yapmak bir noktadan sonra kumar oynamakla aynı şey oluyor. Ekip büyüdükçe, feature sayısı arttıkça, veritabanı şeması sık sık değiştikçe ve özellikle ödeme, entegrasyon, kimlik doğrulama gibi kritik akışlar devreye girdikçe araya mutlaka tutarlı bir staging ortamı koymanız gerekiyor.
Biz DCHost tarafında onlarca Laravel, Node.js ve karma yapılarda aynı sorunu görüyoruz: Canlıya çıkan her küçük değişiklik, loglara ve destek taleplerine bakıldığında aslında staging ortamında yakalanabilecek türden hatalardan kaynaklanıyor. Bu yüzden geliştirme–test–canlı hattını mimari olarak doğru kurmak, sadece kod kalitesi değil, müşteri deneyimi ve gelir kaybı açısından da kritik. Bu hattın genel resmini görmek istiyorsanız, önce geliştirme, test ve canlı ortamlar için hosting mimarisi rehberimize göz atmanız faydalı olur.
Bu yazıda odağımız çok net: Laravel ve Node.js uygulamaları için staging ortamını doğru kurmak. Özellikle üç konuyu derinlemesine ele alacağız:
- Canlı ve staging veritabanı arasındaki sağlıklı ve güvenli senkronizasyon stratejileri,
- .env ve diğer ortam değişkenlerinin staging’e özel, güvenli şekilde yönetimi,
- Git tabanlı CI/CD hatlarıyla staging ortamına otomatik deploy ve isteğe bağlı canlıya geçiş (blue-green benzeri yaklaşımlar dahil).
Hedefimiz, DCHost üzerinde kullandığınız VPS, dedicated veya colocation altyapınızda tekrarlanabilir, dokümante ve otomasyona uygun bir staging mimarisi kurabilmeniz.
Staging Ortamının Temel Mimarisi: Laravel ve Node.js Açısından Farklar
Önce mimariyi netleştirelim. Staging ortamı, canlıya mümkün olduğunca benzeyen ama risk alabileceğiniz, aynı zamanda SEO, güvenlik ve veri gizliliği açısından izole tutulmuş bir ortamdır.
Tek Sunucu mu Ayrı VPS mi?
DCHost’ta pratikte üç ana yaklaşım görüyoruz:
- Aynı VPS/Dedicated üzerinde ayrı vhost + ayrı veritabanı: Küçük–orta ölçekli projelerde sık kullanılır. Maliyet düşük, yönetim kolaydır; ama kaynak paylaşımı ve güvenlik tarafında daha dikkatli olmanız gerekir.
- Ayrı, küçük bir staging VPS’i: Canlı üretim VPS’iniz güçlü, staging ise daha düşük kaynaklı olabilir. İzolasyon ve güvenlik açısından daha temizdir, özellikle Laravel queue, Node.js worker, WebSocket gibi ek bileşenler varsa tavsiye edilir.
- Kurumsal yapılar için ayrılmış staging cluster’ları: Çoklu mikroservis, ayrı veritabanı sunucusu, cache cluster’ı olan yapılarda staging de aynı şekilde katmanlı kurulur. Bu senaryoda genelde dedicated + DCHost colocation gibi karma mimariler devreye girer.
Laravel Staging Ortamının Tipik Bileşenleri
Laravel için staging ortamında genelde şu bileşenler bulunur:
- Web sunucusu (Nginx veya Apache),
- PHP-FPM havuzu (genellikle production’a yakın versiyon ve ayarlarla),
- MySQL/MariaDB veya PostgreSQL veritabanı,
- Queue ve cache için Redis veya Memcached,
- İsteğe bağlı olarak Laravel Horizon, Scheduler (cron) ve ek arka plan işler.
Bu bileşenlerin staging’deki ayarlarının production’a mümkün olduğunca yakın olması, “sadece staging’de çalışan ama canlıda patlayan” veya tam tersi durumların önüne geçer. Detaylı PHP-FPM, OPcache ve queue optimizasyonları için Laravel prod ortam optimizasyonu rehberimizi referans alabilirsiniz; staging ile canlı arasındaki farkları oradaki ayarları baz alarak minimize etmek iyi bir stratejidir.
Node.js Staging Ortamının Tipik Bileşenleri
Node.js tarafında ise tablo biraz farklı:
- Node.js runtime (genellikle LTS sürüm),
- Uygulamayı ayakta tutan PM2 veya systemd servisleri,
- Ön tarafta reverse proxy (Nginx),
- Veritabanı (MySQL, PostgreSQL, MongoDB vb.),
- Gerçek zamanlı ihtiyaç varsa WebSocket veya Socket.IO endpoint’leri.
Node.js’i staging ve production’da aynı kalıpla yönetmek için, Node.js’i canlıya alırken PM2, systemd ve Nginx ile nasıl yönetmeniz gerektiğini anlattığımız rehberdeki yapıların birebir staging’e uyarlanmasını öneriyoruz. Versiyon farkları, farklı build komutları, farklı Nginx kuralları staging/canlı arasında ne kadar az olursa, sürpriz o kadar az olur.
Veritabanı Senkronizasyonu: Canlı Veriyi Staging’e Taşırken Yapılması ve Yapılmaması Gerekenler
Laravel ve Node.js projelerinde staging ortamı kurmanın en kritik kısmı veritabanıdır. İki uç hata çok yaygındır:
- Staging ve canlı aynı veritabanını kullanıyor: Bu, staging ortamını neredeyse anlamsız hale getirir ve canlı veriyi riske atar.
- Staging veritabanı haftalarca güncellenmiyor: Bu sefer de staging’de çalışan her şey canlıda bambaşka davranabilir, çünkü veri yapısı (schema + data) eskimiştir.
Öncelik: Ayrı Veritabanı ve Ayrı Kullanıcı
Her şeyden önce staging için ayrı bir veritabanı ve ayrı bir veritabanı kullanıcısı tanımlamanız gerekir. Örneğin:
- Canlı:
project_prod, kullanıcı:project_prod_user - Staging:
project_staging, kullanıcı:project_staging_user
Bu hem güvenlik hem de yanlışlıkla staging’den canlı veriyi silmeyi engellemek için temel bir önlemdir.
Senaryo Analizi: Ne Tür Senkronizasyona İhtiyacınız Var?
Veritabanı senkronizasyonu için tek bir doğru yok; senaryoya göre strateji değişir:
- Fonksiyonel testler: Yeni özelliklerin gerçekçi veride nasıl davrandığını görmek istiyorsunuz. Burada canlı verinin anonimleştirilmiş ve zaman zaman staging’e aktarıldığı bir düzen gerekir.
- Yıkıcı testler (delete, migration, büyük refactor): Veri kaybı yaşanabilir. Burada staging verisi tek yönlü olarak canlıdan çekilmeli, staging’den canlıya hiçbir zaman yazılmamalı.
- Performans ve ölçek testleri: Büyük veri setleriyle, indeks ve sorgu optimizasyonu yapmak için canlıya mümkün olduğunca yakın hacimde veri gerekir.
MySQL/MariaDB ve PostgreSQL İçin Temel Senkronizasyon Yöntemi
En yaygın ve güvenli senaryo, canlıdan staging’e periyodik olarak tam yedek + geri yükleme yaklaşımıdır:
- Canlı veritabanından dump alın:
- MySQL/MariaDB için:
mysqldump --single-transaction project_prod > prod.sql - PostgreSQL için:
pg_dump -Fc -d project_prod -f prod.dump
- MySQL/MariaDB için:
- Dump dosyasında anonimleştirme/maskeleme uygulayın (aşağıdaki başlıkta).
- Staging veritabanını drop + recreate veya truncate edip tekrar oluşturun.
- Maskelenmiş dump’ı staging veritabanına geri yükleyin.
MySQL tarafında yedek alma/geri yükleme için daha gelişmiş seçenekler ve Point-in-Time Recovery senaryoları için MySQL/MariaDB yedekleme stratejileri rehberimizden strateji seçebilirsiniz. Staging senkronizasyonu da aslında o yedekleme rutinlerinin kontrollü bir kullanım şekli.
Kişisel Veriler ve KVKK/GDPR: Maskeleme Zorunluluğu
Canlı veriyi staging’e taşırken, özellikle Avrupa veya Türkiye merkezli projelerde KVKK/GDPR gereği kişisel verileri maskelemek neredeyse zorunlu hale geliyor. Önerilen yaklaşım:
- E-posta adresleri:
[email protected]yerine[email protected]gibi dummy adresler üretin. - Telefon numaraları: Son birkaç haneyi sabit veya 0 ile değiştirin.
- İsim, soyisim: Rastgele ama tutarlı isimler kullanın; anonimlaştırma kütüphaneleri iş görebilir.
- TC kimlik no, adres vb.: Mümkünse staging’e hiç taşımayın; gerekiyorsa rastgeleleştirin.
Bu maskeleme işlemini SQL scriptleriyle veya ayrı bir “sanitize” aracıyla otomatikleştirip CI/CD hattına bağlayabilirsiniz. KVKK ve veri yerelleştirme yükümlülüklerini daha bütünsel görmek isterseniz, KVKK ve GDPR uyumlu hosting seçimi rehberimize de bakmanızı öneririz.
Laravel Özelinde: Migration ve Seeder Stratejisi
Laravel’de staging veritabanını yönetirken şu prensipler çok işinizi kolaylaştırır:
- Tüm şema değişiklikleri migration üzerinden gitmeli: Staging’de manuel tablo/kolon eklemeyin.
php artisan migratestaging ve canlıda aynı sonucu üretmeli. - Seed’leri ayırın:
DatabaseSeederiçinde “sadece demo data” üreten kısmı ayrı bir seeder sınıfına taşıyın ve staging’de manuel çağırın. Canlıda sadece zorunlu sistem verilerini seed edin. - .env tabanlı kontrol: Bazı seed’lerin sadece
APP_ENV=stagingiken çalışmasını sağlayabilirsiniz.
Node.js Özelinde: ORM Migration Araçlarını Disiplinli Kullanmak
Node.js tarafında genellikle Sequelize, TypeORM, Prisma, Knex gibi ORM/migration araçları kullanılıyor. Burada da aynı prensip geçerli:
- Tüm tablo/kolon değişiklikleri migration dosyaları üzerinden ilerlemeli.
- Staging ve canlıda aynı migration komutu çalışmalı (örneğin
npm run migrate). - Seed veya fixture datayı, ortam bazlı koşullarla sadece staging’de çalıştırmalısınız (örneğin
NODE_ENV=stagingkontrolü).
.env, Ortam Değişkenleri ve Secret Yönetimi: Staging ile Canlıyı Ayırmanın İncelikleri
Staging ortamı kurarken en sık yapılan hatalardan biri, canlıdaki .env dosyasını kopyalayıp birkaç satırını değiştirmek. Bu yaklaşım kısa vadede hızlı görünse de, orta vadede gerçek müşterilere staging’den mail atma veya test ödemesini gerçek POS’a düşürme gibi tatsız senaryolara yol açıyor.
.env Kopyalama Hataları: En Riskli Alanlar
Canlı .env dosyasını staging’e kopyalarken özellikle şu alanları asla birebir taşımayın:
- Mail ayarları: SMTP host, kullanıcı adı, şifre, gönderici adresi. Staging için ayrı bir test kutusu kullanın veya mail’i tamamen devre dışı bırakın.
- Ödeme altyapısı: API key, secret, webhook URL’leri. Staging’de mutlaka sandbox/TEST ortam anahtarlarını kullanın.
- 3. parti entegrasyonlar: SMS servisleri, CRM, ERP, muhasebe yazılımları, kargo entegrasyonları vb. için staging hesabı kullanın.
- Log ve hata izleme: Sentry, Rollbar vb. araçlarda staging’i ayrı bir proje olarak tanımlayın; production ile logları karıştırmayın.
Staging İçin Örnek Laravel .env Yapısı
Laravel tarafında staging için tipik bir yapı şöyle olabilir:
APP_ENV=stagingAPP_DEBUG=true(ama herkese açık hata sayfaları yerine, loglamayı zenginleştirip kullanıcıya genel bir hata gösterin)APP_URL=https://staging.example.comDB_DATABASE=project_stagingMAIL_*değişkenleri staging’e özel test sunucusuna işaret etmeliPAYMENT_*değişkenleri sandbox ortamı kullanmalı
Debug’u tamamen açmak yerine, üretimdekine benzer ama daha konuşkan bir log seviyesi belirlemek genelde daha sağlıklı. Böylece staging’de görülen hata mesajları loglarda detaylı, kullanıcı tarafında ise sade kalır.
VPS Üzerinde Güvenli Secret Yönetimi
.env dosyalarını Git deposuna hiç koymamak, staging ve production için ayrı .env dosyalarını sadece sunucuda saklamak artık endüstri standardı. VPS tarafında gizli anahtarların güvenli yönetimi için:
- .env dosyalarını sadece uygulama kullanıcısının okuyabileceği izinlerle saklayın.
- CI/CD hattınızda SSH key ve production secret’larını CI gizli değişkenleri (secret store) içinde tutun.
- Mümkünse .env yerine systemd unit veya container ortam değişkenleri kullanarak merkezi bir secrets yönetimi kurun.
Bu konuda daha derin ve uygulamalı bir rehbere ihtiyacınız varsa, VPS’te .env ve gizli anahtar yönetimi yazımız staging/canlı ayrımını güvenli kurmanız için iyi bir referans noktasıdır.
Laravel İçin Adım Adım Staging Ortamı Kurulumu
Şimdi teoriyi pratiğe çevirelim ve tipik bir DCHost VPS üzerinde Laravel staging ortamını adım adım kuralım.
1. Domain, DNS ve SSL Kurulumu
- Staging için genellikle
staging.example.comgibi bir alt alan adı kullanın. - DNS kaydını staging sunucusuna (veya aynı sunucuysa ilgili IP’ye) yönlendirin.
- Let’s Encrypt veya kurumsal SSL sertifikası ile HTTPS’i staging’de de zorunlu hale getirin.
- Staging alan adını mutlaka
noindexetiketleriyle ve/veya parola korumasıyla arama motorlarından izole edin. Bunun için staging ve test ortamları için noindex, parola ve IP kısıtlama stratejileri rehberimizdeki örnekleri uygulayabilirsiniz.
2. Ayrı Veritabanı ve Kullanıcı Oluşturma
MySQL/MariaDB için basitçe:
- Yeni bir veritabanı oluşturun:
project_staging - Sadece bu veritabanına yetkili yeni bir kullanıcı tanımlayın.
- Gerekirse IP kısıtlamalarıyla sadece staging sunucusundan bağlantıya izin verin.
3. Uygulama Kodunu Çekmek
Staging için genellikle develop veya staging dalı kullanılır:
- Sunucuda uygulama kullanıcısına geçin.
- Git deposunu
/var/www/project-staginggibi bir dizine klonlayın. - İlgili dalı (
git checkout staginggibi) çekin.
4. Bağımlılıkların Kurulumu
Production’a yakın bir staging için:
composer install --no-dev --optimize-autoloader- Ön yüz derlemesi varsa:
npm ciardındannpm run build
Burada hedef, staging’de de canlıya mümkün olduğunca benzeyen build çıktıları üretmek.
5. .env.staging Oluşturma ve Laravel Ayarları
Canlı .env dosyasını referans alıp, staging için .env.staging hazırlayın ve staging sunucusunda .env adıyla kaydedin. Ardından:
php artisan key:generatephp artisan config:clearvephp artisan config:cachephp artisan route:cacheve gerekiyorsaphp artisan view:cache
Staging’de debug seviyesini daha yüksek ama kullanıcıya yansımayacak şekilde ayarlamak, log analizi için büyük rahatlık sağlar.
6. Migration, Seeder ve Storage Ayarları
php artisan migrate --force(CI/CD üzerinden otomatik tetiklenecek şekilde de kurabilirsiniz).- Gerekiyorsa staging’e özel seed’leri manuel çalıştırın.
php artisan storage:linkile dosya linklerini oluşturun.- Storage ve cache dizinlerinin izinlerini doğru ayarlayın.
7. Queue, Scheduler ve Horizon
Laravel projelerinde staging ortamında da queue ve scheduler’ı mümkün olduğunca production’a benzer çalıştırmak iyi bir pratiktir:
- Supervisor veya systemd ile
php artisan queue:worksüreçlerini staging’de de ayağa kaldırın. - Cron ile
php artisan schedule:runtetikleyin. - Horizon kullanıyorsanız, dashboard erişimini IP veya parola ile sınırlayın.
Queue ve Horizon’un VPS kaynak kullanımı üzerindeki etkisini anlamak için, Laravel Horizon ve queue işleri için VPS kaynak planlama rehberimiz staging ve canlı kaynaklarını hesaplarken elinizi güçlendirecektir.
Node.js İçin Adım Adım Staging Ortamı Kurulumu
Node.js tarafında da benzer mantığı takip ediyoruz, fakat runtime ve process yönetimi farklı olduğu için adımlar biraz değişiyor.
1. Node.js Runtime ve Kullanıcı Yapısı
- Sunucuda LTS sürüm bir Node.js kurun (nvm veya paket yöneticisiyle).
- Uygulama için ayrı bir sistem kullanıcısı (örneğin
nodeapp) oluşturun. - Staging kodlarını bu kullanıcının home veya proje dizininde tutun.
2. Kodun Çekilmesi ve Bağımlılıkların Kurulumu
- Git deposunu
/var/www/node-staginggibi bir dizine klonlayın. git checkout stagingveya ilgili dalı seçin.npm ci --only=productionile sadece production bağımlılıklarını kurun (staging’i de production’a çok yakın tutmak için).
3. .env.staging ve Konfigürasyon
Laravel’de olduğu gibi, Node.js tarafında da staging’e özel bir .env kullanın:
NODE_ENV=staging(bazı framework’ler sadeceproductionvedevelopmenttanır; yine de staging için ayrı env değişkenleri ekleyebilirsiniz).- Veritabanı, cache, mail, ödeme ve entegrasyon ayarlarının staging’e özel olduğundan emin olun.
- Staging URL’lerini (Örn. API base URL, frontend URL) net şekilde ayırın.
4. PM2 veya systemd ile Süreç Yönetimi
Node.js uygulamasını staging’de ayağa kaldırmak için:
- PM2 kullanıyorsanız
ecosystem.config.jsiçindestagingortamı tanımı yapın. - systemd kullanıyorsanız, ayrı bir service dosyasıyla (örneğin
nodeapp-staging.service) staging portunu ve çalışma dizinini belirtin. - Logları staging için ayrı bir dizinde veya ayrı bir log index’inde tutun.
PM2/systemd, Nginx ve sıfır kesinti deploy mimarisi için adım adım örnek kurulum istiyorsanız, Node.js’i canlıya alırken panik yapma rehberimizde anlatılan üretim kalıbını staging’e birebir uygulayabilirsiniz.
5. Nginx Reverse Proxy ve SSL
Laravel’de olduğu gibi, Node.js staging ortamında da:
- Nginx’te
staging.example.comiçin ayrı bir server bloğu oluşturun. - Upstream olarak Node.js uygulamanızın portunu işaret edin.
- Let’s Encrypt sertifikası ve
HTTPS > HTTPyönlendirmelerini staging için de kurun. - Gerekirse HTTP basic auth veya IP kısıtlamasıyla staging’i dış dünyaya kapatın.
CI/CD ile Laravel ve Node.js Staging Ortamını Otomatikleştirmek
Staging ortamını bir kere kurmak yeterli değil; asıl değer, her commit’te veya belirli dallara push ettiğinizde otomatik güncellenmesi ile ortaya çıkıyor. Burada devreye CI/CD hatları giriyor.
Branch Stratejisi ve Deploy Tetikleyicileri
Laravel ve Node.js projelerinde sık gördüğümüz basit ama etkili akış şöyle:
- feature/* dalları: Geliştiriciye özel; PR açılınca CI testleri çalışır.
- develop veya staging dalı: Bu dala merge edildiğinde staging ortamına otomatik deploy.
- main/master: Tag veya belirli koşullarda production’a deploy.
Böylece staging ortamı, canlıya çıkmadan önce tüm feature’ların toplandığı ve müşteri/ürün ekibi tarafından da test edildiği bir ara durak haline gelir.
Pipeline Aşamaları: Build, Test, Deploy
Basitleştirilmiş bir CI pipeline’ı şu adımlardan oluşabilir:
- Build:
- Laravel için:
composer install,npm ci,npm run build - Node.js için:
npm ci,npm test(varsa),npm run build
- Laravel için:
- Test:
- Unit test, integration test, lint işlemleri.
- Başarısız olursa deploy aşaması hiç çalışmaz.
- Deploy:
- SSH ile staging sunucusuna bağlanma,
- Kodu
git pullveyarsyncile güncelleme, - Migration, cache, build komutlarını çalıştırma,
- Laravel için queue worker’ları, Node.js için PM2/systemd süreçlerini reload/restart etme.
Bu mantığı Git tabanlı tüm CI sistemlerinde kurabilirsiniz. Özellikle GitHub kullanıyorsanız, GitHub Actions ile VPS’e otomatik deploy ve zero‑downtime yayın rehberimizde örnek workflow dosyaları ve rsync + sembolik sürüm stratejilerini detaylı anlattık. Oradaki örnekleri Laravel ve Node.js staging ortamınıza direkt uyarlayabilirsiniz.
Zero-Downtime ve Blue-Green Yaklaşımları
Staging ortamında bile sıfır kesinti hedeflemek, canlıya geçiş mimarisini de çok kolaylaştırır. Örneğin:
- Blue-Green: Aynı sunucuda iki farklı dizinde (blue/green) uygulamayı tutup, Nginx’teki symlink’i değiştirerek hızlı switch yapmak.
- Canary: Trafiğin küçük bir yüzdesini yeni sürüme yönlendirmek, sorun yoksa yavaş yavaş artırmak.
Laravel tarafında bu yaklaşımların canlı WooCommerce ve Laravel projelerinde nasıl kullanıldığını görmek isterseniz, blue-green deployment ile Laravel uygulamalarını sıfır kesintiyle güncelleme rehberimizde uygulamalı örnekler bulabilirsiniz. Aynı prensipleri Node.js tarafında da birebir uygulamak mümkün.
Staging Ortamında Güvenlik, Performans ve SEO Detayları
Staging ortamı çoğu zaman “nasıl olsa test sistemi” diye biraz salınan bir alan oluyor; fakat yanlış yapılandırılmış bir staging, hem güvenlik hem SEO hem de performans tarafında başınızı ağrıtabilir.
Güvenlik: Staging de Üretim Kadar Ciddi Olmalı
- Staging alan adını mutlaka parola veya IP kısıtlaması ile koruyun.
- Admin panel ve API endpoint’lerinde canlıdaki WAF/Rate limiting kurallarının benzerini kullanın.
- Veritabanı erişimlerini IP veya private network ile sınırlayın.
- Hassas verileri staging’e maskelemeden taşımayın.
SEO: Staging’in Arama Motorlarına Sızmasını Engellemek
<meta name="robots" content="noindex, nofollow" />kullanın.- robots.txt içinde staging alan adını engelleyin.
- Sitemap üretimini staging’de devre dışı bırakın veya ayrı bir path’e alın.
- Staging URL’lerinin production URL’lerine canonical vermemesine dikkat edin.
Bu konuyu daha operasyonel seviyede görmek için, tekrar staging ve test ortamları için noindex ve parola koruma yazımızdaki .htaccess/Nginx örneklerine bakabilirsiniz.
Performans: “Nasıl Olsa Test” Demeyin
Staging ortamı canlı kadar güçlü olmak zorunda değil, ama performans karakteristiği benzer olmalı:
- PHP-FPM, Node.js worker, veritabanı ve cache için benzer sürüm ve benzer konfig kullanın.
- Yük testlerini staging’de yaparken CPU, RAM, I/O ve veritabanı metriklerini canlıdakiyle kıyaslayın.
- CDN, cache ve HTTP/2/3 gibi optimizasyonları staging’de de aktif tutun; canlıya geçerken sürpriz yaşamayın.
DCHost Üzerinde Örnek Staging Mimarileri
DCHost altyapısında Laravel ve Node.js projeleri için sık kullandığımız iki temel staging senaryosunu özetleyelim.
Senaryo 1: Tek VPS’te Canlı + Staging (Küçük/Orta Projeler)
- 1 adet NVMe VPS (örneğin 2–4 vCPU, 4–8 GB RAM)
- İki ayrı vhost:
example.com(canlı) vestaging.example.com - İki ayrı veritabanı ve kullanıcı.
- Laravel ve/veya Node.js için ayrı process/pool tanımları.
- CDN ve e-posta gibi entegrasyonlar canlı/staging olarak ayrı anahtarlarla yönetilir.
Maliyet avantajlıdır ve tek sunucu yönetimi isteyen ekipler için idealdir. Kaynak planlaması yaparken canlı trafiğin tepe noktalarını ve staging’de yapılacak yük testlerini birlikte hesaplamak gerekir.
Senaryo 2: Ayrı VPS’te Staging (Büyüyen ve Kritik Projeler)
- 1 adet production VPS veya dedicated sunucu,
- 1 adet daha küçük kaynaklı staging VPS,
- Veritabanı ya her VPS’te ayrı, ya da paylaşılan ama ayrı instance olarak kurulmuş olabilir.
- CI/CD hattı staging ve production için ayrı deploy job’ları çalıştırır.
Bu mimari, özellikle e-ticaret, SaaS veya yüksek trafikli Node.js API’lerinde canlı kaynağını staging testlerinden tamamen yalıtmak için idealdir. Trafik patlamaları, kampanya dönemleri veya büyük schema değişiklikleri öncesinde staging’e ekstra kaynak geçici olarak tanımlayıp test yapmak da çok kolaylaşır.
Özet ve Sonraki Adımlar
Laravel ve Node.js projelerinde staging ortamı kurmak, ilk bakışta “ekstra iş” gibi görünse de, doğru kurgulandığında aslında canlı ortamı sakinleştiren ve geliştirici ekibin özgüvenini artıran bir güvenlik katmanı haline geliyor. Ayrı veritabanı, tutarlı migration/seed stratejisi, dikkatle hazırlanmış .env dosyaları ve otomatik çalışan CI/CD hatları sayesinde “canlıya çıkarken tedirgin olmak” yerini, ölçülebilir ve tekrarlanabilir bir süreç deneyimine bırakıyor.
DCHost olarak amacımız, Laravel ve Node.js projelerinizi sadece barındırmak değil; geliştirme–staging–canlı hattınızı birlikte tasarlayarak operasyonel yükünüzü azaltmak. Staging ortamınızı kurarken:
- Önce mimariyi ve veri senkronizasyon stratejinizi kâğıt üzerinde netleştirin.
- Sonra .env ve secret yönetimini güvenli hale getirin.
- Son olarak da Git tabanlı CI/CD hattıyla staging ve production deploy’larını otomatikleştirin.
Eğer mevcut Laravel veya Node.js projeniz için DCHost üzerinde staging ortamı kurgulamak istiyorsanız, altyapınızı ve kod tabanınızı birlikte inceleyerek size özel bir yol haritası çıkarabiliriz. İsterseniz önce yukarıda link verdiğimiz rehberleri okuyup kendi taslağınızı oluşturun, ardından destek ekibimizle beraber bunu DCHost VPS, dedicated veya colocation altyapınız üzerinde adım adım hayata geçirelim.
