{"id":1884,"date":"2025-11-15T19:15:35","date_gmt":"2025-11-15T16:15:35","guid":{"rendered":"https:\/\/www.dchost.com\/blog\/php-8-x-yukseltme-kontrol-listesi-wordpress-ve-laravelde-geriye-uyumluluk-opcache-preload-ve-fpm-havuz-ayarlari-nasil-tatli-tatli-kurulur\/"},"modified":"2025-11-15T19:15:35","modified_gmt":"2025-11-15T16:15:35","slug":"php-8-x-yukseltme-kontrol-listesi-wordpress-ve-laravelde-geriye-uyumluluk-opcache-preload-ve-fpm-havuz-ayarlari-nasil-tatli-tatli-kurulur","status":"publish","type":"post","link":"https:\/\/www.dchost.com\/blog\/php-8-x-yukseltme-kontrol-listesi-wordpress-ve-laravelde-geriye-uyumluluk-opcache-preload-ve-fpm-havuz-ayarlari-nasil-tatli-tatli-kurulur\/","title":{"rendered":"PHP 8.x Y\u00fckseltme Kontrol Listesi: WordPress ve Laravel\u2019de Geriye Uyumluluk, OPcache Preload ve FPM Havuz Ayarlar\u0131 Nas\u0131l Tatl\u0131 Tatl\u0131 Kurulur?"},"content":{"rendered":"<div class=\"dchost-blog-content-wrapper\"><div id=\"toc_container\" class=\"toc_transparent no_bullets\"><p class=\"toc_title\">\u0130&ccedil;indekiler<\/p><ul class=\"toc_list\"><li><a href=\"#Ofiste_Bir_Yukseltme_Gunu_Soyle_Basladi8230\"><span class=\"toc_number toc_depth_1\">1<\/span> Ofiste Bir Y\u00fckseltme G\u00fcn\u00fc: \u015e\u00f6yle Ba\u015flad\u0131&#8230;<\/a><\/li><li><a href=\"#Neden_Simdi_ve_Nasil_Baslamali_Kucuk_Bir_Plan_Koca_Bir_Rahatlik\"><span class=\"toc_number toc_depth_1\">2<\/span> Neden \u015eimdi ve Nas\u0131l Ba\u015flamal\u0131? K\u00fc\u00e7\u00fck Bir Plan, Koca Bir Rahatl\u0131k<\/a><\/li><li><a href=\"#Geriye_Uyumluluk_WordPress_ve_Laravelde_Nereden_Tutariz\"><span class=\"toc_number toc_depth_1\">3<\/span> Geriye Uyumluluk: WordPress ve Laravel\u2019de Nereden Tutar\u0131z?<\/a><ul><li><a href=\"#WordPress_Eklenti_ve_Tema_Kivrimlari\"><span class=\"toc_number toc_depth_2\">3.1<\/span> WordPress: Eklenti ve Tema K\u0131vr\u0131mlar\u0131<\/a><\/li><li><a href=\"#Laravel_Composer_Paketler_ve_Kucuk_Surprizler\"><span class=\"toc_number toc_depth_2\">3.2<\/span> Laravel: Composer, Paketler ve K\u00fc\u00e7\u00fck S\u00fcrprizler<\/a><\/li><\/ul><\/li><li><a href=\"#Test_Ortami_Loglar_ve_Kucuk_Bir_Hata_Avi_Ritueli\"><span class=\"toc_number toc_depth_1\">4<\/span> Test Ortam\u0131, Loglar ve K\u00fc\u00e7\u00fck Bir Hata Av\u0131 Rit\u00fceli<\/a><ul><li><a href=\"#Hata_Raporlamayi_Bilerek_Biraz_Gurultulu_Birakmak\"><span class=\"toc_number toc_depth_2\">4.1<\/span> Hata Raporlamay\u0131 Bilerek Biraz G\u00fcr\u00fclt\u00fcl\u00fc B\u0131rakmak<\/a><\/li><\/ul><\/li><li><a href=\"#OPcache_Preload_Ne_Zaman_Parlar_Nasil_Kurulur\"><span class=\"toc_number toc_depth_1\">5<\/span> OPcache Preload: Ne Zaman Parlar, Nas\u0131l Kurulur?<\/a><ul><li><a href=\"#Preloadun_Kisa_Hikayesi\"><span class=\"toc_number toc_depth_2\">5.1<\/span> Preload\u2019un K\u0131sa Hik\u00e2yesi<\/a><\/li><li><a href=\"#Basit_Bir_Preload_Dosyasi_ve_Dikkat_Edilecek_Noktalar\"><span class=\"toc_number toc_depth_2\">5.2<\/span> Basit Bir Preload Dosyas\u0131 ve Dikkat Edilecek Noktalar<\/a><\/li><\/ul><\/li><li><a href=\"#PHP-FPM_Havuz_Ayarlari_Gercekci_Secimler_ve_Sakin_Performans\"><span class=\"toc_number toc_depth_1\">6<\/span> PHP-FPM Havuz Ayarlar\u0131: Ger\u00e7ek\u00e7i Se\u00e7imler ve Sakin Performans<\/a><ul><li><a href=\"#pm_pmmax_children_ve_Hafiza_Matematigi\"><span class=\"toc_number toc_depth_2\">6.1<\/span> pm, pm.max_children ve Haf\u0131za Matemati\u011fi<\/a><\/li><\/ul><\/li><li><a href=\"#JIT_memory_limit_Uzantilar_ve_Ufak_Ayarlar\"><span class=\"toc_number toc_depth_1\">7<\/span> JIT, memory_limit, Uzant\u0131lar ve Ufak Ayarlar<\/a><\/li><li><a href=\"#WordPress_ve_Laravelde_Kod_Tarafinda_Kucuk_Dokunuslar\"><span class=\"toc_number toc_depth_1\">8<\/span> WordPress ve Laravel\u2019de Kod Taraf\u0131nda K\u00fc\u00e7\u00fck Dokunu\u015flar<\/a><ul><li><a href=\"#Tur_Ipuclari_ve_Hata_Mesajlariyla_Barismak\"><span class=\"toc_number toc_depth_2\">8.1<\/span> T\u00fcr \u0130pu\u00e7lar\u0131 ve Hata Mesajlar\u0131yla Bar\u0131\u015fmak<\/a><\/li><\/ul><\/li><li><a href=\"#Dagitim_Stratejisi_Sicak_Sicak_Gecis_Sakin_Kullanici_Deneyimi\"><span class=\"toc_number toc_depth_1\">9<\/span> Da\u011f\u0131t\u0131m Stratejisi: S\u0131cak S\u0131cak Ge\u00e7i\u015f, Sakin Kullan\u0131c\u0131 Deneyimi<\/a><ul><li><a href=\"#Yumusak_Gecisin_Kucuk_Sirlari\"><span class=\"toc_number toc_depth_2\">9.1<\/span> Yumu\u015fak Ge\u00e7i\u015fin K\u00fc\u00e7\u00fck S\u0131rlar\u0131<\/a><\/li><\/ul><\/li><li><a href=\"#Guvenlik_Oturumlar_ve_Cerezlerin_Kucuk_Incelikleri\"><span class=\"toc_number toc_depth_1\">10<\/span> G\u00fcvenlik, Oturumlar ve \u00c7erezlerin K\u00fc\u00e7\u00fck \u0130ncelikleri<\/a><\/li><li><a href=\"#Kucuk_Pratikler_WordPress_ve_Laravelde_Elinin_Altinda_Dursun\"><span class=\"toc_number toc_depth_1\">11<\/span> K\u00fc\u00e7\u00fck Pratikler: WordPress ve Laravel\u2019de Elinin Alt\u0131nda Dursun<\/a><ul><li><a href=\"#WordPress_Icin\"><span class=\"toc_number toc_depth_2\">11.1<\/span> WordPress \u0130\u00e7in<\/a><\/li><li><a href=\"#Laravel_Icin\"><span class=\"toc_number toc_depth_2\">11.2<\/span> Laravel \u0130\u00e7in<\/a><\/li><\/ul><\/li><li><a href=\"#Gozden_Kacan_Ama_Etkili_Healthcheck_Status_ve_Minik_Izleme_Hileleri\"><span class=\"toc_number toc_depth_1\">12<\/span> G\u00f6zden Ka\u00e7an Ama Etkili: Healthcheck, Status ve Minik \u0130zleme Hileleri<\/a><\/li><li><a href=\"#Yedek_Geri_Donus_ve_Kucuk_Bir_Cesaret_Dozu\"><span class=\"toc_number toc_depth_1\">13<\/span> Yedek, Geri D\u00f6n\u00fc\u015f ve K\u00fc\u00e7\u00fck Bir Cesaret Dozu<\/a><\/li><li><a href=\"#Isin_Son_Dokunusu_Kucuk_Bir_Guvenlik_Taramasi_ve_Izleme\"><span class=\"toc_number toc_depth_1\">14<\/span> \u0130\u015fin Son Dokunu\u015fu: K\u00fc\u00e7\u00fck Bir G\u00fcvenlik Taramas\u0131 ve \u0130zleme<\/a><\/li><li><a href=\"#Kapanis_Yukseltmeyi_Bir_Defalik_Is_Degil_Kultur_Olarak_Dusunmek\"><span class=\"toc_number toc_depth_1\">15<\/span> Kapan\u0131\u015f: Y\u00fckseltmeyi Bir Defal\u0131k \u0130\u015f De\u011fil, K\u00fclt\u00fcr Olarak D\u00fc\u015f\u00fcnmek<\/a><\/li><li><a href=\"#Kaynaklar_ve_Notlar_Bir_Goz_Atmalik\"><span class=\"toc_number toc_depth_1\">16<\/span> Kaynaklar ve Notlar: Bir G\u00f6z Atmal\u0131k<\/a><\/li><\/ul><\/div>\n<h2 id=\"section-1\"><span id=\"Ofiste_Bir_Yukseltme_Gunu_Soyle_Basladi8230\">Ofiste Bir Y\u00fckseltme G\u00fcn\u00fc: \u015e\u00f6yle Ba\u015flad\u0131&#8230;<\/span><\/h2>\n<p>Hi\u00e7 sabah kahveni yudumlarken, \u201cBug\u00fcn \u015fu PHP 8.x i\u015fini art\u0131k kapatal\u0131m\u201d diye d\u00fc\u015f\u00fcn\u00fcp sonra eklentiler, cache, FPM havuzlar\u0131 ve bitmeyen loglar aras\u0131nda kayboldu\u011fun oldu mu? Benim oldu. Bir defas\u0131nda ofiste k\u00fc\u00e7\u00fck bir WordPress sitesi ile b\u00fcy\u00fck\u00e7e bir Laravel API\u2019sini ayn\u0131 g\u00fcn PHP 8.2\u2019ye ta\u015f\u0131ma hevesiyle ba\u015flad\u0131m. Niyet iyiydi, plan fena de\u011fildi ama her iki d\u00fcnyan\u0131n dertleri \u00e7ok farkl\u0131 \u00e7\u0131kt\u0131. WordPress\u2019te bir eklenti gizliden gizliye hatal\u0131 t\u00fcr d\u00f6n\u00fc\u015f\u00fcmlerine tak\u0131l\u0131yor, Laravel\u2019de ise bir paket eski bir fonksiyonun davran\u0131\u015f de\u011fi\u015fikli\u011fine. G\u00fcn\u00fcn sonunda anlad\u0131m ki bu i\u015f sadece versiyonu y\u00fckseltmek de\u011fil, dikkatli bir y\u00fcr\u00fcy\u00fc\u015f, k\u00fc\u00e7\u00fck bir kontrol listesi meselesi.<\/p>\n<p>Bu yaz\u0131da seni o y\u00fcr\u00fcy\u00fc\u015fe davet ediyorum. WordPress ve Laravel projelerinde PHP 8.x\u2019e y\u00fckselirken geriye uyumluluk taraf\u0131nda nelere bakmal\u0131, OPcache preload\u2019u ger\u00e7ekten ne zaman a\u00e7mal\u0131, FPM havuz ayarlar\u0131n\u0131 nas\u0131l ger\u00e7ek\u00e7i bir \u015fekilde se\u00e7meli, hepsini sohbet eder gibi konu\u015fal\u0131m. Arada kendi deneyimlerimden, senaryolardan, hatta \u201cke\u015fke ba\u015ftan yapsayd\u0131m\u201d dedi\u011fim minik ipu\u00e7lar\u0131ndan da bahsedece\u011fim. Sonunda elinde, \u00fcretimde tedirginlik ya\u015famadan uygulayabilece\u011fin, nefes ald\u0131ran bir yol haritas\u0131 kals\u0131n istiyorum.<\/p>\n<h2 id=\"section-2\"><span id=\"Neden_Simdi_ve_Nasil_Baslamali_Kucuk_Bir_Plan_Koca_Bir_Rahatlik\">Neden \u015eimdi ve Nas\u0131l Ba\u015flamal\u0131? K\u00fc\u00e7\u00fck Bir Plan, Koca Bir Rahatl\u0131k<\/span><\/h2>\n<p>\u015e\u00f6yle d\u00fc\u015f\u00fcn: PHP 8.x\u2019e ge\u00e7mek, sadece h\u0131z ve yeni \u00f6zellikler i\u00e7in de\u011fil. Hata mesajlar\u0131n\u0131n daha netle\u015fmesi, t\u00fcrlerin daha \u00f6ng\u00f6r\u00fclebilir olmas\u0131 ve art\u0131k birikmi\u015f uyar\u0131lar\u0131n y\u00fczeye \u00e7\u0131kmas\u0131 i\u00e7in de iyi bir f\u0131rsat. Benim i\u015fime en \u00e7ok yarayan k\u0131s\u0131m, eskiden gizlenen garip d\u00f6n\u00fc\u015f\u00fcmlerin art\u0131k netle\u015fmesi oldu. Eskiden bir yerlerde sessizce yuvarlan\u0131p giden bir de\u011fer, \u015fimdi sana \u201cBurada bir tutars\u0131zl\u0131k var\u201d diye ses veriyor. \u0130lk bak\u0131\u015fta g\u00fcr\u00fclt\u00fc gibi, ama sonra anl\u0131yorsun ki uzun vadede bu <strong>daha sakin bir \u00fcretim<\/strong> demek.<\/p>\n<p>Plan dedi\u011fim \u015fey b\u00fcy\u00fck bir dok\u00fcman de\u011fil. \u00d6nce k\u00fc\u00e7\u00fck bir staging kur, veriyi birebir kopyala, PHP 8.x\u2019i orada aya\u011fa kald\u0131r. Loglar\u0131 a\u00e7, uyar\u0131lar\u0131 g\u00f6zlemle, yava\u015f yava\u015f trafik simulasyonu yap. E\u011fer elinde bir CDN veya reverse proxy varsa, belli istekleri staging\u2019e y\u00f6nlendirip ger\u00e7ek kullan\u0131c\u0131 ak\u0131\u015f\u0131n\u0131 taklit eden ufak testler yapabilirsin. \u00d6zetle, \u00f6nce g\u00fcvenli bir yerde dene, sonra \u00fcretime ad\u0131m ad\u0131m ta\u015f\u0131. Bazen tek fark bir ini sat\u0131r\u0131, bazen bir composer paketini g\u00fcncellemek oluyor; ama bunu canl\u0131da ke\u015ffetmek yerine haz\u0131rl\u0131\u011fa almak g\u00fcn\u00fcn en iyi hamlesi.<\/p>\n<h2 id=\"section-3\"><span id=\"Geriye_Uyumluluk_WordPress_ve_Laravelde_Nereden_Tutariz\">Geriye Uyumluluk: WordPress ve Laravel\u2019de Nereden Tutar\u0131z?<\/span><\/h2>\n<h3><span id=\"WordPress_Eklenti_ve_Tema_Kivrimlari\">WordPress: Eklenti ve Tema K\u0131vr\u0131mlar\u0131<\/span><\/h3>\n<p>WordPress\u2019te as\u0131l dert neredeyse her zaman eklentiler ve temalar. Core \u00e7o\u011funlukla yolunu buluyor ama \u00fc\u00e7\u00fcnc\u00fc taraflar\u0131n kod al\u0131\u015fkanl\u0131klar\u0131 \u00e7ok farkl\u0131 olabiliyor. Eklentilerden biri <strong>deprecated<\/strong> olmu\u015f bir fonksiyonu kullan\u0131yor, bir di\u011feri beklenmedik t\u00fcr d\u00f6n\u00fc\u015f\u00fcm\u00fc yap\u0131yor. Benim rutinim \u015f\u00f6yle: staging ortam\u0131nda PHP 8.x ile siteyi aya\u011fa kald\u0131r\u0131yorum, WP_DEBUG ve hata loglamay\u0131 a\u00e7\u0131yorum, sonra sayfalar\u0131 turluyorum. \u0130leti\u015fim formu, sepet, kullan\u0131c\u0131 giri\u015fi ve admin paneldeki \u00f6nemli ayarlar ekranlar\u0131\u2026 Ne kadar farkl\u0131 ak\u0131\u015f\u0131 denersem, o kadar erken uyar\u0131 yakal\u0131yorum. Baz\u0131 uyar\u0131lar sadece panik an\u0131nda de\u011fil, ileride performans\u0131 etkileyebilecek ufak k\u00f6\u015fe ta\u015flar\u0131n\u0131 da g\u00f6steriyor.<\/p>\n<p>\u00d6zellikle WordPress\u2019te eski temalarda <strong>dinamik \u00f6zellik<\/strong> kullan\u0131m\u0131 gibi PHP 8.2 ile daha g\u00f6r\u00fcn\u00fcr hale gelen pratikler var. B\u00f6yle bir durumda ya temay\u0131 g\u00fcncelleyeceksin ya da k\u00fc\u00e7\u00fck bir child tema m\u00fcdahalesiyle bu alanlar\u0131 d\u00fczenleyeceksin. Bir eklentinin g\u00fcncellemesi yoksa, ge\u00e7ici olarak benzer i\u015flevi yapan alternatif bir eklentiye y\u00f6nelmek bazen en az sanc\u0131l\u0131 \u00e7\u00f6z\u00fcm oluyor. Yine de k\u00f6kten \u00e7\u00f6z\u00fcm, eklentiyi yazanlar\u0131n g\u00fcncellemesini beklemek yerine, kritik ak\u0131\u015flarda eklentiyi ge\u00e7ici olarak devre d\u0131\u015f\u0131 b\u0131rakacak bir plan B\u2019ye sahip olmak.<\/p>\n<h3><span id=\"Laravel_Composer_Paketler_ve_Kucuk_Surprizler\">Laravel: Composer, Paketler ve K\u00fc\u00e7\u00fck S\u00fcrprizler<\/span><\/h3>\n<p>Laravel taraf\u0131nda kilit oyuncu <strong>composer paketleri<\/strong>. Genellikle framework\u2019\u00fcn kendisi temiz, belgeleri a\u00e7\u0131k ve ileriye d\u00f6n\u00fck; fakat projenin ba\u011fl\u0131 oldu\u011fu \u00fc\u00e7\u00fcnc\u00fc taraf paketlerde durum de\u011fi\u015febiliyor. Staging\u2019de PHP 8.x ile \u201ccomposer update\u201d yapmak yerine, \u00f6nce \u201ccomposer why-not\u201d ile ba\u011f\u0131ml\u0131lar\u0131 ve versiyon s\u0131n\u0131rlar\u0131n\u0131 g\u00f6rmek, sonra ad\u0131m ad\u0131m g\u00fcncellemek bana daha az sorun ya\u015fatt\u0131. Eski bir helper fonksiyonunun davran\u0131\u015f\u0131 de\u011fi\u015fti\u011finde, onu merkezi bir yerde sarmalay\u0131p i\u00e7eride yeni davran\u0131\u015fa uyarlamak \u00e7o\u011fu zaman projeyi kurtaran minik bir refakt\u00f6r oluyor.<\/p>\n<p>Bir de middleware katman\u0131nda tip ipu\u00e7lar\u0131yla i\u015fleyen baz\u0131 s\u0131n\u0131flar, PHP 8.x\u2019de daha s\u0131k\u0131 t\u00fcr kontrollerine tak\u0131labiliyor. Burada hedefim, fonksiyonlardaki parametre ve d\u00f6n\u00fc\u015f tiplerini bir ak\u015fam oturup dosya dosya g\u00f6zden ge\u00e7irmek olmad\u0131. Onun yerine testleri \u00e7al\u0131\u015ft\u0131r\u0131p verdi\u011fi ilk be\u015f hataya odakland\u0131m. Genellikle bu be\u015f hata, buzda\u011f\u0131n\u0131n tepesini g\u00f6steriyor ve geri kalan\u0131 benzer paterni izliyor. Hatalar\u0131 ayn\u0131 paternle \u00e7\u00f6z\u00fcnce, bir bakm\u0131\u015fs\u0131n testler mis gibi ye\u015fillenmi\u015f.<\/p>\n<h2 id=\"section-4\"><span id=\"Test_Ortami_Loglar_ve_Kucuk_Bir_Hata_Avi_Ritueli\">Test Ortam\u0131, Loglar ve K\u00fc\u00e7\u00fck Bir Hata Av\u0131 Rit\u00fceli<\/span><\/h2>\n<h3><span id=\"Hata_Raporlamayi_Bilerek_Biraz_Gurultulu_Birakmak\">Hata Raporlamay\u0131 Bilerek Biraz G\u00fcr\u00fclt\u00fcl\u00fc B\u0131rakmak<\/span><\/h3>\n<p>Y\u00fckseltme s\u0131ras\u0131nda staging ortam\u0131nda hata raporlamay\u0131 c\u00f6mert tutmak iyi geliyor. Hatta k\u0131sa bir s\u00fcreli\u011fine <strong>deprecated<\/strong> uyar\u0131lar\u0131n\u0131 da g\u00f6r\u00fcn\u00fcr k\u0131lmak faydal\u0131. \u00dcretimde b\u00f6yle yapmak istemeyiz ama staging\u2019de amac\u0131m\u0131z g\u00fcr\u00fclt\u00fc duymak. \u201cBu fonksiyon yak\u0131nda kalkacak\u201d ya da \u201c\u015eu kullan\u0131m bi\u00e7imi art\u0131k ho\u015f de\u011fil\u201d diyen uyar\u0131lar, bug\u00fcn olmasa yar\u0131n ba\u015f\u0131m\u0131za i\u015f a\u00e7acak noktalar\u0131 f\u0131s\u0131ld\u0131yor. Senaryolar\u0131 dola\u015f\u0131rken, loglar\u0131n canl\u0131 ak\u0131\u015f\u0131n\u0131 izlemek, bir de e\u015f zamanl\u0131 olarak taray\u0131c\u0131y\u0131 developer ara\u00e7lar\u0131yla izlemek, hata av\u0131n\u0131 h\u0131zland\u0131r\u0131yor.<\/p>\n<p>Ben genelde staging\u2019de \u201ckullan\u0131c\u0131 giri\u015fi\u201d, \u201csepet\u201d ve \u201cemail tetiklemeleri\u201d gibi para edecek ak\u0131\u015flar\u0131 ilk s\u0131raya al\u0131yorum. \u00c7\u00fcnk\u00fc geri kalan sayfalar aksasa da bunlar\u0131n t\u00f6kezlemesini istemeyiz. Bu turlar\u0131 tamamlay\u0131p loglar\u0131 tarad\u0131ktan sonra ufak d\u00fczeltmeleri yap\u0131yorum, sonra ikinci bir tur. O ikinci turda genelde daha az s\u00fcrprizle kar\u015f\u0131la\u015f\u0131yorum. Bu ad\u0131mlar kullan\u0131\u015fl\u0131 oldu\u011funda \u00fcretimde daha az so\u011fuk ter oluyor.<\/p>\n<h2 id=\"section-5\"><span id=\"OPcache_Preload_Ne_Zaman_Parlar_Nasil_Kurulur\">OPcache Preload: Ne Zaman Parlar, Nas\u0131l Kurulur?<\/span><\/h2>\n<h3><span id=\"Preloadun_Kisa_Hikayesi\">Preload\u2019un K\u0131sa Hik\u00e2yesi<\/span><\/h3>\n<p>OPcache zaten tan\u0131d\u0131k. Preload ise, baz\u0131 s\u0131n\u0131flar\u0131, fonksiyonlar\u0131 ve dosyalar\u0131 PHP FPM ba\u015flarken belle\u011fe y\u00fckleyip haz\u0131r tutma fikri. Kula\u011fa harika geliyor ama her projede sihir yaratm\u0131yor. Preload\u2019un etkisi, kod taban\u0131n\u0131n nispeten stabil, yo\u011fun s\u0131n\u0131f y\u00fcklemesi yapan ve s\u0131kl\u0131kla ayn\u0131 dosyalar\u0131 kullanan projelerde daha belirgin oluyor. WordPress\u2019te y\u00fcksek eklenti \u00e7e\u015fitlili\u011fi y\u00fcz\u00fcnden faydas\u0131 bazen s\u0131n\u0131rl\u0131 kal\u0131yor. Laravel\u2019de ise \u00f6zellikle b\u00fcy\u00fck projelerde, s\u0131k kullan\u0131lan \u00e7ekirdek s\u0131n\u0131flar\u0131 preload etmek k\u00fc\u00e7\u00fck ama hissedilir bir nefes ald\u0131rabiliyor.<\/p>\n<h3><span id=\"Basit_Bir_Preload_Dosyasi_ve_Dikkat_Edilecek_Noktalar\">Basit Bir Preload Dosyas\u0131 ve Dikkat Edilecek Noktalar<\/span><\/h3>\n<p>Genelde bir <strong>preload.php<\/strong> dosyas\u0131 yaz\u0131p s\u0131k kullan\u0131lan s\u0131n\u0131flar\u0131 dahil etmek yeterli. Mesela Laravel\u2019de composer autoload s\u0131n\u0131f haritas\u0131ndan bir demet \u00e7ekirdek s\u0131n\u0131f\u0131 preload etmek mant\u0131kl\u0131. WordPress\u2019te ise \u00e7ekirde\u011fin baz\u0131 dosyalar\u0131 ve sabit kullan\u0131lan birka\u00e7 eklenti s\u0131n\u0131f\u0131 hedeflenebilir. Ama burada iki k\u00fc\u00e7\u00fck tuzak var. Biri, preload edilen dosyalar\u0131n g\u00fcncellendi\u011finde tekrar y\u00fcklenmemesi. Di\u011feri, preload edilen s\u0131n\u0131flar\u0131n eklenti g\u00fcncellemeleriyle uyumsuz hale gelmesi. Bu y\u00fczden preload\u2019u y\u0131ll\u0131k ta\u015f\u0131y\u0131c\u0131 bir blok de\u011fil, yenileyip g\u00f6zden ge\u00e7irdi\u011fin bir optimizasyon olarak d\u00fc\u015f\u00fcnmek daha g\u00fcvenli.<\/p>\n<p>Uygulamada <a href=\"https:\/\/www.php.net\/manual\/en\/opcache.preloading.php\" rel=\"nofollow noopener\" target=\"_blank\">OPcache preload dok\u00fcmantasyonundaki anlat\u0131m\u0131<\/a> takip edip php.ini\u2019de preload dosyas\u0131n\u0131 i\u015faretlemek ve FPM\u2019i yeniden ba\u015flatmak gerekiyor. \u201cvalidate_timestamps\u201d ayar\u0131, dosya de\u011fi\u015fimlerinde derhal yeniden y\u00fcklemeyi etkileyece\u011fi i\u00e7in staging\/production fark\u0131n\u0131 iyi y\u00f6netmek gerek. Ben staging\u2019de esnek, production\u2019da kontroll\u00fc olmay\u0131 seviyorum. Preload aktifken deploy s\u0131ras\u0131nda FPM\u2019i yumu\u015fak\u00e7a yeniden ba\u015flatmak da k\u00fc\u00e7\u00fck ama etkili bir rit\u00fcel.<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">; php.ini veya havuz baz\u0131nda\nopcache.enable=1\nopcache.preload=\/path\/to\/preload.php\nopcache.preload_user=www-data\n<\/code><\/pre>\n<p>Preload dosyas\u0131nda a\u015f\u0131r\u0131 b\u00fcy\u00fck bir liste yerine, s\u0131k kullan\u0131lan ve stabil par\u00e7alara odaklanmak en do\u011frusu. Laravel\u2019de vendor\/autoload.php \u00fczerinden s\u0131n\u0131f haritas\u0131n\u0131 okuyup belli bir k\u00fcmeyi preload etmek m\u00fcmk\u00fcn. WordPress\u2019te ise \u00e7ekirdek dosyalar\u0131 \u00f6nceliklendirmek, eklenti karma\u015fas\u0131ndan daha g\u00fcvenli. Aksi halde eklenti g\u00fcncellemesi yapt\u0131\u011f\u0131nda preload\u2019un seni ters k\u00f6\u015feye yat\u0131rma ihtimali olur.<\/p>\n<h2 id=\"section-6\"><span id=\"PHP-FPM_Havuz_Ayarlari_Gercekci_Secimler_ve_Sakin_Performans\">PHP-FPM Havuz Ayarlar\u0131: Ger\u00e7ek\u00e7i Se\u00e7imler ve Sakin Performans<\/span><\/h2>\n<h3><span id=\"pm_pmmax_children_ve_Hafiza_Matematigi\">pm, pm.max_children ve Haf\u0131za Matemati\u011fi<\/span><\/h3>\n<p>PHP-FPM havuz ayarlar\u0131, y\u00fckseltme i\u015finin g\u00f6r\u00fcnmeyen kahraman\u0131. G\u00fcn gelir, PHP 8.x\u2019e ge\u00e7ersin ama trafik alt\u0131nda havuz ayarlar\u0131 y\u00fcz\u00fcnden performans yerine kuyruk g\u00f6r\u00fcrs\u00fcn. Benim yakla\u015f\u0131m\u0131m basit: \u00f6nce tek bir child s\u00fcrecinin ortalama bellek kullan\u0131m\u0131n\u0131 g\u00f6rmek, sonra sunucunun toplam bellek kapasitesiyle <strong>pm.max_children<\/strong> de\u011ferini ger\u00e7ek\u00e7i belirlemek. Gereksiz y\u00fcksek de\u011fer, \u00e7o\u011fu zaman swap ve yava\u015flama demek. Gere\u011finden d\u00fc\u015f\u00fck de\u011fer ise bo\u015f yere bekleme s\u00fcrelerini art\u0131r\u0131r. \u0130nce ayar burada hayat kurtar\u0131r.<\/p>\n<p>Havuz modunu se\u00e7erken \u201cdynamic\u201d \u00e7o\u011fu zaman tatl\u0131 bir denge sunuyor. Trafik artt\u0131k\u00e7a s\u00fcre\u00e7 a\u00e7\u0131yor, d\u00fc\u015f\u00fcnce azalt\u0131yor. \u201condemand\u201d baz\u0131 durumlarda kaynak t\u00fcketimini d\u00fc\u015f\u00fcrse de ilk istekteki gecikmeyi art\u0131rabiliyor. Ben yo\u011fun trafik bekleyen sitelerde dynamic\u2019i seviyorum, d\u00fc\u015f\u00fck trafikli admin panellerde ondemand ho\u015f olabiliyor. Ama b\u00fcy\u00fcl\u00fc form\u00fcl yok; projenin durumuna g\u00f6re ufak testlerle karar vermek en g\u00fczeli. \u201cpm.max_requests\u201d de\u011ferini de \u00e7ok k\u00fc\u00e7\u00fck tutmay\u0131p, hafif bir s\u0131z\u0131nt\u0131 varsa s\u00fcreci zaman zaman s\u0131f\u0131rlayacak bir aral\u0131kta b\u0131rakmak \u00fcretimde k\u00fc\u00e7\u00fck bir sigorta gibi \u00e7al\u0131\u015f\u0131r.<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">; \/etc\/php\/8.x\/fpm\/pool.d\/www.conf \u00f6rnek yakla\u015f\u0131m\npm = dynamic\npm.max_children = 20\npm.start_servers = 4\npm.min_spare_servers = 4\npm.max_spare_servers = 8\npm.max_requests = 500\nrequest_terminate_timeout = 60s\nrequest_slowlog_timeout = 5s\nslowlog = \/var\/log\/php-fpm\/slow.log\n<\/code><\/pre>\n<p>\u201cslowlog\u201d ile yava\u015f istekleri yakalamak, y\u00fckseltme sonras\u0131 nerede t\u0131kand\u0131\u011f\u0131n\u0131 anlamak i\u00e7in harika. \u00d6zellikle Laravel\u2019de belirli bir query\u2019nin uzad\u0131\u011f\u0131n\u0131 veya WordPress\u2019te bir eklenti fonksiyonunun gere\u011finden fazla zaman ald\u0131\u011f\u0131n\u0131 netle\u015ftirir. \u201crequest_terminate_timeout\u201d ise, kontrol\u00fc tamamen kaybeden s\u00fcre\u00e7lerin kuyru\u011fu kilitlemesini \u00f6nler. Bu de\u011ferleri bir gecede m\u00fckemmel hale getirmeye \u00e7al\u0131\u015fma; iki \u00fc\u00e7 tur g\u00f6zlemle ayarlar\u0131 tatl\u0131 noktaya getirirsin.<\/p>\n<p>Trafik ve network seviyesinde denge ar\u0131yorsan, uygulamay\u0131 PHP\u2019den ba\u011f\u0131ms\u0131z taraflarda da rahatlatmak iyi gelir. Ben performans t\u00fcnemesinde, PHP katman\u0131n\u0131n \u00f6tesinde de d\u00fc\u015f\u00fcnmeyi seviyorum. Mesela trafik seviyesini d\u00fczeltmek i\u00e7in TCP ayarlar\u0131nda ufak dokunu\u015flar gerekti\u011finde, <a href=\"https:\/\/www.dchost.com\/blog\/yuksek-trafikli-wordpress-laravelde-linux-tcp-tuning-sysctl-ayarlari-udp-bufferlari-ve-syn-flooda-karsi-sakin-kalmak\/\">y\u00fcksek trafikli WordPress\/Laravel i\u00e7in Linux TCP tuning notlar\u0131m\u0131<\/a> toparlad\u0131\u011f\u0131m rehberdeki yakla\u015f\u0131m \u00e7ok i\u015f g\u00f6r\u00fcyor. Y\u00fckseltme sonras\u0131 performans alg\u0131s\u0131 sadece PHP de\u011fil; a\u011f, disk, veritaban\u0131 ve cache birlikte ak\u0131nca huzur geliyor.<\/p>\n<h2 id=\"section-7\"><span id=\"JIT_memory_limit_Uzantilar_ve_Ufak_Ayarlar\">JIT, memory_limit, Uzant\u0131lar ve Ufak Ayarlar<\/span><\/h2>\n<p>JIT konusu hep merak edilir. PHP 8\u2019de JIT\u2019in web isteklerinde mucize yaratmad\u0131\u011f\u0131n\u0131 g\u00f6rd\u00fcm. CPU a\u011f\u0131rl\u0131kl\u0131, uzun soluklu i\u015flerde tad\u0131 \u00e7\u0131k\u0131yor; web isteklerinin k\u0131sa \u00f6m\u00fcrl\u00fc d\u00fcnyas\u0131nda faydas\u0131 s\u0131n\u0131rl\u0131 kalabiliyor. O y\u00fczden JIT\u2019i a\u00e7ay\u0131m m\u0131 sorusuna cevab\u0131m genelde \u00f6nce \u00f6l\u00e7, sonra karar. E\u011fer Laravel\u2019de yo\u011fun hesaplama yapan bir job kuyru\u011fun varsa, orada denemekte fayda var. Ama klasik WordPress sayfa render ak\u0131\u015f\u0131nda beklentin fazla olmas\u0131n.<\/p>\n<p><strong>memory_limit<\/strong> taraf\u0131nda ise proje ger\u00e7eklerine g\u00f6re konu\u015fmak \u015fart. WordPress\u2019te medyas\u0131 bol ve eklentisi muhtelif bir sitede biraz geni\u015f bir tavan iyi geliyor. Laravel\u2019de b\u00fcy\u00fck sorgu sonu\u00e7lar\u0131n\u0131 i\u015fleyen servislerde de ba\u015ftan k\u0131s\u0131tlamak yerine izleyerek ayarlamak daha do\u011fru. Hata loglar\u0131nda bellek s\u0131n\u0131r\u0131 uyar\u0131lar\u0131 g\u00f6r\u00fcyorsan ilk refleks s\u0131n\u0131r\u0131 y\u00fckseltmek olmas\u0131n; \u00f6nce hangi i\u015flemin yedi\u011fini bul, sonra dengeli bir art\u0131\u015f yap.<\/p>\n<p>Uzant\u0131lar taraf\u0131nda intl, gd, mbstring gibi olmazsa olmazlar var. Y\u00fckseltmeden \u00f6nce hangi uzant\u0131lara ger\u00e7ekten ihtiya\u00e7 oldu\u011funu bir not almak iyi. Bir kere de <a href=\"https:\/\/www.php.net\/manual\/en\/migration80.php\" rel=\"nofollow noopener\" target=\"_blank\">PHP 8 ge\u00e7i\u015f notlar\u0131n\u0131<\/a> g\u00f6zden ge\u00e7irip, yayg\u0131n davran\u0131\u015f de\u011fi\u015fimlerine a\u015fina olmak da g\u00fcven veriyor. Y\u00fckseltme g\u00fcn\u00fcnde s\u00fcrpriz g\u00f6rmek yerine, ufak bir ak\u015fam okumas\u0131 \u00e7o\u011fu noktay\u0131 yumu\u015fat\u0131yor.<\/p>\n<h2 id=\"section-8\"><span id=\"WordPress_ve_Laravelde_Kod_Tarafinda_Kucuk_Dokunuslar\">WordPress ve Laravel\u2019de Kod Taraf\u0131nda K\u00fc\u00e7\u00fck Dokunu\u015flar<\/span><\/h2>\n<h3><span id=\"Tur_Ipuclari_ve_Hata_Mesajlariyla_Barismak\">T\u00fcr \u0130pu\u00e7lar\u0131 ve Hata Mesajlar\u0131yla Bar\u0131\u015fmak<\/span><\/h3>\n<p>PHP 8.x ile birlikte t\u00fcr ipu\u00e7lar\u0131 daha g\u00f6r\u00fcn\u00fcr hale geldi. Benim i\u015fimi en \u00e7ok kolayla\u015ft\u0131ran \u015fey, fonksiyonlar\u0131n bekledi\u011fi veriyi daha net ifade etmek oldu. \u201cnull gelebilir mi\u201d, \u201cint mi bekliyor\u201d, \u201cstring mi d\u00f6n\u00fcyor\u201d, bunlar\u0131 yazd\u0131k\u00e7a staging\u2019de daha az s\u00fcrpriz yakalad\u0131m. WordPress\u2019te bu i\u015fi yava\u015f yava\u015f yapmak gerek, kimi temalar ve eklentiler \u00e7ok esnek yaz\u0131ld\u0131\u011f\u0131 i\u00e7in s\u0131k\u0131 hale getirmek zaman alabiliyor. Laravel\u2019de ise framework\u2019\u00fcn yap\u0131s\u0131 sayesinde bu esneklik biraz daha kontroll\u00fc.<\/p>\n<p>Bir de PHP 8 ile \u201cmatch\u201d gibi dil g\u00fczellikleri var. Kodu daha okunur k\u0131l\u0131yor ama y\u00fckseltme g\u00fcn\u00fcnde as\u0131l i\u015f de\u011fil. Ben y\u00fckseltme s\u0131ras\u0131nda dil g\u00fczelliklerini vitrin olarak de\u011fil, refakt\u00f6r\u00fcn yan \u00fcr\u00fcn\u00fc olarak kullan\u0131yorum. \u00d6nce uyumluluk, sonra temizlik. O s\u0131rada loglarda g\u00f6rd\u00fc\u011f\u00fcn <strong>deprecated<\/strong> uyar\u0131lar\u0131n\u0131 k\u00fc\u00e7\u00fck yama dosyalar\u0131yla kapat\u0131p, sonraki sprintte daha derli toplu bir temizli\u011fe giri\u015fmek, ritmi de ekibi de yormuyor.<\/p>\n<h2 id=\"section-9\"><span id=\"Dagitim_Stratejisi_Sicak_Sicak_Gecis_Sakin_Kullanici_Deneyimi\">Da\u011f\u0131t\u0131m Stratejisi: S\u0131cak S\u0131cak Ge\u00e7i\u015f, Sakin Kullan\u0131c\u0131 Deneyimi<\/span><\/h2>\n<h3><span id=\"Yumusak_Gecisin_Kucuk_Sirlari\">Yumu\u015fak Ge\u00e7i\u015fin K\u00fc\u00e7\u00fck S\u0131rlar\u0131<\/span><\/h3>\n<p>Da\u011f\u0131t\u0131m s\u0131ras\u0131nda as\u0131l mesele, kullan\u0131c\u0131lar\u0131n ge\u00e7i\u015fi hissetmemesi. Ben genelde, PHP-FPM ve web sunucu katman\u0131nda k\u0131sa bir bak\u0131m penceresi yerine, kademeli bir ge\u00e7i\u015f seviyorum. Bir s\u00fcrede iki havuz paralel ko\u015fup, trafi\u011fin k\u00fc\u00e7\u00fck bir y\u00fczdesini yeni PHP 8.x havuzuna y\u00f6nlendirmek, sorun \u00e7\u0131ksa bile h\u0131zl\u0131 geri d\u00f6n\u00fc\u015fe izin veriyor. B\u00f6yle bir yakla\u015f\u0131m\u0131 proxy veya load balancer katman\u0131nda kurgulamak m\u00fcmk\u00fcn. \u0130nsanlar sayfay\u0131 t\u0131klarken ge\u00e7i\u015fi fark etmez; loglar ise arkada sessizce konu\u015fur.<\/p>\n<p>Cache katman\u0131nda da k\u00fc\u00e7\u00fck oyunlar var. E\u011fer CDN kullan\u0131yorsan, statik dosyalar\u0131 erken tazelemek, sayfa cache\u2019ini ise kademeli temizlemek daha dengeli hissettiriyor. Baz\u0131 projelerde <a href=\"https:\/\/www.dchost.com\/blog\/kesinti-caninizi-sikmasin-stale-while-revalidate-ve-stale-if-error-nasil-hayat-kurtarir\/\">stale-while-revalidate yakla\u015f\u0131m\u0131<\/a> ge\u00e7i\u015fi maskelemekte \u00e7ok i\u015fe yar\u0131yor. Bir talep geldi\u011finde arka planda yeni sayfay\u0131 \u00fcretirken, kullan\u0131c\u0131ya eski ama ge\u00e7erli bir sayfa sunmak \u00e7o\u011fu zaman g\u00f6ze batm\u0131yor. Y\u00fckseltme g\u00fcn\u00fc de b\u00f6ylece normal bir g\u00fcn gibi ak\u0131yor.<\/p>\n<h2 id=\"section-10\"><span id=\"Guvenlik_Oturumlar_ve_Cerezlerin_Kucuk_Incelikleri\">G\u00fcvenlik, Oturumlar ve \u00c7erezlerin K\u00fc\u00e7\u00fck \u0130ncelikleri<\/span><\/h2>\n<p>Y\u00fckseltme sadece performans ve uyumluluk de\u011fil, g\u00fcvenlik taraf\u0131n\u0131 da elden ge\u00e7irme f\u0131rsat\u0131. Oturum \u00e7erezlerinin ayarlar\u0131n\u0131, \u00f6zellikle <strong>SameSite<\/strong> ve <strong>Secure<\/strong> bayraklar\u0131n\u0131 kontrol etmek iyi bir al\u0131\u015fkanl\u0131k. Baz\u0131 giri\u015f ak\u0131\u015flar\u0131nda cross-site istekleri s\u00f6z konusuysa, \u00e7erez davran\u0131\u015f\u0131n\u0131 netle\u015ftirmek gerekebiliyor. Bu konuda daha \u00f6nce payla\u015ft\u0131\u011f\u0131m <a href=\"https:\/\/www.dchost.com\/blog\/samesitelax-mi-strict-mi-secure-ve-httponly-ile-nginx-apachede-cerezleri-tertemiz-nasil-kurarsin\/\">SameSite ve HttpOnly ile \u00e7erezleri temiz kurma notlar\u0131na<\/a> g\u00f6z atmak i\u015fini kolayla\u015ft\u0131r\u0131r. K\u00fc\u00e7\u00fck bir bayrak, b\u00fcy\u00fck bir rahatl\u0131k.<\/p>\n<p>SSL ve sertifika yenileme ak\u0131\u015flar\u0131 da bu vesileyle g\u00f6zden ge\u00e7irilmeli. Otomatik yenilemelere g\u00fcveniyorsan, cron ve permission taraf\u0131nda her \u015feyin yolunda oldu\u011fundan emin ol. E\u011fer ACME otomasyonun varsa ve yo\u011fun alan ad\u0131n bulunuyorsa, beklenmedik oran limitlerine tak\u0131lmamak i\u00e7in <a href=\"https:\/\/www.dchost.com\/blog\/acme-otomasyonunda-yedekli-ca-nasil-kurulur-acme-sh-ile-lets-encrypt-%e2%86%92-zerossl-fallback-oran-limitlerine-karsi-guvenli-olcekleme\/\">yedekli CA yakla\u015f\u0131m\u0131<\/a> hem siniri al\u0131yor hem de kesintiyi \u00f6nl\u00fcyor. G\u00fcvenlik taraf\u0131nda bir de bariz olan\u0131 s\u00f6yleyeyim: paket g\u00fcncellemeleri sadece uyumluluk de\u011fil, a\u00e7\u0131k kap\u0131lar\u0131 da kapatma f\u0131rsat\u0131. \u00dcretim \u00f6ncesi k\u0131sa bir g\u00fcvenlik turu, geceleri daha rahat uyutuyor.<\/p>\n<p>E\u011fer <a href=\"https:\/\/www.dchost.com\/tr\/vps\">VPS<\/a> \u00fczerinde \u00e7al\u0131\u015f\u0131yorsan, y\u00fckseltme g\u00fcn\u00fc sudo ve SSH eri\u015fimlerinde de pratik birka\u00e7 kontrol yapmak g\u00fczel. Yetkileri daraltmak, brute force\u2019a kar\u015f\u0131 bariyerleri netle\u015ftirmek ve loglar\u0131 merkezi toplamak gibi ad\u0131mlar her zaman i\u015fe yarar. Bu noktada merak edersen, <a href=\"https:\/\/www.dchost.com\/blog\/vps-sunucu-guvenligi-nasil-saglanir-kapiyi-acik-birakmadan-yasamanin-sirri\/\">VPS sunucu g\u00fcvenli\u011fi notlar\u0131m\u0131<\/a> toparlad\u0131\u011f\u0131m yaz\u0131 bir t\u00fcr k\u0131sa yol rehberi gibi.<\/p>\n<h2 id=\"section-11\"><span id=\"Kucuk_Pratikler_WordPress_ve_Laravelde_Elinin_Altinda_Dursun\">K\u00fc\u00e7\u00fck Pratikler: WordPress ve Laravel\u2019de Elinin Alt\u0131nda Dursun<\/span><\/h2>\n<h3><span id=\"WordPress_Icin\">WordPress \u0130\u00e7in<\/span><\/h3>\n<p>WordPress\u2019te y\u00fckseltme \u00f6ncesi mutlaka eklentileri g\u00f6zden ge\u00e7ir. Aktif olmayan ama y\u00fcklenmi\u015f eklentiler bile bazen y\u00fckleme zaman\u0131 s\u00fcrprizi \u00e7\u0131karabiliyor. Teman\u0131n child yap\u0131s\u0131n\u0131 korumak, \u00f6zelle\u015ftirmeleri orada tutmak ileride g\u00fcncellemeleri kolayla\u015ft\u0131r\u0131r. Cache eklentisini staging\u2019de farkl\u0131 profillerle denemek, PHP 8.x ile birlikte beklenmedik s\u0131k\u0131\u015ft\u0131rma ya da minify davran\u0131\u015flar\u0131n\u0131 yakalaman\u0131 sa\u011flar. Ve elbette, medya i\u015fleme ak\u0131\u015flar\u0131n\u0131, \u00f6zellikle b\u00fcy\u00fck g\u00f6rsellerde d\u00f6n\u00fc\u015ft\u00fcrme yapan eklentileri, yeni s\u00fcr\u00fcmle birlikte incelemek iyi gelir.<\/p>\n<p>PHP 8.x ile birlikte baz\u0131 fonksiyonlar\u0131n uyar\u0131 e\u015fi\u011fi de\u011fi\u015fti. \u00d6rne\u011fin null \u00fcst\u00fcnde dizi i\u015flemi yapma gibi masum g\u00f6r\u00fcnen al\u0131\u015fkanl\u0131klar, art\u0131k daha g\u00f6r\u00fcn\u00fcr uyar\u0131lar \u00fcretebiliyor. B\u00f6yle davran\u0131\u015flara denk geldi\u011finde panik yapmak yerine, k\u00fc\u00e7\u00fck bir null kontrol\u00fc ya da varsay\u0131lan de\u011fer atamas\u0131yla konuyu tatl\u0131ya ba\u011flamak m\u00fcmk\u00fcn. Kilit sayfalarda bu basit d\u00fczenlemeler, beklenmedik kullan\u0131c\u0131 hatalar\u0131n\u0131 da yumu\u015fat\u0131yor.<\/p>\n<h3><span id=\"Laravel_Icin\">Laravel \u0130\u00e7in<\/span><\/h3>\n<p>Laravel\u2019de \u00f6ncelikle \u201cconfig:cache\u201d ve \u201croute:cache\u201d gibi performans dostu komutlarla \u00fcretim \u00f6ncesi d\u00fczeni oturtmak iyi geliyor. Y\u00fckseltme s\u0131ras\u0131nda config ve route de\u011fi\u015fimleri varsa, deploy sonras\u0131nda bu \u00f6nbellekleri tazelemek gerekti\u011fini unutma. Migration ve seeder ad\u0131mlar\u0131n\u0131 net bir s\u0131raya koymak, olu\u015fabilecek tip uyu\u015fmazl\u0131klar\u0131n\u0131 erkenden g\u00f6steriyor. Ve e\u011fer queue \u00e7al\u0131\u015fanlar\u0131n varsa, PHP versiyon de\u011fi\u015fimi sonras\u0131 worker\u2019lar\u0131 mutlaka yeniden ba\u015flatmak, preload ve OPcache de\u011fi\u015fikliklerinin etkili olmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>Bir de veritaban\u0131 sorgular\u0131n\u0131 izlemek var. Y\u00fckseltme sonras\u0131 ayn\u0131 kod farkl\u0131 bir yoldan \u00e7al\u0131\u015fabilir; \u00f6zellikle ili\u015fkilerde eager loading mi lazy loading mi tercih edildi\u011fi performans\u0131 etkileyebilir. Teker teker sayfa bazl\u0131 izleme yerine, daha \u00f6nce sorun \u00e7\u0131karm\u0131\u015f endpoint\u2019leri k\u0131sa bir turdan ge\u00e7irmek, zaman\u0131n en iyi kullan\u0131m\u0131. Loglar\u0131 filtreleyip en yava\u015f ilk be\u015f iste\u011fe bakmak bile yol g\u00f6sterici oluyor.<\/p>\n<h2 id=\"section-12\"><span id=\"Gozden_Kacan_Ama_Etkili_Healthcheck_Status_ve_Minik_Izleme_Hileleri\">G\u00f6zden Ka\u00e7an Ama Etkili: Healthcheck, Status ve Minik \u0130zleme Hileleri<\/span><\/h2>\n<p>Havuzlar ve s\u00fcre\u00e7ler d\u00fcnyas\u0131nda, k\u00fc\u00e7\u00fck bir <strong>status<\/strong> sayfas\u0131 \u00e7ok yard\u0131mc\u0131. PHP-FPM\u2019de status ve ping yollar\u0131n\u0131 a\u00e7\u0131p, load balancer\u2019\u0131n bu u\u00e7lar\u0131 izlemesini sa\u011flamak, sorun b\u00fcy\u00fcmeden i\u015faret veriyor. Yine Nginx veya Apache katman\u0131nda, 502 ve 504 anlar\u0131nda kullan\u0131c\u0131ya daha yumu\u015fak bir sayfa g\u00f6stermek, ge\u00e7i\u015f g\u00fcnlerinde destek ekibine gelen mesajlar\u0131 azalt\u0131yor. \u0130zleme taraf\u0131nda ise basit bir uyar\u0131 ak\u0131\u015f\u0131 bile yeterli: hata oran\u0131 belirli bir e\u015fi\u011fi a\u015farsa, ak\u015fam \u00fcst\u00fc telefonuna bir ping gelsin. G\u00fcn\u00fcn en g\u00fczel hissi, sorunu ilk senin fark etmen.<\/p>\n<p>Yay\u0131n ak\u0131\u015f\u0131 s\u0131ras\u0131nda CDN ve cache katmanlar\u0131n\u0131 unutmamak gerek. E\u011fer sayfa cache\u2019ini tamamen bo\u015faltmak yerine kademeli yeniliyorsan, kullan\u0131c\u0131lar\u0131n farkl\u0131 s\u00fcr\u00fcmler g\u00f6rmesi can\u0131n\u0131 s\u0131kmas\u0131n. Bu do\u011fal. \u00d6nemli olan, oturum a\u00e7m\u0131\u015f kullan\u0131c\u0131lar\u0131n do\u011fru s\u00fcr\u00fcm\u00fc g\u00f6rmesi. Staging\u2019de buna \u00f6zellikle bakmay\u0131 seviyorum. Oturum a\u00e7m\u0131\u015f ak\u0131\u015flar, cache\u2019ten en az etkileneni oldu\u011fu i\u00e7in ger\u00e7ek davran\u0131\u015f\u0131 daha net g\u00f6steriyor.<\/p>\n<h2 id=\"section-13\"><span id=\"Yedek_Geri_Donus_ve_Kucuk_Bir_Cesaret_Dozu\">Yedek, Geri D\u00f6n\u00fc\u015f ve K\u00fc\u00e7\u00fck Bir Cesaret Dozu<\/span><\/h2>\n<p>Bir y\u00fckseltmede en b\u00fcy\u00fck cesaret kayna\u011f\u0131, iyi bir geri d\u00f6n\u00fc\u015f plan\u0131. Veritaban\u0131 yede\u011fin, yap\u0131land\u0131rma dosyalar\u0131n ve versiyon kontroll\u00fc kodunla, \u201colmad\u0131 eski s\u00fcr\u00fcme d\u00f6nerim\u201d demek rahatlat\u0131yor. Bu geri d\u00f6n\u00fc\u015f plan\u0131n\u0131 ger\u00e7ekten denemek de iyi fikir. Staging\u2019de minik bir tatbikat yap; yeni s\u00fcr\u00fcme ge\u00e7, sonra geri d\u00f6n. S\u00fcreni tut, hangi ad\u0131m\u0131 unuttu\u011funu not al. \u00dcretimde her \u015fey yolunda gider ama bilirsin, as\u0131l konfor o plan\u0131 cebinde hissetmekten geliyor.<\/p>\n<p>Uygulaman\u0131n baz\u0131 b\u00f6l\u00fcmleri i\u00e7in, y\u00fck alt\u0131nda davran\u0131\u015f\u0131n beklenmedikle\u015fmesi normal. B\u00f6yle bir durumda loglar ve slowlog zaten ba\u011f\u0131racakt\u0131r. K\u00fc\u00e7\u00fck k\u00fc\u00e7\u00fck d\u00fczeltmelerle \u00f6nce o ate\u015fi s\u00f6nd\u00fcrmek, sonra daha sistematik bir optimizasyon turuna \u00e7\u0131kmak, benim i\u00e7in en az stresli yol oldu. Her zaman kusursuz bir da\u011f\u0131t\u0131m m\u00fcmk\u00fcn de\u011fil; \u00f6nemli olan kullan\u0131c\u0131lar\u0131n bu dalgalanmay\u0131 hissetmemesi.<\/p>\n<h2 id=\"section-14\"><span id=\"Isin_Son_Dokunusu_Kucuk_Bir_Guvenlik_Taramasi_ve_Izleme\">\u0130\u015fin Son Dokunu\u015fu: K\u00fc\u00e7\u00fck Bir G\u00fcvenlik Taramas\u0131 ve \u0130zleme<\/span><\/h2>\n<p>Y\u00fckseltmeden sonra bir tur daha g\u00fcvenlik ve izleme g\u00f6zden ge\u00e7irmesi yapmak iyi hissettirir. Web uygulamas\u0131 g\u00fcvenlik ba\u015fl\u0131klar\u0131n\u0131, HSTS ve \u00e7erez bayraklar\u0131n\u0131 ve gerekti\u011finde mTLS veya kayna\u011f\u0131 do\u011frulayan katmanlar\u0131 d\u00fc\u015f\u00fcnmek, genel g\u00fcveni art\u0131r\u0131r. D\u0131\u015f d\u00fcnyadan gelen trafikle origin aras\u0131nda ak\u0131ll\u0131 bir katman kurduysan, bu ge\u00e7i\u015flerde \u00e7ok daha huzurlu oluyorsun. \u0130lgini \u00e7ekerse, <a href=\"https:\/\/www.dchost.com\/blog\/origini-korumak-cloudflare-authenticated-origin-pulls-ve-mtls-ile-gercek-kaynak-dogrulamasi\/\">Authenticated Origin Pulls ve mTLS ile ger\u00e7ek kaynak do\u011frulamas\u0131<\/a> \u00fczerine notlar\u0131m\u0131 i\u00e7eren yaz\u0131, bu ba\u015fl\u0131\u011fa pratik bir bak\u0131\u015f sunuyor.<\/p>\n<p>PHP 8.x sonras\u0131 ilk hafta, log seviyesini bir t\u0131k daha a\u00e7\u0131k tutmak ve uyar\u0131lar\u0131 toplayan basit bir dashboard kurmak, potansiyel p\u00fcr\u00fczleri erkenden yakal\u0131yor. Bu dashboard\u2019u projede sorumlulu\u011fu olan herkesin bir g\u00f6z ataca\u011f\u0131 kadar g\u00f6r\u00fcn\u00fcr tutmak, k\u00fc\u00e7\u00fck sorunlar\u0131 daha da k\u00fc\u00e7\u00fclt\u00fcyor. \u0130zleme \u00f6\u011frenilmi\u015f bir refleks; bir kere tatl\u0131 dengesini bulunca, y\u00fckseltmeler macera olmaktan \u00e7\u0131k\u0131p rutine d\u00f6n\u00fc\u015f\u00fcyor.<\/p>\n<h2 id=\"section-15\"><span id=\"Kapanis_Yukseltmeyi_Bir_Defalik_Is_Degil_Kultur_Olarak_Dusunmek\">Kapan\u0131\u015f: Y\u00fckseltmeyi Bir Defal\u0131k \u0130\u015f De\u011fil, K\u00fclt\u00fcr Olarak D\u00fc\u015f\u00fcnmek<\/span><\/h2>\n<p>Bu kadar detay\u0131 konu\u015ftuktan sonra en sevdi\u011fim k\u0131sma geldik: i\u00e7 huzur. PHP 8.x\u2019e ge\u00e7i\u015f bir g\u00fcnde bitebilir ama as\u0131l \u00f6nemli olan, bunu s\u00fcrd\u00fcr\u00fclebilir bir ritme oturtmak. Staging\u2019de deneyip, loglara kulak verip, OPcache preload\u2019u dengeli kullan\u0131p, FPM havuz ayarlar\u0131n\u0131 ger\u00e7ek\u00e7i se\u00e7ti\u011finde, \u00fcretimde f\u0131rt\u0131na beklemiyorsun. WordPress\u2019te eklentilerle bar\u0131\u015f\u0131p, Laravel\u2019de paketleri d\u00fczenli g\u00fcncel tutunca, s\u00fcrprizler azal\u0131yor. Kodunla sohbet etmeyi, k\u00fc\u00e7\u00fck uyar\u0131lara kulak vermeyi \u00f6\u011freniyorsun.<\/p>\n<p>Son bir tavsiye: b\u00fcy\u00fck at\u0131l\u0131mlar\u0131 k\u00fc\u00e7\u00fck ad\u0131mlara b\u00f6l. Bir sprintte uyumluluk, di\u011ferinde performans, sonra g\u00fcvenlik turu. Bu sayede ekip de y\u0131pranm\u0131yor; her ad\u0131mda g\u00f6r\u00fcn\u00fcr bir kazan\u0131m oluyor. Umar\u0131m bu rehber, eline kahveni al\u0131p \u201cHadi \u015fu PHP 8.x i\u015fini tatl\u0131 tatl\u0131 halledelim\u201d dedi\u011fin anda yan\u0131nda duran bir dost gibi hissettirmi\u015ftir. Tak\u0131ld\u0131\u011f\u0131n bir k\u00f6\u015fe olursa, not al, k\u00fc\u00e7\u00fck bir staging turu yap, loglara bak ve sakin kal. Bir dahaki yaz\u0131da ba\u015fka bir y\u00fckseltme maceras\u0131nda g\u00f6r\u00fc\u015f\u00fcr\u00fcz.<\/p>\n<h2 id=\"section-16\"><span id=\"Kaynaklar_ve_Notlar_Bir_Goz_Atmalik\">Kaynaklar ve Notlar: Bir G\u00f6z Atmal\u0131k<\/span><\/h2>\n<p>Teknik ayr\u0131nt\u0131lar\u0131n i\u00e7ine \u00e7ok bo\u011fulmadan ilerledik ama baz\u0131 ba\u015fl\u0131klarda resmi kaynaklara g\u00f6z atmak iyi gelir. OPcache preload i\u00e7in <a href=\"https:\/\/www.php.net\/manual\/en\/opcache.preloading.php\" rel=\"nofollow noopener\" target=\"_blank\">resmi dok\u00fcman<\/a> sade ve nokta at\u0131\u015f\u0131. PHP 8 ge\u00e7i\u015f notlar\u0131nda ise <a href=\"https:\/\/www.php.net\/manual\/en\/migration80.php\" rel=\"nofollow noopener\" target=\"_blank\">genel davran\u0131\u015f de\u011fi\u015fimleri<\/a> gayet a\u00e7\u0131klay\u0131c\u0131. U\u011fra\u015f\u0131rken akl\u0131na geldik\u00e7e k\u0131sa k\u0131sa bakmak, \u00f6zellikle ilk hafta \u00e7ok i\u015fe yar\u0131yor. Onun d\u0131\u015f\u0131nda, bu yaz\u0131 boyunca bahsetti\u011fim kendi notlar\u0131m ve ipu\u00e7lar\u0131, pratikte her g\u00fcn i\u015fe yarayan k\u00fc\u00e7\u00fck ta\u015flar gibi; birikince yolu d\u00fczle\u015ftiriyor.<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>\u0130&ccedil;indekiler1 Ofiste Bir Y\u00fckseltme G\u00fcn\u00fc: \u015e\u00f6yle Ba\u015flad\u0131&#8230;2 Neden \u015eimdi ve Nas\u0131l Ba\u015flamal\u0131? K\u00fc\u00e7\u00fck Bir Plan, Koca Bir Rahatl\u0131k3 Geriye Uyumluluk: WordPress ve Laravel\u2019de Nereden Tutar\u0131z?3.1 WordPress: Eklenti ve Tema K\u0131vr\u0131mlar\u01313.2 Laravel: Composer, Paketler ve K\u00fc\u00e7\u00fck S\u00fcrprizler4 Test Ortam\u0131, Loglar ve K\u00fc\u00e7\u00fck Bir Hata Av\u0131 Rit\u00fceli4.1 Hata Raporlamay\u0131 Bilerek Biraz G\u00fcr\u00fclt\u00fcl\u00fc B\u0131rakmak5 OPcache Preload: Ne Zaman [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1885,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26],"tags":[],"class_list":["post-1884","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-teknoloji"],"_links":{"self":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts\/1884","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/comments?post=1884"}],"version-history":[{"count":0,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts\/1884\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/media\/1885"}],"wp:attachment":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/media?parent=1884"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/categories?post=1884"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/tags?post=1884"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}