{"id":1456,"date":"2025-11-06T23:10:40","date_gmt":"2025-11-06T20:10:40","guid":{"rendered":"https:\/\/www.dchost.com\/blog\/laravel-uygulamalarini-vpste-nasil-yayinlarim-nginx-php%e2%80%91fpm-horizon-ve-sifir-kesinti-dagitimin-sicacik-yol-haritasi\/"},"modified":"2025-11-06T23:10:40","modified_gmt":"2025-11-06T20:10:40","slug":"laravel-uygulamalarini-vpste-nasil-yayinlarim-nginx-php%e2%80%91fpm-horizon-ve-sifir-kesinti-dagitimin-sicacik-yol-haritasi","status":"publish","type":"post","link":"https:\/\/www.dchost.com\/blog\/laravel-uygulamalarini-vpste-nasil-yayinlarim-nginx-php%e2%80%91fpm-horizon-ve-sifir-kesinti-dagitimin-sicacik-yol-haritasi\/","title":{"rendered":"Laravel Uygulamalar\u0131n\u0131 VPS\u2019te Nas\u0131l Yay\u0131nlar\u0131m? Nginx, PHP\u2011FPM, Horizon ve S\u0131f\u0131r Kesinti Da\u011f\u0131t\u0131m\u0131n S\u0131cac\u0131k Yol Haritas\u0131"},"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_Baslayan_Kucuk_Bir_Deploy_Kaygisi_8220Ya_Site_1_Dakika_Bile_Duserse8221\"><span class=\"toc_number toc_depth_1\">1<\/span> Ofiste Ba\u015flayan K\u00fc\u00e7\u00fck Bir Deploy Kayg\u0131s\u0131: &#8220;Ya Site 1 Dakika Bile D\u00fc\u015ferse?&#8221;<\/a><\/li><li><a href=\"#VPSin_Uzerine_Insa_Alan_Adi_Nginx_ve_Temiz_Bir_Yapi_Neden_Isin_Yarisidir\"><span class=\"toc_number toc_depth_1\">2<\/span> VPS\u2019in \u00dczerine \u0130n\u015fa: Alan Ad\u0131, Nginx ve Temiz Bir Yap\u0131 Neden \u0130\u015fin Yar\u0131s\u0131d\u0131r?<\/a><ul><li><a href=\"#Alan_Adi_DNS_ve_Ilk_Adimlar\"><span class=\"toc_number toc_depth_2\">2.1<\/span> Alan Ad\u0131, DNS ve \u0130lk Ad\u0131mlar<\/a><\/li><li><a href=\"#Nginxi_Laravel_ile_Arkadas_Etmek\"><span class=\"toc_number toc_depth_2\">2.2<\/span> Nginx\u2019i Laravel ile Arkada\u015f Etmek<\/a><\/li><li><a href=\"#SSLHTTPS_ve_Zarif_Yeniden_Yuklemeler\"><span class=\"toc_number toc_depth_2\">2.3<\/span> SSL\/HTTPS ve Zarif Yeniden Y\u00fcklemeler<\/a><\/li><\/ul><\/li><li><a href=\"#PHPFPMi_Nazikce_Ayarlamak_Sessiz_Kahraman\"><span class=\"toc_number toc_depth_1\">3<\/span> PHP\u2011FPM\u2019i Nazik\u00e7e Ayarlamak: Sessiz Kahraman<\/a><ul><li><a href=\"#Neden_PHPFPM_ve_Ne_Zaman_Takilir\"><span class=\"toc_number toc_depth_2\">3.1<\/span> Neden PHP\u2011FPM ve Ne Zaman Tak\u0131l\u0131r?<\/a><\/li><li><a href=\"#OPcache_ve_Laravelin_Onbellekleri\"><span class=\"toc_number toc_depth_2\">3.2<\/span> OPcache ve Laravel\u2019in \u00d6nbellekleri<\/a><\/li><\/ul><\/li><li><a href=\"#Queue_ve_Horizon_Kulis_Arkasini_Sakin_Tutmanin_Inceligi\"><span class=\"toc_number toc_depth_1\">4<\/span> Queue ve Horizon: Kulis Arkas\u0131n\u0131 Sakin Tutman\u0131n \u0130nceli\u011fi<\/a><ul><li><a href=\"#Arka_Plan_Isleri_Neden_Hayat_Kurtarir\"><span class=\"toc_number toc_depth_2\">4.1<\/span> Arka Plan \u0130\u015fleri Neden Hayat Kurtar\u0131r?<\/a><\/li><li><a href=\"#Horizoni_Dagitimin_Bir_Parcasi_Yapmak\"><span class=\"toc_number toc_depth_2\">4.2<\/span> Horizon\u2019\u0131 Da\u011f\u0131t\u0131m\u0131n Bir Par\u00e7as\u0131 Yapmak<\/a><\/li><\/ul><\/li><li><a href=\"#Sifir_Kesinti_Dagitim_Kapanis_Ekrani_Gostermeden_Kod_Guncellemek\"><span class=\"toc_number toc_depth_1\">5<\/span> S\u0131f\u0131r Kesinti Da\u011f\u0131t\u0131m: Kapan\u0131\u015f Ekran\u0131 G\u00f6stermeden Kod G\u00fcncellemek<\/a><ul><li><a href=\"#Mesela_Soyle_Dusunun_Paralel_Bir_Sahne_Tek_Bir_Perde\"><span class=\"toc_number toc_depth_2\">5.1<\/span> Mesela \u015e\u00f6yle D\u00fc\u015f\u00fcn\u00fcn: Paralel Bir Sahne, Tek Bir Perde<\/a><\/li><li><a href=\"#Dagitimin_Nazik_Adimlari\"><span class=\"toc_number toc_depth_2\">5.2<\/span> Da\u011f\u0131t\u0131m\u0131n Nazik Ad\u0131mlar\u0131<\/a><\/li><li><a href=\"#Bakim_Modu_mu_Sifir_Kesinti_mi\"><span class=\"toc_number toc_depth_2\">5.3<\/span> Bak\u0131m Modu mu, S\u0131f\u0131r Kesinti mi?<\/a><\/li><\/ul><\/li><li><a href=\"#Guvenlik_Izleme_ve_Yedek_Kirilgan_Anlar_Onceden_Cozulurse_Cok_Rahat\"><span class=\"toc_number toc_depth_1\">6<\/span> G\u00fcvenlik, \u0130zleme ve Yedek: K\u0131r\u0131lgan Anlar \u00d6nceden \u00c7\u00f6z\u00fcl\u00fcrse \u00c7ok Rahat<\/a><ul><li><a href=\"#HTTPS_ve_Saldiri_Onlemleri\"><span class=\"toc_number toc_depth_2\">6.1<\/span> HTTPS ve Sald\u0131r\u0131 \u00d6nlemleri<\/a><\/li><li><a href=\"#Izlemezsen_Goremezsin_Loglar_Paneller_ve_Sessiz_Alarmlar\"><span class=\"toc_number toc_depth_2\">6.2<\/span> \u0130zlemezsen G\u00f6remezsin: Loglar, Paneller ve Sessiz Alarmlar<\/a><\/li><li><a href=\"#Yedekleriniz_Kibar_Dursun_Geri_Donusunuz_Kolay_Olsun\"><span class=\"toc_number toc_depth_2\">6.3<\/span> Yedekleriniz Kibar Dursun, Geri D\u00f6n\u00fc\u015f\u00fcn\u00fcz Kolay Olsun<\/a><\/li><\/ul><\/li><li><a href=\"#Uygulama_Sicak_Kalirken_Guncellemeler_Nasil_Akacak\"><span class=\"toc_number toc_depth_1\">7<\/span> Uygulama S\u0131cak Kal\u0131rken G\u00fcncellemeler Nas\u0131l Akacak?<\/a><ul><li><a href=\"#Env_Izinler_ve_Paylasimli_Klasorler\"><span class=\"toc_number toc_depth_2\">7.1<\/span> Env, \u0130zinler ve Payla\u015f\u0131ml\u0131 Klas\u00f6rler<\/a><\/li><li><a href=\"#Nginx_ve_FPMe_Kibarca_Haber_Vermek\"><span class=\"toc_number toc_depth_2\">7.2<\/span> Nginx ve FPM\u2019e Kibarca Haber Vermek<\/a><\/li><\/ul><\/li><li><a href=\"#Gercek_Hayatin_Kucuk_Koseleri_Sorun_Ciktiysa_Geri_Donus_ve_Iyilestirme\"><span class=\"toc_number toc_depth_1\">8<\/span> Ger\u00e7ek Hayat\u0131n K\u00fc\u00e7\u00fck K\u00f6\u015feleri: Sorun \u00c7\u0131kt\u0131ysa Geri D\u00f6n\u00fc\u015f ve \u0130yile\u015ftirme<\/a><ul><li><a href=\"#Geri_Alma_Plani_Rollback_Olmadan_Dagitim_Dagitim_Degildir\"><span class=\"toc_number toc_depth_2\">8.1<\/span> Geri Alma Plan\u0131 (Rollback) Olmadan Da\u011f\u0131t\u0131m, Da\u011f\u0131t\u0131m De\u011fildir<\/a><\/li><li><a href=\"#Belirtileri_Okumak_Yavaslik_mi_Ziplamalar_mi\"><span class=\"toc_number toc_depth_2\">8.2<\/span> Belirtileri Okumak: Yava\u015fl\u0131k m\u0131, Z\u0131plamalar m\u0131?<\/a><\/li><\/ul><\/li><li><a href=\"#Laravelin_Kendi_Araclariyla_Sik_Dokunuslar\"><span class=\"toc_number toc_depth_1\">9<\/span> Laravel\u2019in Kendi Ara\u00e7lar\u0131yla \u015e\u0131k Dokunu\u015flar<\/a><ul><li><a href=\"#Resmi_Rehberlere_Minik_Ziyaret\"><span class=\"toc_number toc_depth_2\">9.1<\/span> Resmi Rehberlere Minik Ziyaret<\/a><\/li><\/ul><\/li><li><a href=\"#Ekstra_Notlar_Trafik_Kaynaklar_ve_Buyume_Sevincine_Hazirlik\"><span class=\"toc_number toc_depth_1\">10<\/span> Ekstra Notlar: Trafik, Kaynaklar ve B\u00fcy\u00fcme Sevincine Haz\u0131rl\u0131k<\/a><ul><li><a href=\"#Kaynak_Secimi_ve_Ufak_Surprizler\"><span class=\"toc_number toc_depth_2\">10.1<\/span> Kaynak Se\u00e7imi ve Ufak S\u00fcrprizler<\/a><\/li><\/ul><\/li><li><a href=\"#Kapanis_Sakin_Esnek_ve_Guvenli_Bir_Yayin_Duzeni_Mumkun\"><span class=\"toc_number toc_depth_1\">11<\/span> Kapan\u0131\u015f: Sakin, Esnek ve G\u00fcvenli Bir Yay\u0131n D\u00fczeni M\u00fcmk\u00fcn<\/a><ul><li><a href=\"#Toparlayalim_ve_Bir_Sonraki_Dagitimda_Neler_Yapacagiz\"><span class=\"toc_number toc_depth_2\">11.1<\/span> Toparlayal\u0131m ve Bir Sonraki Da\u011f\u0131t\u0131mda Neler Yapaca\u011f\u0131z?<\/a><\/li><\/ul><\/li><\/ul><\/div>\n<h2 id=\"section-1\"><span id=\"Ofiste_Baslayan_Kucuk_Bir_Deploy_Kaygisi_8220Ya_Site_1_Dakika_Bile_Duserse8221\">Ofiste Ba\u015flayan K\u00fc\u00e7\u00fck Bir Deploy Kayg\u0131s\u0131: &#8220;Ya Site 1 Dakika Bile D\u00fc\u015ferse?&#8221;<\/span><\/h2>\n<p>Hi\u00e7 ba\u015f\u0131n\u0131za geldi mi? Tam herkese demo linkini atm\u0131\u015fken, deploy tu\u015funa basars\u0131n\u0131z ve o an i\u00e7inizden k\u0131sac\u0131k bir endi\u015fe ge\u00e7er: Ya site 1 dakika bile dursa? Ge\u00e7en hafta benzer bir an ya\u015fad\u0131m. K\u00fc\u00e7\u00fck bir kampanya sayfas\u0131yd\u0131, ama zamanlamas\u0131 hassast\u0131. Kod haz\u0131r, testler iyi, ama \u00fcretimde i\u015fler bazen daha farkl\u0131 ak\u0131yor. \u0130\u015fte o anda d\u00fc\u015f\u00fcnd\u00fcm: Bu s\u00fcreci hem d\u00fczenli, hem g\u00fcvenli, hem de m\u00fcmk\u00fcnse <strong>s\u0131f\u0131r kesinti<\/strong> ile nas\u0131l oturturuz?<\/p>\n<p>Bu yaz\u0131da tam da bunu konu\u015faca\u011f\u0131z. Laravel uygulamalar\u0131n\u0131 bir <a href=\"https:\/\/www.dchost.com\/tr\/vps\">VPS<\/a> \u00fczerinde, Nginx ve PHP\u2011FPM ile sa\u011flama al\u0131p, arka planda <strong>Queue<\/strong> ve <strong>Horizon<\/strong> ikilisini ak\u0131ll\u0131ca \u00e7al\u0131\u015ft\u0131rmay\u0131, \u00fcst\u00fcne bir de kesinti ya\u015fatmadan da\u011f\u0131t\u0131m\u0131n nas\u0131l yap\u0131laca\u011f\u0131n\u0131 ad\u0131m ad\u0131m anlataca\u011f\u0131m. Kuru teknik anlat\u0131m de\u011fil; araya ya\u015fanm\u0131\u015f k\u00fc\u00e7\u00fck deneyimler, pratik notlar ve &#8220;mesela \u015f\u00f6yle d\u00fc\u015f\u00fcn\u00fcn&#8221; gibi ufak k\u0131vr\u0131mlar koyaca\u011f\u0131m. Yaz\u0131n\u0131n sonunda, tek bir sunucuda ba\u015flayan bu d\u00fczeni, b\u00fcy\u00fcrken de ta\u015f\u0131yabilece\u011finiz bir iskelete d\u00f6n\u00fc\u015ft\u00fcrm\u00fc\u015f olaca\u011f\u0131z.<\/p>\n<h2 id=\"section-2\"><span id=\"VPSin_Uzerine_Insa_Alan_Adi_Nginx_ve_Temiz_Bir_Yapi_Neden_Isin_Yarisidir\">VPS\u2019in \u00dczerine \u0130n\u015fa: Alan Ad\u0131, Nginx ve Temiz Bir Yap\u0131 Neden \u0130\u015fin Yar\u0131s\u0131d\u0131r?<\/span><\/h2>\n<h3><span id=\"Alan_Adi_DNS_ve_Ilk_Adimlar\">Alan Ad\u0131, DNS ve \u0130lk Ad\u0131mlar<\/span><\/h3>\n<p>VPS\u2019i ilk kez aya\u011fa kald\u0131r\u0131rken herkesin i\u00e7inden ge\u00e7en o tatl\u0131 tela\u015f\u0131 bilirsiniz. SSH ile ba\u011flan, g\u00fcncellemeleri yap, kullan\u0131c\u0131 olu\u015ftur, anahtar ekle, ufak g\u00fcvenlik dokunu\u015flar\u0131\u2026 Bir de alan ad\u0131n\u0131 do\u011fru y\u00f6nlendirmek var. E\u011fer kendi DNS\u2019inizi y\u00f6netmeyi seviyorsan\u0131z, \u00f6zel ad sunucusu kurup Glue Record ile ad\u0131 kendi yetkinize almak insana ayr\u0131 bir \u00f6zg\u00fcven veriyor. Bu konu senin ilgini \u00e7ekiyorsa, \u015furadaki ad\u0131m ad\u0131m anlat\u0131m epey i\u015f g\u00f6r\u00fcyor: <a href=\"https:\/\/www.dchost.com\/blog\/ozel-ad-sunucusu-ve-glue-record-nasil-kurulur-kendi-dnsine-adim-adim-yolculuk\/\">\u00d6zel ad sunucusu ve Glue Record kurulum rehberi<\/a>.<\/p>\n<p>DNS i\u015fini hallettikten sonra s\u0131ra, trafi\u011fi kar\u015f\u0131layacak kap\u0131ya, yani Nginx\u2019e geliyor. Nginx\u2019i kurdu\u011funuzda, ilk sayfa \u00e7ok kolay gelir, ama as\u0131l mesele Laravel\u2019in public klas\u00f6r\u00fcne do\u011fru ve g\u00fcvenli \u015fekilde y\u00f6nlendirmek, istemci ile sunucu aras\u0131ndaki konu\u015fmay\u0131 h\u0131zl\u0131 tutmak ve ileride olu\u015fabilecek k\u00fc\u00e7\u00fck s\u0131k\u0131nt\u0131lar\u0131 \u015fimdiden \u00e7\u00f6zmektir.<\/p>\n<h3><span id=\"Nginxi_Laravel_ile_Arkadas_Etmek\">Nginx\u2019i Laravel ile Arkada\u015f Etmek<\/span><\/h3>\n<p>Mesela \u015f\u00f6yle d\u00fc\u015f\u00fcn\u00fcn: Uygulaman\u0131z\u0131n k\u00f6k dizini \/var\/www\/proje olsun. Nginx sunucu blo\u011fu, k\u00f6k olarak public klas\u00f6r\u00fcn\u00fc g\u00f6stermeli. \u0130steklerin Laravel\u2019in index.php\u2019sine akmas\u0131 i\u00e7in temel kural budur. \u00dcst\u00fcne bir de &#8220;g\u00fczelle\u015ftirme&#8221; dokunu\u015flar\u0131 gelir; s\u0131k\u0131\u015ft\u0131rma, do\u011fru cache ba\u015fl\u0131klar\u0131, zaman a\u015f\u0131m\u0131 de\u011ferleri gibi. E\u011fer HTTPS konusunda h\u0131z ve g\u00fcven taraf\u0131n\u0131 biraz daha \u015fahland\u0131rmak isterseniz, <a href=\"https:\/\/www.dchost.com\/blog\/nginxte-tls-1-3-ocsp-stapling-ve-brotli-nasil-kurulur-hizli-ve-guvenli-httpsnin-sicacik-rehberi\/\">TLS 1.3, OCSP Stapling ve Brotli i\u00e7in ayr\u0131nt\u0131l\u0131 rehber<\/a> fazlas\u0131yla yard\u0131mc\u0131 olur. K\u00fc\u00e7\u00fck ayarlar, b\u00fcy\u00fck farklar yarat\u0131r; \u00f6zellikle ilk bayt s\u00fcresinde ve taray\u0131c\u0131 taraf\u0131nda hissedilir.<\/p>\n<p>Konfig\u00fcrasyonlar\u0131 d\u00fczenlerken, bir anda kendinizi dosyalar\u0131n derinliklerinde kaybolmu\u015f bulabilirsiniz. O anda ak\u0131lda tutmak istedi\u011fim \u015fey \u015fu: \u00dcretim ortam\u0131nda okumas\u0131 ve bak\u0131m\u0131 kolay bir yap\u0131 kurmak ileriye d\u00f6n\u00fck en iyi yat\u0131r\u0131md\u0131r. Sanal host dosyalar\u0131n\u0131 k\u0131sa, isabetli ve tek sorumluluk ilkesine uygun tutun. Bir sorun \u00e7\u0131kt\u0131\u011f\u0131nda gece uykunuzdan kalk\u0131p bakman\u0131z gerekirse, o dosyalar\u0131 kendinize te\u015fekk\u00fcr ettirecek \u015fekilde b\u0131rak\u0131n.<\/p>\n<h3><span id=\"SSLHTTPS_ve_Zarif_Yeniden_Yuklemeler\">SSL\/HTTPS ve Zarif Yeniden Y\u00fcklemeler<\/span><\/h3>\n<p>SSL sertifikalar\u0131n\u0131 yenilerken, Nginx\u2019i komple yeniden ba\u015flatmak yerine yaln\u0131zca <strong>yeniden y\u00fcklemek<\/strong> (reload) ziyaret\u00e7inin g\u00f6z\u00fcnden \u0131skalanacak kadar yumu\u015fak bir ge\u00e7i\u015f sa\u011flar. Komutun tam ad\u0131n\u0131 ezberlemeye gerek yok; \u00f6nemli olan &#8220;durdurup ba\u015flatma&#8221; gibi sert hamleler yerine &#8220;yeniden oku&#8221; demek. \u0130lgisini \u00e7ekenler i\u00e7in, Nginx\u2019in kontrol sinyalleri \u00fczerine k\u0131sa ama \u00f6z bir d\u00f6k\u00fcman var: <a href=\"https:\/\/nginx.org\/en\/docs\/control.html\" rel=\"nofollow noopener\" target=\"_blank\">Nginx process kontrol\u00fc ve reload davran\u0131\u015f\u0131<\/a>. Ufak bir not: reload, aktif ba\u011flant\u0131lar\u0131 d\u00fc\u015f\u00fcrmeden yeni konfig\u00fcrasyonu devreye al\u0131r. \u0130\u015fte biz de da\u011f\u0131t\u0131mlarda hep bu inceli\u011fin pe\u015findeyiz.<\/p>\n<h2 id=\"section-3\"><span id=\"PHPFPMi_Nazikce_Ayarlamak_Sessiz_Kahraman\">PHP\u2011FPM\u2019i Nazik\u00e7e Ayarlamak: Sessiz Kahraman<\/span><\/h2>\n<h3><span id=\"Neden_PHPFPM_ve_Ne_Zaman_Takilir\">Neden PHP\u2011FPM ve Ne Zaman Tak\u0131l\u0131r?<\/span><\/h3>\n<p>Laravel\u2019in kalbi PHP\u2011FPM \u00fczerinde atar. Fakat onu bir kez kurup unutmak \u00e7o\u011fu zaman k\u00fc\u00e7\u00fck t\u0131kan\u0131kl\u0131klara zemin haz\u0131rlar. Trafik artt\u0131k\u00e7a havuz ayarlar\u0131, e\u015fzamanl\u0131l\u0131k ve bellek kullan\u0131m\u0131 gibi konular hafif\u00e7e su y\u00fcz\u00fcne \u00e7\u0131kar. Benim yakla\u015f\u0131m\u0131m basit: \u00d6nce sade bir yap\u0131, sonra g\u00f6zlem ve gerekti\u011finde minik r\u00f6tu\u015flar. A\u015f\u0131r\u0131 b\u00fcy\u00fck de\u011ferlerle ba\u015flamak yerine, ger\u00e7ek trafi\u011fi g\u00f6r\u00fcp ona g\u00f6re geni\u015flemek \u00e7ok daha sa\u011fl\u0131kl\u0131d\u0131r.<\/p>\n<p>Bir an i\u00e7in yo\u011fun bir kampanya sayfas\u0131n\u0131 d\u00fc\u015f\u00fcn\u00fcn. K\u0131sa bir s\u00fcre i\u00e7in istekler katlan\u0131yor, ama kal\u0131c\u0131 bir art\u0131\u015f yok. Bu durumda PHP\u2011FPM\u2019i kal\u0131c\u0131 olarak \u015fi\u015firmek yerine, ge\u00e7ici olarak \u00f6nbellekleme, statik dosya sunumu gibi alanlara yaslanmak daha ak\u0131ll\u0131ca. \u00c7\u00fcnk\u00fc PHP s\u00fcre\u00e7lerini b\u00fcy\u00fctmek, belle\u011fi art\u0131rmakla kalmaz, i\u015fletim sisteminin planlay\u0131c\u0131s\u0131n\u0131 da daha fazla zorlar. Sakin ama kararl\u0131 ad\u0131mlar burada i\u015fin s\u0131rr\u0131d\u0131r.<\/p>\n<h3><span id=\"OPcache_ve_Laravelin_Onbellekleri\">OPcache ve Laravel\u2019in \u00d6nbellekleri<\/span><\/h3>\n<p>Laravel taraf\u0131nda rotalar\u0131, konfig\u00fcrasyonu ve g\u00f6r\u00fcn\u00fcmleri \u00f6nbelle\u011fe almak, \u00fcretim ortam\u0131nda inan\u0131lmaz rahatlat\u0131c\u0131d\u0131r. Ben genelde yay\u0131n \u00f6ncesi \u015f\u00f6yle bir s\u0131rayla ilerliyorum: Konfig\u00fcrasyonu derlemek, rotalar\u0131 derlemek, g\u00f6r\u00fcn\u00fcmleri \u00f6nceden haz\u0131rlamak. Bu i\u015flemler kodun daha derli toplu \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar ve PHP\u2011FPM\u2019in \u00fczerindeki k\u00fc\u00e7\u00fck bask\u0131lar\u0131 azalt\u0131r. Bu arada OPcache\u2019i ak\u0131ll\u0131ca ayarlamak, opcache\u2019in biriktirdi\u011fi derlenmi\u015f kodlar\u0131 do\u011fru \u015fekilde ta\u015f\u0131man\u0131z anlam\u0131na gelir. Kodu de\u011fi\u015ftirirken, FPM\u2019e <strong>nazik\u00e7e yeniden y\u00fckleme<\/strong> yapt\u0131rmak \u00e7o\u011fu zaman yeterlidir; sert bir yeniden ba\u015flatmaya pek gerek kalmaz.<\/p>\n<p>Performans denince akla gelen temel ta\u015flar\u0131 bir arada g\u00f6rmek istersen, \u015fu pratik rehbere g\u00f6z atman\u0131 \u00f6neririm: <a href=\"https:\/\/www.dchost.com\/blog\/laravel-prod-ortam-optimizasyonu-nasil-yapilir-php%E2%80%91fpm-opcache-octane-queue-horizon-ve-redisi-el-ele-calistirmak\/\">Laravel prod ortam optimizasyonunu ad\u0131m ad\u0131m toparlayan yaz\u0131<\/a>. Orada anlat\u0131lanlar burada kuraca\u011f\u0131m\u0131z iskeletle g\u00fczelce \u00f6rt\u00fc\u015f\u00fcyor.<\/p>\n<h2 id=\"section-4\"><span id=\"Queue_ve_Horizon_Kulis_Arkasini_Sakin_Tutmanin_Inceligi\">Queue ve Horizon: Kulis Arkas\u0131n\u0131 Sakin Tutman\u0131n \u0130nceli\u011fi<\/span><\/h2>\n<h3><span id=\"Arka_Plan_Isleri_Neden_Hayat_Kurtarir\">Arka Plan \u0130\u015fleri Neden Hayat Kurtar\u0131r?<\/span><\/h3>\n<p>Bir form dolduruluyor ve arka planda bir e\u2011posta tetikleniyor. Dosya y\u00fckleniyor, bir g\u00f6r\u00fcnt\u00fc optimize ediliyor. Sipari\u015f tamamlan\u0131yor, bir web kancas\u0131 \u00e7a\u011fr\u0131l\u0131yor. T\u00fcm bu i\u015fler an\u0131nda, ayn\u0131 istek i\u00e7inde yap\u0131lmaya kalkarsa ziyaret\u00e7i bekler, taray\u0131c\u0131 bekler, ve bekleyi\u015f uzad\u0131k\u00e7a hissedilen kalite d\u00fc\u015fer. \u0130\u015fte bu y\u00fczden kuyru\u011fa al\u0131\u015fmak, uygulaman\u0131n nefes almas\u0131n\u0131 sa\u011flar. \u00d6n y\u00fcz h\u0131zl\u0131 biter, a\u011f\u0131r i\u015fler kuliste sakince haz\u0131rlan\u0131r.<\/p>\n<p>Horizon, kuyru\u011fu izlemek, i\u015f\u00e7ileri dengelemek ve ta\u015fan durumlar\u0131 fark etmek i\u00e7in g\u00fczel bir y\u00f6netim paneli sunuyor. Bir keresinde gece yar\u0131s\u0131 gelen bir hata bildirimini Horizon\u2019dan izleyip sorunu dakikalar i\u00e7inde buldu\u011fumu hat\u0131rl\u0131yorum. G\u00f6sterge paneli, bekleyen i\u015f say\u0131s\u0131n\u0131, \u00e7al\u0131\u015f\u0131r durumda olan i\u015f\u00e7i say\u0131s\u0131n\u0131 ve \u00e7e\u015fitli kuyruklar\u0131n sa\u011fl\u0131\u011f\u0131n\u0131 h\u0131zl\u0131ca g\u00f6steriyor. Bu g\u00f6r\u00fcn\u00fcrl\u00fck, \u00fcretimdeki rahatl\u0131\u011f\u0131n yar\u0131s\u0131d\u0131r.<\/p>\n<h3><span id=\"Horizoni_Dagitimin_Bir_Parcasi_Yapmak\">Horizon\u2019\u0131 Da\u011f\u0131t\u0131m\u0131n Bir Par\u00e7as\u0131 Yapmak<\/span><\/h3>\n<p>Horizon\u2019\u0131 sistemde bir hizmet gibi d\u00fc\u015f\u00fcn\u00fcn. Sunucu a\u00e7\u0131ld\u0131\u011f\u0131nda aya\u011fa kalks\u0131n, kapan\u0131rken nazik\u00e7e insin, da\u011f\u0131t\u0131mda yeni kodu g\u00f6rs\u00fcn. Burada \u00f6nemli olan iki k\u00fc\u00e7\u00fck al\u0131\u015fkanl\u0131k var. Birincisi, da\u011f\u0131t\u0131m\u0131n sonunda Horizon\u2019a <strong>tekrar ba\u015fla<\/strong> demek, yeni kodu ve yeni i\u015f s\u0131n\u0131flar\u0131n\u0131 g\u00f6rmesini sa\u011flar. \u0130kincisi, kuyruk \u00e7al\u0131\u015fanlar\u0131n\u0131n s\u0131k\u0131\u015ft\u0131\u011f\u0131 anlarda yumu\u015fak\u00e7a <strong>yeniden ba\u015flatmak<\/strong> i\u015fleri ferahlat\u0131r. Bu iki hareket, gecenin bir vakti s\u00fcrpriz birikimleri engeller.<\/p>\n<p>Resmi belgeler pratik ipu\u00e7lar\u0131yla dolu. G\u00f6z atmak istersen, <a href=\"https:\/\/laravel.com\/docs\/horizon\" rel=\"nofollow noopener\" target=\"_blank\">Laravel Horizon dok\u00fcmantasyonu<\/a> sade bir dille temel noktalar\u0131 toparl\u0131yor. Bir de \u015funu seviyorum: Horizon ile farkl\u0131 \u00f6ncelikte kuyruklar tan\u0131mlay\u0131p, yo\u011fun zaman\u0131 daha zarif y\u00f6netebiliyorsunuz. \u00d6nce h\u0131zl\u0131 d\u00f6n\u00fc\u015f isteyen i\u015fleri eritip, arkadan a\u011f\u0131r i\u015flere ge\u00e7mek gibi.<\/p>\n<h2 id=\"section-5\"><span id=\"Sifir_Kesinti_Dagitim_Kapanis_Ekrani_Gostermeden_Kod_Guncellemek\">S\u0131f\u0131r Kesinti Da\u011f\u0131t\u0131m: Kapan\u0131\u015f Ekran\u0131 G\u00f6stermeden Kod G\u00fcncellemek<\/span><\/h2>\n<h3><span id=\"Mesela_Soyle_Dusunun_Paralel_Bir_Sahne_Tek_Bir_Perde\">Mesela \u015e\u00f6yle D\u00fc\u015f\u00fcn\u00fcn: Paralel Bir Sahne, Tek Bir Perde<\/span><\/h3>\n<p>Sahne haz\u0131rl\u0131\u011f\u0131n\u0131 iki ayr\u0131 yerde yapt\u0131\u011f\u0131n\u0131z\u0131 d\u00fc\u015f\u00fcn\u00fcn. Birinde seyirciler var, \u00f6tekinde arka planda kost\u00fcmler haz\u0131rlan\u0131yor. As\u0131l olan, perde a\u00e7\u0131ld\u0131\u011f\u0131nda her \u015feyin haz\u0131r olmas\u0131. Laravel da\u011f\u0131t\u0131m\u0131nda da benzer bir strateji kullan\u0131r\u0131z: <strong>releases<\/strong> ad\u0131nda bir klas\u00f6r, i\u00e7inde her da\u011f\u0131t\u0131m i\u00e7in ayr\u0131 bir dizin ve <strong>current<\/strong> ad\u0131nda, canl\u0131 olan s\u00fcr\u00fcm\u00fc g\u00f6steren k\u00fc\u00e7\u00fck bir i\u015faret. Kod yeni dizinde haz\u0131rlan\u0131r, ba\u011f\u0131ml\u0131l\u0131klar y\u00fcklenir, \u00f6nbellekler \u0131s\u0131t\u0131l\u0131r. Sonra yaln\u0131zca <strong>i\u015fareti<\/strong> yeni s\u00fcr\u00fcme \u00e7evirirsiniz. Perde kalkar, sahne de\u011fi\u015fir, seyirci de\u011fi\u015fimi fark etmez.<\/p>\n<p>Bu y\u00f6ntemin g\u00fczelli\u011fi \u015fu: Eski s\u00fcr\u00fcm bir anda yok olmaz. Hatta birka\u00e7 dakika orada kal\u0131r, isterseniz geri d\u00f6nmek i\u00e7in en h\u0131zl\u0131 can simididir. Bir problem g\u00f6r\u00fcrseniz i\u015fareti tekrar bir \u00f6nceki s\u00fcr\u00fcme \u00e7evirirsiniz. Bu kadar basit. Kimse &#8220;Site biraz \u00f6nce bozuldu&#8221; demez, hatta \u00e7o\u011fu zaman hi\u00e7bir \u015fey fark edilmez.<\/p>\n<h3><span id=\"Dagitimin_Nazik_Adimlari\">Da\u011f\u0131t\u0131m\u0131n Nazik Ad\u0131mlar\u0131<\/span><\/h3>\n<p>Kendi rutinimi anlatay\u0131m. \u00d6nce yeni s\u00fcr\u00fcm dizinini olu\u015fturup kodu oraya \u00e7ekiyorum. Ba\u011f\u0131ml\u0131l\u0131klar\u0131 \u00fcretim modunda kuruyorum, sonra Laravel\u2019in \u00f6nbelleklerini \u0131s\u0131t\u0131yorum. E\u011fer statik dosyalar, derlenen varl\u0131klar varsa, onlar da yeni dizinde haz\u0131rlan\u0131yor. <strong>.env<\/strong> gibi hassas dosyalar\u0131 linkliyorum; b\u00f6ylece s\u0131rlar tek yerde duruyor ve s\u00fcr\u00fcm dizinleri i\u00e7inde gezmiyor. Depolama klas\u00f6rlerini, g\u00fcnl\u00fckleri ve \u00f6nbellek klas\u00f6rlerini yine payla\u015f\u0131ml\u0131 tutuyorum ki s\u00fcr\u00fcm de\u011fi\u015firken veriler yerinde kals\u0131n. Son ad\u0131mda i\u015fareti yeni s\u00fcr\u00fcme \u00e7eviriyorum ve yaln\u0131zca Nginx ile FPM\u2019e &#8220;de\u011fi\u015fiklik oldu, bir bakar m\u0131s\u0131n\u0131z&#8221; diyen nazik bir <strong>yeniden y\u00fckleme<\/strong> yapt\u0131r\u0131yorum.<\/p>\n<p>Burada k\u00fc\u00e7\u00fck ama \u00e7ok \u00f6nemli bir p\u00fcf var: Veritaban\u0131 de\u011fi\u015fiklikleri. Da\u011f\u0131t\u0131m an\u0131nda \u015fema de\u011fi\u015ftiren komutlar riskli olabilir. Ben genelde iki a\u015famal\u0131 ilerliyorum: \u00d6nce uyumlu de\u011fi\u015fikli\u011fi ekliyorum (\u00f6rne\u011fin yeni bir s\u00fctunu bo\u015f ge\u00e7ilebilir \u015fekilde eklemek), uygulamay\u0131 yeni s\u00fcr\u00fcme al\u0131yorum, sonra ikinci a\u015famada s\u0131k\u0131la\u015ft\u0131rmay\u0131 yap\u0131yorum (bo\u015f ge\u00e7ilemez yapmak gibi). E\u011fer b\u00fcy\u00fck veri ta\u015f\u0131mas\u0131 varsa, bunu arka plana, kuyruklara b\u0131rakmak g\u00fcne\u015fli bir yol a\u00e7ar. Ziyaret\u00e7i hi\u00e7bir \u015fey fark etmez, veriler g\u00fcvenle hareket eder.<\/p>\n<h3><span id=\"Bakim_Modu_mu_Sifir_Kesinti_mi\">Bak\u0131m Modu mu, S\u0131f\u0131r Kesinti mi?<\/span><\/h3>\n<p>Bazen bak\u0131m moduna ihtiya\u00e7 olur. \u00d6zellikle b\u00fcy\u00fck ve riskli d\u00f6n\u00fc\u015f\u00fcmler s\u0131ras\u0131nda k\u0131sa bir mola vermek en g\u00fcvenli yoldur. Ama iyi yap\u0131land\u0131r\u0131lm\u0131\u015f bir s\u0131f\u0131r kesinti \u015fablonu \u00e7o\u011fu da\u011f\u0131t\u0131mda bak\u0131m moduna ihtiya\u00e7 b\u0131rakmaz. Benim tercih s\u0131ram \u015f\u00f6yle: \u00d6nce s\u0131f\u0131r kesinti y\u00f6ntemini denerim. E\u011fer \u015fema de\u011fi\u015fiklikleri ger\u00e7ekten tehlikeliyse, pencerem k\u0131sa da olsa bak\u0131m moduna ge\u00e7er. \u0130ki y\u00f6ntemi de elinizin alt\u0131nda tutmak, geceleri tatl\u0131 uyku verir.<\/p>\n<h2 id=\"section-6\"><span id=\"Guvenlik_Izleme_ve_Yedek_Kirilgan_Anlar_Onceden_Cozulurse_Cok_Rahat\">G\u00fcvenlik, \u0130zleme ve Yedek: K\u0131r\u0131lgan Anlar \u00d6nceden \u00c7\u00f6z\u00fcl\u00fcrse \u00c7ok Rahat<\/span><\/h2>\n<h3><span id=\"HTTPS_ve_Saldiri_Onlemleri\">HTTPS ve Sald\u0131r\u0131 \u00d6nlemleri<\/span><\/h3>\n<p>Canl\u0131 ortamda HTTPS zorunlu. Sertifikalar\u0131n otomatik yenilenmesi, HTTP\u2019den HTTPS\u2019e nazik\u00e7e y\u00f6nlendirme ve modern \u015fifreleme k\u00fcmeleri uygulamay\u0131 hem h\u0131zl\u0131 hem g\u00fcvenli yapar. Bu k\u0131s\u0131mda Nginx\u2019in k\u00fc\u00e7\u00fck detaylar\u0131 \u00e7ok i\u015f g\u00f6r\u00fcr. E\u011fer ayr\u0131nt\u0131 seviyorsan, <a href=\"https:\/\/www.dchost.com\/blog\/nginxte-tls-1-3-ocsp-stapling-ve-brotli-nasil-kurulur-hizli-ve-guvenli-httpsnin-sicacik-rehberi\/\">TLS 1.3 ve OCSP Stapling ile h\u0131zl\u0131 ve g\u00fcvenli HTTPS<\/a> yaz\u0131s\u0131 tam bir yol haritas\u0131 sunuyor. \u00dcst\u00fcne bir de uygulama seviyesinde oturum ve \u00f6nbellek i\u00e7in g\u00fcvenli \u00e7erez ayarlar\u0131, \u00e7apraz site istekleri i\u00e7in korumalar derken, k\u00fc\u00e7\u00fck ta\u015flar bir araya gelip sa\u011flam bir duvar \u00f6r\u00fcyor.<\/p>\n<p>\u0130sterseniz bir katman\u0131 daha ekleyebilirsiniz. Sald\u0131r\u0131 y\u00fczeyini daraltmak i\u00e7in temel kurallar, h\u0131z s\u0131n\u0131rlamalar\u0131 ve uygulama g\u00fcvenlik duvarlar\u0131 hayat kurtar\u0131r. Statik dosyalar\u0131 do\u011frudan Nginx\u2019ten sunmak, b\u00fcy\u00fck dosya indirmelerini php\u2019nin \u00fczerinden almak gibi ufak hileler, uygulama katman\u0131n\u0131 hafifletir ve beklenmedik y\u00fcklerde sakince kalman\u0131z\u0131 sa\u011flar.<\/p>\n<h3><span id=\"Izlemezsen_Goremezsin_Loglar_Paneller_ve_Sessiz_Alarmlar\">\u0130zlemezsen G\u00f6remezsin: Loglar, Paneller ve Sessiz Alarmlar<\/span><\/h3>\n<p>Ger\u00e7ekten \u015f\u00f6yle bir an ya\u015fad\u0131\u011f\u0131m\u0131 hat\u0131rl\u0131yorum: Sunucu kaynaklar\u0131 idare eder g\u00f6r\u00fcn\u00fcyor, ama kullan\u0131c\u0131lar zaman zaman yava\u015fl\u0131ktan \u015fikayet\u00e7i. Tek tek g\u00fcnl\u00fckleri kar\u0131\u015ft\u0131r\u0131rken ipucunu sonra buldum; belli bir saat aral\u0131\u011f\u0131nda bir kuyruk i\u015fi ta\u015fmaya ba\u015fl\u0131yor, sonra kendine geliyor. \u0130zleme olmadan bu paterni fark etmek \u00e7ok zor. O y\u00fczden, sunucunu bir panelle g\u00f6zlemlemek, belirli e\u015fiklerde uyar\u0131 almak, uygulaman\u0131n i\u00e7inden hata takip etmek da\u011f\u0131t\u0131m kadar \u00f6nemli. \u0130lgini \u00e7ekiyorsa, <a href=\"https:\/\/www.dchost.com\/blog\/vps-izleme-ve-alarm-kurulumu-prometheus-grafana-ve-uptime-kuma-ile-baslangic\/\">VPS izleme ve alarm kurulumunu anlatan bu rehber<\/a> iyi bir ba\u015flang\u0131\u00e7 sunuyor.<\/p>\n<p>Horizon\u2019un kendi g\u00f6stergeleri de g\u00fcnl\u00fck ak\u0131\u015f\u0131n\u0131 anlamak i\u00e7in g\u00fczel sinyaller verir. Bekleyen i\u015f say\u0131s\u0131 art\u0131nca, i\u015f\u00e7i say\u0131s\u0131n\u0131 ge\u00e7ici olarak art\u0131rmak bazen \u00e7\u00f6z\u00fcm olur. S\u00fcrekli art\u0131yorsa, kal\u0131c\u0131 nedenleri ara\u015ft\u0131rmak gerekir: Yava\u015f bir harici servis mi, beklenenden b\u00fcy\u00fck dosyalar m\u0131, veritaban\u0131nda kilitlenmeler mi? \u0130zleme, soruyu do\u011fru sorman\u0131n en k\u0131sa yoludur.<\/p>\n<h3><span id=\"Yedekleriniz_Kibar_Dursun_Geri_Donusunuz_Kolay_Olsun\">Yedekleriniz Kibar Dursun, Geri D\u00f6n\u00fc\u015f\u00fcn\u00fcz Kolay Olsun<\/span><\/h3>\n<p>\u0130\u00e7 rahatl\u0131\u011f\u0131 i\u00e7in yedekler kadar tatl\u0131 bir \u015fey yok. S\u00fcr\u00fcmleme, \u015fifreleme ve uzak depolama al\u0131\u015fkanl\u0131\u011f\u0131, k\u00f6t\u00fc g\u00fcn dostudur. Bir projede yaln\u0131zca veritaban\u0131n\u0131 de\u011fil, y\u00fcklenen dosyalar\u0131 ve kritik yap\u0131land\u0131rmalar\u0131 da kapsayan bir yedek plan\u0131 kurdu\u011fumda omzumdan ta\u015f gibi bir y\u00fck\u00fcn indi\u011fini hissetmi\u015ftim. Bu konuyu sade ve anla\u015f\u0131l\u0131r \u015fekilde toparlayan bir yaz\u0131 var, g\u00f6z atman\u0131 \u00f6neririm: <a href=\"https:\/\/www.dchost.com\/blog\/restic-ve-borg-ile-s3-uyumlu-uzak-yedekleme-surumleme-sifreleme-ve-saklama-ne-zaman-nasil\/\">Restic ve Borg ile S3 uyumlu uzak yedekleme rehberi<\/a>. \u0130lk okumada bile i\u015fe yarayan bir \u00e7er\u00e7eve veriyor.<\/p>\n<h2 id=\"section-7\"><span id=\"Uygulama_Sicak_Kalirken_Guncellemeler_Nasil_Akacak\">Uygulama S\u0131cak Kal\u0131rken G\u00fcncellemeler Nas\u0131l Akacak?<\/span><\/h2>\n<h3><span id=\"Env_Izinler_ve_Paylasimli_Klasorler\">Env, \u0130zinler ve Payla\u015f\u0131ml\u0131 Klas\u00f6rler<\/span><\/h3>\n<p>Uygulaman\u0131n s\u0131rlar\u0131 bir \u00e7antada dursun, s\u00fcr\u00fcmler ise \u00e7antan\u0131n etraf\u0131nda dans etsin. Ben .env\u2019i payla\u015f\u0131ml\u0131 bir yerde tutup, her s\u00fcr\u00fcmde ona nazik bir i\u015faret (symbolic link) vermeyi seviyorum. Ayn\u0131 \u015feyi storage ve bootstrap\/cache gibi klas\u00f6rler i\u00e7in de uyguluyorum. B\u00f6ylece g\u00fcnl\u00fckler ve dosyalar s\u00fcr\u00fcm ge\u00e7i\u015flerinde yerinden k\u0131p\u0131rdam\u0131yor, yaln\u0131zca kod de\u011fi\u015fiyor. \u0130zinleri ayarlarken \u00f6l\u00e7\u00fcl\u00fc davranmak \u00f6nemli. &#8220;Hadi 777 olsun, bitsin&#8221; demek k\u0131sa yoldur ama risklidir. Uygulaman\u0131n yazaca\u011f\u0131 klas\u00f6rlerde do\u011fru kullan\u0131c\u0131ya yazma izni vermek genellikle yeterlidir.<\/p>\n<p>Baz\u0131 ekipler s\u00fcr\u00fcm klas\u00f6rlerinin ad\u0131n\u0131 tarih-saat ile verir, ben de seviyorum. Hem listesi okunakl\u0131 olur, hem de sorun \u00e7\u0131kt\u0131\u011f\u0131nda geri d\u00f6nmek i\u00e7in net bir i\u015faretiniz olur. Eski s\u00fcr\u00fcmleri belirli bir say\u0131da tutmak ve d\u00fczenli temizlemek, disk alan\u0131n\u0131 sa\u011fl\u0131kl\u0131 y\u00f6netmenin k\u00fc\u00e7\u00fck ama etkili bir yoludur.<\/p>\n<h3><span id=\"Nginx_ve_FPMe_Kibarca_Haber_Vermek\">Nginx ve FPM\u2019e Kibarca Haber Vermek<\/span><\/h3>\n<p>\u0130\u015faret yeni s\u00fcr\u00fcme d\u00f6nd\u00fc\u011f\u00fcnde, Nginx\u2019e &#8220;konfig\u00fcrasyonu bir daha oku&#8221; demek ve PHP\u2011FPM\u2019e &#8220;yeni dosyalar\u0131 fark et&#8221; demek \u00e7o\u011fu zaman yeter. Sert durdur-ba\u015flat yerine yeniden y\u00fckleme kulland\u0131\u011f\u0131m\u0131zda aktif ba\u011flant\u0131lar d\u00fc\u015fmeden hayat devam eder. Bu, s\u0131f\u0131r kesinti yakla\u015f\u0131m\u0131n\u0131n en tatl\u0131 taraf\u0131d\u0131r. D\u0131\u015far\u0131da kimse de\u011fi\u015fimi fark etmez, i\u00e7eride ise her \u015fey yerli yerine oturur.<\/p>\n<p>Bu s\u0131rada ufak bir al\u0131\u015fkanl\u0131k daha: Horizon\u2019u da da\u011f\u0131t\u0131m\u0131n sonunda nazik\u00e7e yeniden ba\u015flatmak. B\u00f6ylece yeni i\u015f tan\u0131mlar\u0131n\u0131, yeni kuyruk isimlerini hemen g\u00f6r\u00fcr ve ak\u0131\u015f devam eder. Ziyaret\u00e7inin g\u00f6z\u00fcnde tek bir titreme bile olmaz.<\/p>\n<h2 id=\"section-8\"><span id=\"Gercek_Hayatin_Kucuk_Koseleri_Sorun_Ciktiysa_Geri_Donus_ve_Iyilestirme\">Ger\u00e7ek Hayat\u0131n K\u00fc\u00e7\u00fck K\u00f6\u015feleri: Sorun \u00c7\u0131kt\u0131ysa Geri D\u00f6n\u00fc\u015f ve \u0130yile\u015ftirme<\/span><\/h2>\n<h3><span id=\"Geri_Alma_Plani_Rollback_Olmadan_Dagitim_Dagitim_Degildir\">Geri Alma Plan\u0131 (Rollback) Olmadan Da\u011f\u0131t\u0131m, Da\u011f\u0131t\u0131m De\u011fildir<\/span><\/h3>\n<p>Ne kadar dikkat ederseniz edin, ger\u00e7ek hayatta s\u00fcrprizler olur. Bu y\u00fczden geri alma plan\u0131 da\u011f\u0131t\u0131m\u0131n ayr\u0131lmaz par\u00e7as\u0131d\u0131r. \u0130yi haber \u015fu: Sembolik i\u015faret y\u00f6ntemiyle bu plan zahmetsizdir. Yeni s\u00fcr\u00fcmde istenmeyen bir davran\u0131\u015f g\u00f6r\u00fcrseniz, yaln\u0131zca i\u015fareti bir \u00f6nceki s\u00fcr\u00fcme d\u00f6nd\u00fcr\u00fcp Nginx ve FPM\u2019e yeniden y\u00fckleme yapt\u0131r\u0131rs\u0131n\u0131z. G\u00fcnl\u00fckler daha sonra anlat\u0131r ne oldu\u011funu; o anda \u00f6nemli olan ziyaret\u00e7iyi rahat ettirmektir.<\/p>\n<p>Bir keresinde yaln\u0131zca \u00f6nbellek anahtarlar\u0131nda ufak bir \u00e7ak\u0131\u015fma, canl\u0131da beklenmedik bir g\u00f6z yan\u0131lsamas\u0131 yaratm\u0131\u015ft\u0131. Kod do\u011fruydu, ama eski \u00f6nbellek yeni yap\u0131yla kar\u0131\u015f\u0131yordu. Geri ald\u0131m, \u00f6nbellek stratejisini d\u00fczelttim, sonra tekrar yay\u0131mlad\u0131m. E\u011fer geri alma imk\u00e2n\u0131m olmasayd\u0131, gecenin kalan\u0131n\u0131 panikle ge\u00e7irirdim.<\/p>\n<h3><span id=\"Belirtileri_Okumak_Yavaslik_mi_Ziplamalar_mi\">Belirtileri Okumak: Yava\u015fl\u0131k m\u0131, Z\u0131plamalar m\u0131?<\/span><\/h3>\n<p>G\u00f6zlem ara\u00e7lar\u0131 bazen \u015fiir gibi konu\u015fur. CPU uzun s\u00fcre y\u00fcksek ama istek say\u0131s\u0131 normalse, akl\u0131ma a\u011f\u0131r bir kuyruk i\u015fi geliyor. Bellek birden z\u0131pl\u0131yor ve duruluyorsa, b\u00fcy\u00fck bir resim i\u015fleme ya da rapor \u00fcretimi olabilir. Zaman zaman ufak donmalar hissediliyorsa, veritaban\u0131nda kilitlenmeler ya da d\u0131\u015f servis beklemeleri masaya gelir. Bu belirtileri okumay\u0131 \u00f6\u011frendik\u00e7e, sorunlara yakla\u015fma s\u00fcreniz k\u0131sal\u0131r ve \u00f6zg\u00fcven artar. \u0130\u015fte t\u00fcm bu nedenlerle izleme ve alarm, da\u011f\u0131t\u0131m kadar \u00f6nemlidir.<\/p>\n<h2 id=\"section-9\"><span id=\"Laravelin_Kendi_Araclariyla_Sik_Dokunuslar\">Laravel\u2019in Kendi Ara\u00e7lar\u0131yla \u015e\u0131k Dokunu\u015flar<\/span><\/h2>\n<h3><span id=\"Resmi_Rehberlere_Minik_Ziyaret\">Resmi Rehberlere Minik Ziyaret<\/span><\/h3>\n<p>Altyap\u0131y\u0131 kurduk, al\u0131\u015fkanl\u0131klar\u0131 konu\u015ftuk. Bir de \u00e7er\u00e7evenin kendi \u00f6nerilerine g\u00f6z k\u0131rpmak iyi olur. Resmi <a href=\"https:\/\/laravel.com\/docs\/deployment\" rel=\"nofollow noopener\" target=\"_blank\">Laravel da\u011f\u0131t\u0131m rehberi<\/a>, \u00f6nbellekleri derlemek, uygulamay\u0131 \u00fcretim moduna almak ve bak\u0131m modunu y\u00f6netmek gibi temel ba\u015fl\u0131klarda net bir \u00e7er\u00e7eve veriyor. Oradaki \u00f6nerileri kendi s\u0131f\u0131r kesinti plan\u0131n\u0131za eklemek, g\u00fc\u00e7l\u00fc ve tutarl\u0131 bir yol a\u00e7ar.<\/p>\n<p>Bir ba\u015fka ho\u015f detay da \u015fu: Laravel\u2019in komutlar\u0131 \u00e7o\u011fu zaman da\u011f\u0131t\u0131m ad\u0131mlar\u0131n\u0131z\u0131 \u00f6ng\u00f6r\u00fcr \u015fekilde tasarlanm\u0131\u015ft\u0131r. \u00d6nce env\u2019i haz\u0131rlamak, sonra cache\u2019leri \u0131s\u0131tmak ve en sonda gelen trafi\u011fi yeni s\u00fcr\u00fcme \u00e7evirmek\u2026 Kula\u011fa masals\u0131 gelse de, pratikte ger\u00e7ekten b\u00f6yle ak\u0131yor.<\/p>\n<h2 id=\"section-10\"><span id=\"Ekstra_Notlar_Trafik_Kaynaklar_ve_Buyume_Sevincine_Hazirlik\">Ekstra Notlar: Trafik, Kaynaklar ve B\u00fcy\u00fcme Sevincine Haz\u0131rl\u0131k<\/span><\/h2>\n<h3><span id=\"Kaynak_Secimi_ve_Ufak_Surprizler\">Kaynak Se\u00e7imi ve Ufak S\u00fcrprizler<\/span><\/h3>\n<p>VPS se\u00e7erken CPU ve RAM\u2019in yan\u0131nda disk t\u00fcr\u00fc ve a\u011f trafi\u011fi de \u00f6nemli. \u00d6zellikle dosya yazma-okuma yo\u011fun uygulamalarda disk performans\u0131 hissedilir bir fark yarat\u0131r. Diski h\u0131zl\u0131 bir altyap\u0131yla destekledi\u011finizde, kuyruk i\u015fleriniz, g\u00fcnl\u00fckleriniz ve \u00f6nbellek hareketleriniz daha ak\u0131c\u0131 olur. Uygulamay\u0131 yay\u0131nlad\u0131ktan sonra \u201cniye zaman zaman bo\u015f alan azal\u0131yor\u201d s\u00fcrprizi ya\u015famamak i\u00e7in eski s\u00fcr\u00fcmleri d\u00fczenli temizlemek ve g\u00fcnl\u00fck rotasyonlar\u0131n\u0131 do\u011fru ayarlamak iyi bir al\u0131\u015fkanl\u0131kt\u0131r.<\/p>\n<p>Uygulaman b\u00fcy\u00fcrken izleme panelleri ve alarm kurallar\u0131 da seninle b\u00fcy\u00fcs\u00fcn. D\u00fcn \u00f6nemsiz olan bir e\u015fik, yar\u0131n kritik olabilir. \u0130\u015fte tam burada, <a href=\"https:\/\/www.dchost.com\/blog\/vps-izleme-ve-uyari-nasil-kurulur-prometheus-grafana-ve-node-exporter-ile-sessiz-alarmlari-konusturmak\/\">VPS izleme ve uyar\u0131 i\u00e7in sessiz alarmlar\u0131 konu\u015fturan rehber<\/a> kafan\u0131 toplamana yard\u0131m eder; hangi metriklere bakmal\u0131, hangilerine alarm kurmal\u0131 gibi sorular g\u00fcn gibi belirir.<\/p>\n<h2 id=\"section-11\"><span id=\"Kapanis_Sakin_Esnek_ve_Guvenli_Bir_Yayin_Duzeni_Mumkun\">Kapan\u0131\u015f: Sakin, Esnek ve G\u00fcvenli Bir Yay\u0131n D\u00fczeni M\u00fcmk\u00fcn<\/span><\/h2>\n<h3><span id=\"Toparlayalim_ve_Bir_Sonraki_Dagitimda_Neler_Yapacagiz\">Toparlayal\u0131m ve Bir Sonraki Da\u011f\u0131t\u0131mda Neler Yapaca\u011f\u0131z?<\/span><\/h3>\n<p>Bug\u00fcn bir VPS \u00fczerinde Laravel\u2019i yay\u0131mlarken, Nginx ve PHP\u2011FPM\u2019i nazik\u00e7e ayarlay\u0131p, Horizon ile kuyruklar\u0131 sakin tutmay\u0131 ve s\u0131f\u0131r kesinti da\u011f\u0131t\u0131m\u0131 bir al\u0131\u015fkanl\u0131\u011fa d\u00f6n\u00fc\u015ft\u00fcrmeyi konu\u015ftuk. Temel fikir \u015fu: De\u011fi\u015fimi arkada haz\u0131rlay\u0131p, \u00f6ne sadece bir i\u015faretle \u00e7\u0131karmak. Bu y\u00f6nteme bir kez al\u0131\u015f\u0131nca geriye d\u00f6nmek istemiyorsunuz. \u00c7\u00fcnk\u00fc ziyaret\u00e7i beklemiyor, siz de panik yapm\u0131yorsunuz.<\/p>\n<p>Bir sonraki da\u011f\u0131t\u0131m\u0131n i\u00e7in k\u00fc\u00e7\u00fck bir eylem plan\u0131 b\u0131rakay\u0131m. \u00d6nce dizin yap\u0131n\u0131 netle\u015ftir: releases, current ve payla\u015f\u0131ml\u0131 klas\u00f6rler. Sonra Nginx ve FPM\u2019i sert yeniden ba\u015flatmalar yerine yeniden y\u00fcklemelerle y\u00f6netmeyi dene. Horizon\u2019u da\u011f\u0131t\u0131m\u0131n do\u011fal bir ad\u0131m\u0131 haline getir. \u0130yile\u015ftirme taraf\u0131nda ise HTTPS ayarlar\u0131n\u0131 g\u00f6zden ge\u00e7ir, izleme panellerini tak ve yedek plan\u0131n\u0131 basitle\u015ftir. \u0130stersen kaynak ve performans taraf\u0131n\u0131 daha derli toplu ele almak i\u00e7in <a href=\"https:\/\/www.dchost.com\/blog\/laravel-prod-ortam-optimizasyonu-nasil-yapilir-php%E2%80%91fpm-opcache-octane-queue-horizon-ve-redisi-el-ele-calistirmak\/\">\u015fu \u00fcretim optimizasyonu yaz\u0131s\u0131na<\/a> tekrar d\u00f6n\u00fcp kontrol listesi gibi kullanabilirsin.<\/p>\n<p>Umar\u0131m bu rehber yay\u0131n d\u00fczenini g\u00fc\u00e7lendirir ve i\u00e7ini rahatlat\u0131r. Sorular\u0131n, \u00e7ekincelerin ve \u201c\u015furada tak\u0131ld\u0131m, nas\u0131l a\u015far\u0131m\u201d t\u00fcr\u00fcnden k\u00fc\u00e7\u00fck d\u00fc\u011f\u00fcmler hep olur; hepsi normal. Payla\u015f, konu\u015fal\u0131m, \u00e7\u00f6z\u00fcm yolu her zaman var. Bir dahaki yaz\u0131da belki da\u011f\u0131t\u0131m\u0131 bir ad\u0131m daha otomatikle\u015ftirmeyi, belki de loglar\u0131 konu\u015furuz. O zamana kadar sahnen sakin, perden p\u00fcr\u00fczs\u00fcz kals\u0131n.<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>\u0130&ccedil;indekiler1 Ofiste Ba\u015flayan K\u00fc\u00e7\u00fck Bir Deploy Kayg\u0131s\u0131: &#8220;Ya Site 1 Dakika Bile D\u00fc\u015ferse?&#8221;2 VPS\u2019in \u00dczerine \u0130n\u015fa: Alan Ad\u0131, Nginx ve Temiz Bir Yap\u0131 Neden \u0130\u015fin Yar\u0131s\u0131d\u0131r?2.1 Alan Ad\u0131, DNS ve \u0130lk Ad\u0131mlar2.2 Nginx\u2019i Laravel ile Arkada\u015f Etmek2.3 SSL\/HTTPS ve Zarif Yeniden Y\u00fcklemeler3 PHP\u2011FPM\u2019i Nazik\u00e7e Ayarlamak: Sessiz Kahraman3.1 Neden PHP\u2011FPM ve Ne Zaman Tak\u0131l\u0131r?3.2 OPcache ve [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1457,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26],"tags":[],"class_list":["post-1456","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\/1456","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=1456"}],"version-history":[{"count":0,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts\/1456\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/media\/1457"}],"wp:attachment":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/media?parent=1456"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/categories?post=1456"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/tags?post=1456"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}