İçindekiler
- 1 Giriş: O Cuma Akşamı ve Beyaz Ekran Anısı
- 2 Akışın Haritası: Neden Geliştirme–Staging–Canlı Ayrımı Hayat Kurtarır?
- 3 WordPress Cephesinde Yolculuk: Tema, Eklenti, Veri ve Medya
- 4 Laravel Cephesinde Yolculuk: Atomik Dağıtım, Kuyruklar ve Sıcak Başlatma
- 5 Sıfır Kesinti Dağıtımın Sırrı: Sürüm Klasörleri, Isıtılmış Önbellek ve Sağlık Kontrolleri
- 6 Veritabanı Değişiklikleri: Korkulan Anı Sakinleştirmek
- 7 Önbellek, CDN ve Oturumlar: Sessiz Değişiklik Yapmanın İncelikleri
- 8 Staging Verisi: Gerçekçi, Güncel ve Güvenli
- 9 Güvenli Dağıtımda Küçük Ama Etkili Dokunuşlar
- 10 CI/CD: Rutin Haline Gelen Güven
- 11 Altyapı ve Ağ: Küçük Eşikler Büyük Akışlar Yaratır
- 12 Kapanış: Sükunetin Mimarisi ve Küçük Bir Vedalaşma
Giriş: O Cuma Akşamı ve Beyaz Ekran Anısı
Hiç canlıya kod atarken elleriniz terledi mi? Ben bir cuma akşamını çok iyi hatırlıyorum. Tüm hafta rahat geçti, testler fena değildi, herkes evine dağılmıştı. Derken, dağıtım başladı ve ana sayfada kısa bir beyaz ekran… On saniye bile sürmedi belki ama ekibin kalbi küt küt attı. O an anladım: sıfır kesinti dağıtım bir lüks değil, bir güven duygusuymuş.
Bu yazıda seni geliştirme–staging–canlı akışının içine çekmek istiyorum. WordPress ve Laravel dünyasında güvenli ve huzurlu dağıtımın nasıl kurulduğunu, hangi küçük dokunuşların büyük fark yarattığını, nerede fren yapıp nerede gazlaman gerektiğini konuşacağız. Mesela, staging’de veriyi nasıl tazeleriz? Canlıda önbellek ve oturumlar nasıl etkilenir? Veritabanı değişiklikleri neden herkesin kabusu olur? Hepsini, bir projeyi masaya yatırır gibi, sıcak bir sohbetle ele alalım.
Amacım sihirli bir reçete vermek değil. Daha çok, “biz bunu böyle yaptık ve işe yaradı” diyeceğim somut yöntemlerle yanına oturmak. Hadi akışı beraber kurcalayalım.
Akışın Haritası: Neden Geliştirme–Staging–Canlı Ayrımı Hayat Kurtarır?
Önce aklını sakinleştiren bir düzen kurmak lazım. Geliştirme ortamı özgürlük alanı; dene, boz, yeniden dene. Staging ise provadır; ışıklar açık, kostümler tamam, sahneye çıkmadan son prova burada. Canlı ortam ise seyircinin nefesini hissettiğin an. Bu üçlü düzgün akmazsa, ya canlıda sürpriz yaşarsın ya da yeni özellikler gereğinden fazla bekler.
Staging’in gücü, canlıya en yakın koşulları taklit etmesinde. Aynı PHP sürümü, benzer veritabanı sürümü, aynı önbellek katmanı… Ufak farklar bile büyük gölgeler oluşturabilir. Mesela geliştiricinin makinesinde “anında” çalışan bir sorgu, canlıda milyonlarca satırın arasında at nefes nefese kalabilir. O yüzden staging’i, canlıya ayna tutan huzurlu bir oda gibi düşün. Aynı evde başka bir oda; ama duvar kağıtları aynı.
Ve sonra akış: feature branch’te çalış, staging’e birleş, üzerinde gez, ölç, kokla. Sorun yoksa canlıya küçük adımlarla yürüt. Küçük adımlar neden mi? Çünkü küçük değişiklik, küçük risk demektir; geri dönüşü de kolaydır.
WordPress Cephesinde Yolculuk: Tema, Eklenti, Veri ve Medya
Versiyonlanmayan şey, kontrolden çıkar
WordPress’te en çok kaçırılan nokta, tema ve eklenti değişikliklerinin sürüm kontrolüne girmemesi. “Ufak bir düzenleme yaptım” cümlesi kadar çok yangın çıkartan başka bir cümle yok. Benim reçetem şu: Temayı, child theme’i ve projenin özel eklentilerini Git’e koy. Paket yönetimi kullanıyorsan Composer tabanlı bir yapı veya bedrock benzeri bir mimari, güncellemeleri öngörülebilir hale getirir.
Güncellemeleri staging’de dener, sorun görürsen orada çözersin. Canlıda “bir dakikacık” diye yaptığın işin, kullanıcının oturumunu düşürdüğü o anı kimse yaşamasın. Küçük adımlar, net sürümler, temkinli ilerleyiş… Hepsi huzura hizmet ediyor.
Veritabanı değişiklikleri ve o meşhur alan değiştirme
WordPress’te URL değişimleri, seri hale getirilmiş alanlar derken arama–değiştir işlemi çoğu zaman tacımız. Geliştirme ve staging verisini canlıdan güncellediğinde, alanları doğru değiştirmezsen sürprizler çıkar. Bu noktada WP-CLI komutları ile güvenli arama–değiştir işleri, işini inanılmaz kolaylaştırır. Kural basit: Değişikliği staging’de yap, linkleri ve resimleri tek tek gözle kontrol et, ancak öyle canlıya yaklaş.
Medya dosyaları tek kopya, herkes görsün
Staging ile canlı arasında medya eşitlemek sürekli bir dert olabilir. Kopyalamalar, çakışan dosyalar, eksik thumbnail’ler… Çoğu projede sorunu kökten şu şekilde çözdük: Medyayı nesne depolamaya taşıdık, CDN ile servis ettik. Böylece staging ve canlı aynı kaynağı görür hale geldi. Adım adım ilerlemek istersen şu rehberde yumuşak bir geçişi anlattım: WordPress medyasını S3’e taşıma, CDN ve önbellek geçersizleştirme üzerine sıcak bir yürüyüş. Hedef, tek kaynaktan akan medya ve dağıtımı bozmayan bir dosya dünyası.
Önbellek ile anlaş, seni sırtında taşır
WordPress’te hızın yarısı önbellekten gelir. Ama dağıtım sırasında önbellek yanlış yönetilirse eski şablonlar, kaymış CSS’ler, kafa karıştırıcı anlar yaşatır. Tam sayfa önbellekleme ve doğru invalidation sağlıklı bir evliliktir. Şu pratiklerin özellikle faydasını gördüm: deploy sonrası kritik sayfaları ısıtmak, CSS/JS dosyalarını sürümlemek ve CDN tarafında hedefli temizleme yapmak. Daha derine bakmak istersen, tam sayfa önbellekleme ve WooCommerce dokunuşları üzerine bu rehber sana iyi gelecektir.
Laravel Cephesinde Yolculuk: Atomik Dağıtım, Kuyruklar ve Sıcak Başlatma
Atomik dağıtımın huzuru
Laravel’de sıfır kesinti dağıtımın anahtarı, atomik bir yaklaşım. Yani yeni sürümü gizli bir odada hazırlayıp hazır olunca anahtarı çevirmek. Klasik yöntem: sürüm klasörleri, paylaşılan dizinler ve “current” adında bir sembolik bağlantı. Yeni sürümün bağımlılıkları kurulmuş, derlenmiş, önbellekleri ısıtılmış olur. Sonra tek hamlede “current” bağlantısını yeni sürüme çevirirsin. Bu, tiyatroda dekoru seyirci fark etmeden değiştirmek gibi.
Bu yaklaşımı VPS üzerinde adım adım kurmak istersen, şu rehberde anlattığım akış sana temiz bir yol haritası sunar: Laravel uygulamalarını VPS’te yayınlama ve sıfır kesinti dağıtımın sıcacık yol haritası. Temel fikir basit: hazırla, ısıt, yokla, değiştir.
Önbellekleri ısıt, işçilere nazik davran
Dağıtımdan hemen önce config, route ve view önbelleklerini tazelemek; log klasörlerini ve paylaşılan storage’ı düzgün bağlamak dağıtımı hem hızlı hem de sessiz kılar. Kuyruk çalışanlarını (Horizon gibi) nazikçe yeniden başlatmak önemli. Sert kapatmalar kullanıcıların bekleyen işlerine gölge düşürür. Dağıtım bittiğinde Horizon’u “devam” ettirmek küçük ama etkili bir dokunuş.
Resmî kaynaklara bir göz at
Pratik kurulumlarla ilerlerken, temel prensipleri gözden kaçırmamak iyi hissettirir. Laravel için resmî dağıtım rehberi kafa karıştıran anlarda pusula görevi görür. Çoğu zaman basit bir “config:cache” veya yanlış bir dosya izni, tüm hikayeyi değiştirir. Masaya yatır, sırları ayır, sonra adım adım ilerle.
Sıfır Kesinti Dağıtımın Sırrı: Sürüm Klasörleri, Isıtılmış Önbellek ve Sağlık Kontrolleri
Bir dağıtımı iki kez yaşa: önce sakince, sonra gerçek
Sıfır kesinti dediğimizde aslında iki farklı yolculuk var. Birincisi, sürümü kenarda hazırlamak: bağımlılıkları kur, varlıkları derle, önbelleği ısıt, çevresel değişkenleri doğru yerleştir. İkincisi, sağlığı kontrol etmek: yeni sürüm kapalı kapılar ardında sağlam mı? Sağlık kontrolü bir uç nokta, basit bir dizi test veya kritik sayfaların ısıtılması olabilir. Sorunsuzsa anahtarı çevirirsin.
Bu düzeni sürekli hale getirmek istersen, rsync, sembolik sürümler ve systemd ile sıfır kesinti CI/CD kurulumu tam bir saha notları defteri. Orada göreceğin gibi, işin özü ritim yakalamak: her dağıtım aynı şarkıyı çalsın ki kimse şaşırmasın.
Blue/Green’i karmaşıklaştırmadan düşün
Blue/Green denince çoğu kişi ürküyor. İki ayrı dünya yönetmek zor gelir. Ama küçük projelerde bile basit bir versiyon klasörleri stratejisi, küçük bir “hazırlık–değiştir” ritüeli ile aynı hissi verir. İki ayrı parkurda koşmak değil, tek parkurda şerit değiştirmek gibi. Yeni şeridi önce gözünle yokla; sonra direksiyonu kır.
Veritabanı Değişiklikleri: Korkulan Anı Sakinleştirmek
Önce şema, sonra kod; bazen de önce kod, sonra şema
Kırılgan nokta burada. Büyük tablo değişiklikleri, indeks eklemeler ya da sütun tiplerinin dönüşümü, dağıtımın en sessiz düşmanı. Benim favori yaklaşımım, değişiklikleri iki adımda yürütmek: önce veritabanını yeni koda uyumlu hale getiren zararsız eklemeleri yapmak (yeni sütun eklemek gibi), ardından uygulamayı bu sütunları kullanacak şekilde güncellemek. Tam tersi durum da olabilir; özellik bayrakları ile yeni kodu gizleyip, gerekli şema değişiklikleri tamamlanınca bayrağı açarsın.
Bazı değişiklikler kilitlenmeye yol açar, özellikle yoğun yazma trafiği olan e-ticaret veritabanlarında. Bu anlarda küçük saatlerde aşamalı geçiş, arka planda kopyalama ya da çevrimdışı kalmadan çalışan çevik araçlar imdada yetişir. Önemli olan, değişikliği staging’de gerçekçi bir veri seti ile prova etmek ve canlıda beklenmedik kilitlenmelere karşı plan yapmış olmaktır.
Yedek, geri dönüş ve günlükler
Veritabanında geri dönüş planın yoksa, aslında planın yok demektir. Dağıtımdan hemen önce elle tutulur bir yedek almak ve geri dönüş adımlarını yüksek sesle söyleyebilmek, özgüven verir. Kolay, güvenli ve hızlı bir yedekleme düzeni kurmak için şu rehber elini tutar: Restic ve Borg ile S3 uyumlu uzak yedekleme. Geri dönüşü prova etmeyi de unutma; sadece yedek almak yetmez, geri dönmeyi de bilmek gerekir.
Önbellek, CDN ve Oturumlar: Sessiz Değişiklik Yapmanın İncelikleri
Önbelleği kırmadan tazelemek
Dağıtımda CSS/JS gibi varlık dosyalarını sürümlemek, kullanıcıların her seferinde doğru dosyaları görmesini sağlar. CDN kullanıyorsan, hedefli bir temizleme ile sadece etkilenen yolları tazelemek hem ekonomik hem sakin bir geçiş sunar. Varnish, Nginx FastCGI Cache ya da uygulama düzeyi önbellekler için plan aynı: dağıtım sonrası kritik sayfaları ısıt, geri kalan sayfaları zamana bırak.
WordPress’te tam sayfa önbellek varsa, tema değişikliklerinden sonra kayıtlı şablonlar kısa süre kafayı karıştırabilir. Laravel’de ise view cache’i dağıtım sırasında yenileyip, kullanıcıya sıcak şablonlar sunmak rahatlatır. İki dünyada da önemli olan, önbelleğin karşı takım olmadığını bilmektir. Doğru beslersen sırtında taşır.
Oturumlar ve işçiler
Oturumları diskte tutan uygulamalarda sürümler arası küçük farklar sorun çıkarabilir. Dosya tabanlı oturumlar yerine merkezi bir mağaza kullanmak (Redis gibi) dağıtımların yumuşamasını sağlar. Kuyruk işçilerini dağıtım sırasında nazikçe durdurup yeniden başlatmak da bekleyen işlerin düzenini korur. Ziyaretçinin ödeme adımında patlayan bir iş, ertesi gün gelen “neden olmadı” mesajlarının sebebidir, kimse kaçamaz.
Staging Verisi: Gerçekçi, Güncel ve Güvenli
Maskeleyerek tazele
Staging’i canlıya benzetirken dikkat etmemiz gereken hassas bir alan var: kişisel veriler. Canlı verinin staging’e taşınması gerekiyorsa, kritik alanları maskelemek şart. E-posta adreslerini geçici adreslerle değiştir, telefonları uydudan inmiş gibi davran, ödeme bilgilerini asla taşımayı düşünme. Ama veri yapısı gerçekçi olsun ki performans ve uyumluluk testleri sahici sonuç versin.
Medya trafiğini bölmek yerine ortaklaştır
Staging ve canlı arasında medya kopyalamak yerine tek bir kaynağa bağlanmak, dağıtım anında sürpriz ihtimalini azaltır. Bu yüzden nesne depolama ve CDN yaklaşımı, sadece hız için değil, düzen için de iyidir. Medyayı tek elde toplayıp imzalı URL’ler ve akıllı önbellek temizleme ile yönetmek, dağıtımı arka planda tutar.
Güvenli Dağıtımda Küçük Ama Etkili Dokunuşlar
Sağlık uç noktaları ve ısıtma turu
Dağıtımdan hemen önce hazırladığın sürümü bir sağlık uç noktasıyla yoklamak, “hazır mıyım?” sorusuna hızlı bir cevap verir. Ardından kritik rotaları ısıt; giriş sayfası, ödeme adımı, arama sonucu… Bu ısıtma turu kullanıcının ilk adımını pürüzsüz yapar. Gerektiğinde sadece bir sayfanın bile önceden hazırlanması, o sayfayı bin kişiye sorunsuz sunabilir.
Özellik bayrakları ile yumuşak açılış
Köklü bir özelliği tek seferde açmak yerine, küçük bir kullanıcı dilimine yavaşça açmak daha sakin bir geçiş sunar. Özellik bayrağı, “şimdilik dursun” demenin en zarif yolu. Sorun gördüğünde kapatır, düzeltir, sonra yeniden denersin. Bu yaklaşım özellikle veritabanı geçişleri ve yoğun önbellekli sayfalarda huzur verir.
CI/CD: Rutin Haline Gelen Güven
Ritmi yakaladığında, dağıtım sıradanlaşır
Bir projede dağıtım ne kadar tahmin edilebilirse, ekip o kadar rahat eder. Tek tıkla tetiklenen, adımları herkesçe bilinen bir akış… Kodu al, bağımlılıkları kur, testleri çalıştır, varlıkları derle, önbelleği ısıt, sağlığı kontrol et, sembolik bağlantıyı çevir, kritik sayfaları ısıt, bitir. Bu akışa bir kez tempo verdiğinde, “Cuma akşamı deploy olur mu?” sorusu kendi kendine buharlaşır.
Bu düzeni inşa ederken, “rsync mi, paket mi, konteyner mi?” sorusuna tek bir cevap yok. Ölçeğe ve alışkanlıklara göre şekillenir. Önemli olan, otomasyonun her adımı görünür kılması. Hangi adımda ne olduğunu bilmek, tıkanıklığı anında bulmayı sağlar.
WordPress ve Laravel için ortak nokta
İki dünyanın duygusu farklı olsa bile, iyi bir CI/CD boru hattı onları aynı masada buluşturur. Derleme ve ısıtma adımları Laravel’de biraz daha belirgindir; WordPress’te ise medya ve önbellek tılsımı ağır basar. İkisinde de hedef aynıdır: kullanıcı fark etmeden perde değiştir.
İstenen kurulumun püf noktalarını uçtan uca görmek istersen, VPS üzerinde sıfır kesinti CI/CD kurma rehberi ve Laravel dağıtım yol haritası iyi birer referans olur.
Altyapı ve Ağ: Küçük Eşikler Büyük Akışlar Yaratır
Web sunucusu ayarları ve ılık başlatma
Nginx veya benzeri bir katmanda bağlantı havuzları ve yumuşak yeniden yükleme seçenekleri, dağıtım sırasında nefes alanları oluşturur. Dosya izinleri, kullanıcı–grup ayarları, log rotasyonu gibi küçük görünen işler bile akışı etkiler. Küçük taşlar, büyük nehri yönlendirir.
CDN ve kenar katmanında netlik
CDN kullanıyorsan, önbellek TTL’lerini ve temizleme stratejilerini bilerek ayarla. Tüm siteyi boşaltmak yerine, değişen paketlerin yolunu hedefle. Bazen tek bir CSS dosyasının versiyonlanması, koca bir temizlemeyi gereksiz kılar. Konuyu temelden kurmak istersen, CDN ve HTTP davranışlarına dair pratik bir ısınma turu için “HTTP/2 ve HTTP/3” üzerine kısa bir tur atmak iyi gelir; kendi alt yapın için temel prensipleri gözden geçir.
Kapanış: Sükunetin Mimarisi ve Küçük Bir Vedalaşma
Dağıtım, çoğu ekipte kalp atışını hızlandıran bir an. Oysa hedefimiz, kimsenin fark etmediği bir sıradanlık yaratmak. Geliştirmeyi özgür, staging’i dürüst, canlıyı huzurlu kılınca bu oluyor. WordPress’te medya ve önbellek davranışına özen, Laravel’de atomik dağıtım ve nazik işçi yönetimi, veritabanında planlı adımlar… Hepsi görevi belli küçük kahramanlar.
Pratik birkaç öneriyle bitireyim. Bir: Dağıtımı küçük parçalara böl, her parçayı rahatça ölç. İki: Staging verisini güncel tut ama kişisel verileri maskele. Üç: Dağıtım sonrası kritik sayfaları ısıt, önbelleğe dost davran. Dört: Her dağıtım öncesi hızlı bir yedek al, geri dönüşü bir kez prova et. Beş: Süreci otomatikleştir, log’ları görünür kıl. Tüm bunlar bir araya gelince, Cuma akşamları bile içten içe gülümser hale geliyorsun.
Umarım bu yolculuk, senin projende de sükunetin mimarisini kurmana yardımcı olur. İstersen önbellek tarafını daha derinlemesine keşfetmek için tam sayfa önbellekleme rehberine, medya dünyasını sakinleştirmek için S3’e taşıma yazısına ve otomasyonun kalbini oluşturmak için CI/CD kurulum rehberine göz atabilirsin. Bir dahaki yazıda görüşmek üzere; dağıtımların usul usul, kullanıcıların yüzü gülsün.
