{"id":33028,"date":"2025-10-28T16:25:50","date_gmt":"2025-10-28T13:25:50","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/laravel-nginx-ubuntu-kurulumu-neden-onemli-lemp-stackin-temelleri-nelerdir\/"},"modified":"2025-10-28T16:25:50","modified_gmt":"2025-10-28T13:25:50","slug":"laravel-nginx-ubuntu-kurulumu-neden-onemli-lemp-stackin-temelleri-nelerdir","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/laravel-nginx-ubuntu-kurulumu-neden-onemli-lemp-stackin-temelleri-nelerdir\/","title":{"rendered":"Laravel Nginx Ubuntu Kurulumu Neden \u00d6nemli? LEMP Stack&#8217;in Temelleri Nelerdir?"},"content":{"rendered":"<p><title>Laravel Nginx Ubuntu Kurulumu: Kapsaml\u0131 LEMP Rehberi<\/title><br \/>\n<body><\/p>\n<p>Web uygulamalar\u0131n\u0131z\u0131n h\u0131zl\u0131, g\u00fcvenli ve \u00f6l\u00e7eklenebilir olmas\u0131n\u0131 m\u0131 istiyorsunuz? Laravel projelerinizi Ubuntu sunucular \u00fczerinde Nginx ile yay\u0131na almak, bu hedeflere ula\u015fman\u0131n en etkili yollar\u0131ndan biridir. Bu rehber, Laravel uygulamalar\u0131n\u0131z\u0131 LEMP (Linux, Nginx, MySQL\/MariaDB, PHP-FPM) y\u0131\u011f\u0131n\u0131 ile Ubuntu \u00fczerine nas\u0131l kuraca\u011f\u0131n\u0131z\u0131 ve yap\u0131land\u0131raca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.<\/p>\n<h2>Laravel Nginx Ubuntu Kurulumu Neden \u00d6nemli? LEMP Stack&#8217;in Temelleri Nelerdir?<\/h2>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn rekabet\u00e7i dijital d\u00fcnyas\u0131nda, web uygulamalar\u0131n\u0131n performans\u0131 ve g\u00fcvenli\u011fi kritik \u00f6neme sahiptir. Kullan\u0131c\u0131lar, yava\u015f y\u00fcklenen veya g\u00fcvenlik a\u00e7\u0131klar\u0131 bar\u0131nd\u0131ran sitelerde kalmak istemezler. \u0130\u015fte tam da bu noktada, Laravel gibi modern bir PHP \u00e7at\u0131s\u0131n\u0131 Nginx gibi y\u00fcksek performansl\u0131 bir web sunucusuyla birle\u015ftirmek, Ubuntu gibi stabil bir i\u015fletim sistemi \u00fczerinde, verimli bir LEMP y\u0131\u011f\u0131n\u0131 olu\u015fturman\u0131n temelini atar.<\/p>\n<p>Peki, LEMP Stack nedir ve neden bu kadar pop\u00fclerdir? LEMP, <strong>L<\/strong>inux i\u015fletim sistemi, <strong>E<\/strong>ngine-X (Nginx) web sunucusu, <strong>M<\/strong>ySQL veya MariaDB veritaban\u0131 ve <strong>P<\/strong>HP-FPM (FastCGI Process Manager) bile\u015fenlerinden olu\u015fan bir yaz\u0131l\u0131m y\u0131\u011f\u0131n\u0131d\u0131r. Bu bile\u015fenlerin her biri, web uygulamalar\u0131n\u0131n sorunsuz \u00e7al\u0131\u015fmas\u0131 i\u00e7in vazge\u00e7ilmezdir. Linux, sunucuya sa\u011flam bir temel sa\u011flarken, Nginx y\u00fcksek e\u015fzamanl\u0131 ba\u011flant\u0131lar\u0131 ve statik dosya sunumunu inan\u0131lmaz bir h\u0131zla y\u00f6netir. MySQL veya MariaDB, uygulaman\u0131z\u0131n verilerini depolarken, PHP-FPM ise PHP kodunuzun Nginx ile etkili bir \u015fekilde ileti\u015fim kurmas\u0131n\u0131 sa\u011flar. Bu kombinasyon, \u00f6zellikle y\u00fcksek trafikli web siteleri ve API&#8217;ler i\u00e7in idealdir, \u00e7\u00fcnk\u00fc kaynak t\u00fcketimini minimize ederken maksimum performans sunar.<\/p>\n<p>Laravel, PHP ekosistemindeki en pop\u00fcler framework&#8217;lerden biridir. Geli\u015ftirici dostu yap\u0131s\u0131, zengin \u00f6zellik setleri ve g\u00fc\u00e7l\u00fc topluluk deste\u011fi sayesinde, modern web uygulamalar\u0131 geli\u015ftirmek i\u00e7in tercih edilen bir ara\u00e7 haline gelmi\u015ftir. Laravel&#8217;in mimarisi, Nginx&#8217;in asenkron ve olay tabanl\u0131 yap\u0131s\u0131yla m\u00fckemmel bir uyum i\u00e7indedir. Nginx, Apache gibi geleneksel web sunucular\u0131na k\u0131yasla daha az kaynak t\u00fcketir ve daha fazla ba\u011flant\u0131y\u0131 ayn\u0131 anda i\u015fleyebilir. Bu, \u00f6zellikle bir e-ticaret sitesi gibi anl\u0131k y\u00fcksek trafik dalgalanmalar\u0131 ya\u015fayan uygulamalar i\u00e7in hayati bir avantajd\u0131r. \u00d6rne\u011fin, b\u00fcy\u00fck bir indirim kampanyas\u0131 s\u0131ras\u0131nda sitenize binlerce kullan\u0131c\u0131 ayn\u0131 anda eri\u015fmek istedi\u011finde, Nginx bu talepleri verimli bir \u015fekilde y\u00f6neterek sitenizin \u00e7\u00f6kmesini engeller.<\/p>\n<p>Ubuntu ise, sunucu taraf\u0131nda en yayg\u0131n kullan\u0131lan Linux da\u011f\u0131t\u0131mlar\u0131ndan biridir. Geni\u015f paket depolar\u0131, g\u00fc\u00e7l\u00fc g\u00fcvenlik \u00f6zellikleri ve b\u00fcy\u00fck bir topluluk deste\u011fi sayesinde, LEMP stack kurulumu i\u00e7in ideal bir platform sunar. Bu kombinasyon, sadece uygulaman\u0131z\u0131n performans\u0131n\u0131 art\u0131rmakla kalmaz, ayn\u0131 zamanda geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinizi de basitle\u015ftirir. G\u00fcvenlik a\u00e7\u0131s\u0131ndan da, Nginx&#8217;in mod\u00fcler yap\u0131s\u0131 ve Ubuntu&#8217;nun d\u00fczenli g\u00fcvenlik g\u00fcncellemeleri, uygulaman\u0131z\u0131 d\u0131\u015f tehditlere kar\u015f\u0131 daha diren\u00e7li hale getirir. Sonu\u00e7 olarak, Laravel projelerinizi Nginx ve Ubuntu \u00fczerinde yap\u0131land\u0131rmak, uzun vadede size hem zaman hem de kaynak tasarrufu sa\u011flayacak stratejik bir karard\u0131r.<\/p>\n<h2>\u00d6n Haz\u0131rl\u0131klar: Ubuntu Sunucunuzu Kuruluma Nas\u0131l Haz\u0131rlars\u0131n\u0131z?<\/h2>\n<p>Laravel uygulaman\u0131z\u0131 LEMP y\u0131\u011f\u0131n\u0131 ile Ubuntu sunucusuna kurmadan \u00f6nce, sunucunuzu do\u011fru \u015fekilde haz\u0131rlaman\u0131z gerekmektedir. Bu ad\u0131m, t\u00fcm kurulum s\u00fcrecinin temelini olu\u015fturur ve ileride kar\u015f\u0131la\u015fabilece\u011finiz potansiyel sorunlar\u0131 minimize eder. \u0130lk olarak, bir Ubuntu sunucusuna (tercihen LTS s\u00fcr\u00fcm\u00fc) sahip oldu\u011funuzu ve SSH eri\u015fim bilgilerinizin elinizde oldu\u011funu varsay\u0131yoruz. \u00c7o\u011fu bulut sa\u011flay\u0131c\u0131s\u0131 (AWS, DigitalOcean, Linode, Vultr vb.) bu t\u00fcr sunucular\u0131 kolayca sa\u011flamaktad\u0131r.<\/p>\n<p>Sunucunuza ilk eri\u015fiminizi SSH \u00fczerinden ger\u00e7ekle\u015ftirin. Bunun i\u00e7in terminalinizi a\u00e7\u0131n ve a\u015fa\u011f\u0131daki komutu kullan\u0131n:<\/p>\n<pre><code>\nssh kullanici_adiniz@sunucu_ip_adresiniz\n<\/code><\/pre>\n<p>\u00d6rne\u011fin, <code>root@192.168.1.100<\/code> gibi bir komutla ba\u011flanabilirsiniz. \u0130lk ba\u011flant\u0131n\u0131zda parolan\u0131z\u0131 girmeniz istenecektir. Ba\u011flant\u0131 kurulduktan sonra, sistem paketlerini g\u00fcncellemek ve y\u00fckseltmek kritik \u00f6neme sahiptir. Bu i\u015flem, mevcut t\u00fcm paketlerin en son s\u00fcr\u00fcmlerine sahip olman\u0131z\u0131 sa\u011flar ve g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 kapat\u0131r:<\/p>\n<pre><code>\nsudo apt update\nsudo apt upgrade -y\n<\/code><\/pre>\n<p>Bu komutlar, paket listelerinizi yeniler ve y\u00fckl\u00fc paketlerinizi y\u00fckseltir. <code>-y<\/code> parametresi, t\u00fcm onay sorular\u0131na otomatik olarak &#8220;evet&#8221; yan\u0131t\u0131 vermenizi sa\u011flar. Ard\u0131ndan, sunucunuzun temel g\u00fcvenli\u011fini sa\u011flamak i\u00e7in bir g\u00fcvenlik duvar\u0131 yap\u0131land\u0131rman\u0131z \u00f6nerilir. Ubuntu&#8217;da varsay\u0131lan olarak UFW (Uncomplicated Firewall) bulunur. UFW&#8217;yi etkinle\u015ftirmeden \u00f6nce, SSH ba\u011flant\u0131n\u0131z\u0131n kesilmemesi i\u00e7in SSH portuna izin vermelisiniz (varsay\u0131lan 22):<\/p>\n<pre><code>\nsudo ufw allow OpenSSH\nsudo ufw enable\nsudo ufw status\n<\/code><\/pre>\n<p>Bu ad\u0131mlar, SSH ba\u011flant\u0131n\u0131z\u0131n g\u00fcvenli\u011fini sa\u011flarken, ayn\u0131 zamanda sunucunuza yetkisiz eri\u015fimi engeller. Daha sonra Nginx ve PHP-FPM i\u00e7in de gerekli portlara (80 ve 443) izin verece\u011fiz. G\u00fcvenlik a\u00e7\u0131s\u0131ndan bir di\u011fer \u00f6nemli ad\u0131m, root kullan\u0131c\u0131s\u0131 yerine sudo yetkilerine sahip yeni bir kullan\u0131c\u0131 olu\u015fturmakt\u0131r. Root kullan\u0131c\u0131s\u0131 ile s\u00fcrekli \u00e7al\u0131\u015fmak riskli olabilir. Yeni bir kullan\u0131c\u0131 olu\u015fturmak ve ona sudo yetkileri vermek i\u00e7in a\u015fa\u011f\u0131daki komutlar\u0131 kullan\u0131n:<\/p>\n<pre><code>\nsudo adduser yeni_kullanici_adiniz\nsudo usermod -aG sudo yeni_kullanici_adiniz\n<\/code><\/pre>\n<p>Yeni kullan\u0131c\u0131 olu\u015fturulduktan sonra, mevcut SSH oturumunuzu kapat\u0131p yeni kullan\u0131c\u0131 ile tekrar giri\u015f yapman\u0131z \u00f6nerilir. Bu, root yetkilerini gerektirmeyen i\u015flemleri daha g\u00fcvenli bir \u015fekilde ger\u00e7ekle\u015ftirmenizi sa\u011flar. Sunucunuzun zaman dilimini ayarlamak da \u00f6nemlidir, \u00f6zellikle log kay\u0131tlar\u0131 ve cron i\u015fleri i\u00e7in tutarl\u0131l\u0131k sa\u011flar:<\/p>\n<pre><code>\nsudo timedatectl set-timezone Europe\/Istanbul\n<\/code><\/pre>\n<p>Bu \u00f6n haz\u0131rl\u0131klar, sunucunuzun stabil, g\u00fcvenli ve Laravel uygulaman\u0131z\u0131 bar\u0131nd\u0131rmaya haz\u0131r olmas\u0131n\u0131 sa\u011flar. G\u00fcvenlik duvar\u0131 kurallar\u0131, g\u00fcncel paketler ve do\u011fru kullan\u0131c\u0131 y\u00f6netimi, ba\u015far\u0131l\u0131 bir da\u011f\u0131t\u0131m\u0131n temel ta\u015flar\u0131d\u0131r. Unutmay\u0131n, iyi bir ba\u015flang\u0131\u00e7, sorunsuz bir s\u00fcre\u00e7 demektir. Bu ad\u0131mlar\u0131 titizlikle takip ederek, LEMP stack kurulumunuz i\u00e7in sa\u011flam bir zemin olu\u015fturmu\u015f olacaks\u0131n\u0131z. \u00d6rne\u011fin, bir \u00f6nceki projemizde, g\u00fcvenlik duvar\u0131n\u0131 do\u011fru yap\u0131land\u0131rmad\u0131\u011f\u0131m\u0131z i\u00e7in d\u0131\u015far\u0131dan gelen gereksiz port taramalar\u0131yla kar\u015f\u0131la\u015fm\u0131\u015ft\u0131k. UFW&#8217;yi ba\u015ftan do\u011fru kurmak, bu t\u00fcr gereksiz y\u00fckleri engellemenin en basit yoludur.<\/p>\n<div class=\"expert-tip\">\n  Uzman \u0130pucu: SSH ba\u011flant\u0131n\u0131z i\u00e7in anahtar tabanl\u0131 kimlik do\u011frulamay\u0131 kullanmak, parola tabanl\u0131 kimlik do\u011frulamadan \u00e7ok daha g\u00fcvenlidir. Bu, sunucuya eri\u015fiminizi art\u0131r\u0131rken, brute-force sald\u0131r\u0131lar\u0131na kar\u015f\u0131 koruma sa\u011flar.\n<\/div>\n<h2>LEMP Stack Kurulumu: Nginx, MySQL ve PHP-FPM Nas\u0131l Kurulur?<\/h2>\n<p>Art\u0131k sunucumuz haz\u0131r oldu\u011funa g\u00f6re, LEMP y\u0131\u011f\u0131n\u0131n\u0131n temel bile\u015fenlerini kurmaya ba\u015flayabiliriz. Bu b\u00f6l\u00fcmde Nginx, MySQL (veya MariaDB) ve PHP-FPM&#8217;in kurulum ad\u0131mlar\u0131n\u0131 ve temel yap\u0131land\u0131rmalar\u0131n\u0131 ele alaca\u011f\u0131z.<\/p>\n<h3>Nginx Kurulumu ve Temel Yap\u0131land\u0131rma<\/h3>\n<p>Nginx, y\u00fcksek performansl\u0131 bir web sunucusudur ve statik i\u00e7erik sunumu ile e\u015fzamanl\u0131 ba\u011flant\u0131 y\u00f6netiminde olduk\u00e7a ba\u015far\u0131l\u0131d\u0131r. Kurulumu olduk\u00e7a basittir:<\/p>\n<pre><code>\nsudo apt install nginx -y\n<\/code><\/pre>\n<p>Kurulum tamamland\u0131ktan sonra, Nginx servisinin \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 do\u011frulamak i\u00e7in a\u015fa\u011f\u0131daki komutu kullanabilirsiniz:<\/p>\n<pre><code>\nsudo systemctl status nginx\n<\/code><\/pre>\n<p>\u00c7\u0131kt\u0131da &#8220;active (running)&#8221; ifadesini g\u00f6rmelisiniz. Ard\u0131ndan, UFW g\u00fcvenlik duvar\u0131nda Nginx&#8217;e izin vermemiz gerekiyor:<\/p>\n<pre><code>\nsudo ufw allow 'Nginx HTTP'\nsudo ufw allow 'Nginx HTTPS' # E\u011fer SSL kullanacaksan\u0131z\nsudo ufw reload\nsudo ufw status\n<\/code><\/pre>\n<p>\u015eimdi sunucunuzun IP adresini web taray\u0131c\u0131n\u0131zda ziyaret etti\u011finizde, Nginx&#8217;in varsay\u0131lan &#8220;Welcome to Nginx!&#8221; sayfas\u0131n\u0131 g\u00f6rmelisiniz. Bu, Nginx&#8217;in do\u011fru \u015fekilde \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6sterir.<\/p>\n<h3>MySQL\/MariaDB Kurulumu ve G\u00fcvenlik Yap\u0131land\u0131rmas\u0131<\/h3>\n<p>Laravel uygulamalar\u0131n\u0131z\u0131n verilerini depolamak i\u00e7in bir veritaban\u0131 sunucusuna ihtiyac\u0131m\u0131z var. MySQL veya MariaDB&#8217;yi tercih edebilirsiniz. MariaDB, MySQL&#8217;in a\u00e7\u0131k kaynakl\u0131 bir \u00e7atal\u0131d\u0131r ve genellikle daha iyi performans ve ek \u00f6zellikler sunar. Kurulum ad\u0131mlar\u0131 benzerdir:<\/p>\n<pre><code>\nsudo apt install mariadb-server -y\n<\/code><\/pre>\n<p>Kurulum tamamland\u0131ktan sonra, veritaban\u0131 sunucunuzun g\u00fcvenli\u011fini sa\u011flamak i\u00e7in bir komut dosyas\u0131 \u00e7al\u0131\u015ft\u0131rman\u0131z \u015fiddetle tavsiye edilir:<\/p>\n<pre><code>\nsudo mysql_secure_installation\n<\/code><\/pre>\n<p>Bu komut, root parolas\u0131n\u0131 ayarlaman\u0131za, anonim kullan\u0131c\u0131lar\u0131 kald\u0131rman\u0131za, uzaktan root giri\u015fini devre d\u0131\u015f\u0131 b\u0131rakman\u0131za ve test veritaban\u0131n\u0131 kald\u0131rman\u0131za olanak tan\u0131r. T\u00fcm sorulara &#8220;Y&#8221; (Evet) yan\u0131t\u0131 vermeniz genellikle en g\u00fcvenli se\u00e7enektir. Bu ad\u0131mlar, veritaban\u0131 sunucunuzu olas\u0131 sald\u0131r\u0131lara kar\u015f\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde korur.<\/p>\n<h3>PHP-FPM Kurulumu ve Yap\u0131land\u0131rmas\u0131<\/h3>\n<p>Laravel, PHP ile yaz\u0131ld\u0131\u011f\u0131 i\u00e7in, PHP&#8217;nin sunucumuzda \u00e7al\u0131\u015f\u0131r durumda olmas\u0131 gerekir. Nginx, PHP kodunu do\u011frudan i\u015fleyemez; bunun yerine PHP-FPM (FastCGI Process Manager) arac\u0131l\u0131\u011f\u0131yla PHP&#8217;yi \u00e7al\u0131\u015ft\u0131r\u0131r. Laravel i\u00e7in genellikle PHP 8.x s\u00fcr\u00fcm\u00fc \u00f6nerilir. Kurulum i\u00e7in:<\/p>\n<pre><code>\nsudo apt install php8.2-fpm php8.2-mysql php8.2-mbstring php8.2-xml php8.2-bcmath php8.2-zip php8.2-gd php8.2-curl -y\n<\/code><\/pre>\n<p>Bu komut, PHP-FPM&#8217;i ve Laravel i\u00e7in gerekli olan yayg\u0131n PHP uzant\u0131lar\u0131n\u0131 kurar. Kurulumdan sonra PHP-FPM servisinin \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 kontrol edin:<\/p>\n<pre><code>\nsudo systemctl status php8.2-fpm\n<\/code><\/pre>\n<p>Gerekirse, PHP-FPM yap\u0131land\u0131rma dosyas\u0131n\u0131 (\u00f6rne\u011fin <code>\/etc\/php\/8.2\/fpm\/php.ini<\/code>) d\u00fczenleyerek <code>upload_max_filesize<\/code>, <code>post_max_size<\/code> ve <code>memory_limit<\/code> gibi de\u011ferleri uygulaman\u0131z\u0131n ihtiya\u00e7lar\u0131na g\u00f6re ayarlayabilirsiniz. De\u011fi\u015fikliklerden sonra PHP-FPM&#8217;i yeniden ba\u015flatmay\u0131 unutmay\u0131n:<\/p>\n<pre><code>\nsudo systemctl restart php8.2-fpm\n<\/code><\/pre>\n<h3>Composer Kurulumu<\/h3>\n<p>Composer, PHP ba\u011f\u0131ml\u0131l\u0131k y\u00f6neticisidir ve Laravel projeleri i\u00e7in olmazsa olmazd\u0131r. Kurulum i\u00e7in:<\/p>\n<pre><code>\ncurl -sS https:\/\/getcomposer.org\/installer | php\nsudo mv composer.phar \/usr\/local\/bin\/composer\n<\/code><\/pre>\n<p>Bu komutlar Composer&#8217;\u0131 indirir ve sistem genelinde eri\u015filebilir hale getirir. Composer&#8217;\u0131n do\u011fru kuruldu\u011funu <code>composer -V<\/code> komutu ile do\u011frulayabilirsiniz. Bu ad\u0131mlar\u0131 tamamlad\u0131ktan sonra, LEMP y\u0131\u011f\u0131n\u0131n\u0131z Laravel uygulaman\u0131z\u0131 bar\u0131nd\u0131rmaya haz\u0131r hale gelmi\u015f olacakt\u0131r. Bu temel bile\u015fenlerin do\u011fru \u015fekilde kurulmas\u0131 ve yap\u0131land\u0131r\u0131lmas\u0131, uygulaman\u0131z\u0131n performans\u0131 ve g\u00fcvenli\u011fi i\u00e7in kritik \u00f6neme sahiptir. \u00d6rne\u011fin, bir \u00f6nceki projede PHP-FPM&#8217;in yanl\u0131\u015f yap\u0131land\u0131r\u0131lmas\u0131, Laravel uygulamas\u0131n\u0131n 502 Bad Gateway hatas\u0131 vermesine neden olmu\u015ftu. Bu nedenle, her bir bile\u015fenin durumunu kontrol etmek ve do\u011fru \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olmak hayati \u00f6nem ta\u015f\u0131r.<\/p>\n<h2>Laravel Uygulamas\u0131n\u0131 Sunucuya Y\u00fckleme ve Gerekli \u0130zinleri Ayarlama<\/h2>\n<p>LEMP y\u0131\u011f\u0131n\u0131 ba\u015far\u0131yla kurulduktan sonra, s\u0131ra Laravel uygulaman\u0131z\u0131 sunucuya y\u00fcklemeye ve do\u011fru dosya izinlerini ayarlamaya gelir. Bu ad\u0131m, uygulaman\u0131z\u0131n Nginx ve PHP-FPM taraf\u0131ndan okunabilir ve yaz\u0131labilir olmas\u0131n\u0131 sa\u011flar.<\/p>\n<h3>Laravel Uygulamas\u0131n\u0131 Sunucuya Y\u00fckleme<\/h3>\n<p>Uygulaman\u0131z\u0131 sunucuya y\u00fcklemenin en yayg\u0131n ve \u00f6nerilen yolu Git kullanmakt\u0131r. Bu, hem versiyon kontrol\u00fcn\u00fc sa\u011flar hem de g\u00fcncellemeleri kolayla\u015ft\u0131r\u0131r. \u00d6ncelikle, uygulaman\u0131z\u0131 yerle\u015ftirece\u011finiz bir dizin olu\u015fturun. Genellikle <code>\/var\/www\/<\/code> dizini tercih edilir:<\/p>\n<pre><code>\nsudo mkdir -p \/var\/www\/your_laravel_app\nsudo chown -R $USER:$USER \/var\/www\/your_laravel_app # Ge\u00e7ici olarak kendi kullan\u0131c\u0131n\u0131za izin verin\ncd \/var\/www\/your_laravel_app\n<\/code><\/pre>\n<p>\u015eimdi Laravel projenizi GitHub, GitLab veya Bitbucket gibi bir depodan klonlay\u0131n. E\u011fer projeniz \u00f6zel (private) ise, SSH anahtar\u0131 ile kimlik do\u011frulamay\u0131 yap\u0131land\u0131rman\u0131z gerekebilir. Genel bir \u00f6rnek:<\/p>\n<pre><code>\ngit clone https:\/\/github.com\/your-username\/your-laravel-app.git .\n<\/code><\/pre>\n<p><code>.<\/code> (nokta) i\u015fareti, projeyi mevcut dizine klonlar. Klonlama i\u015flemi tamamland\u0131ktan sonra, projenizin ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 Composer arac\u0131l\u0131\u011f\u0131yla y\u00fcklemeniz gerekir:<\/p>\n<pre><code>\ncomposer install --no-dev --optimize-autoloader\n<\/code><\/pre>\n<p><code>--no-dev<\/code> parametresi, sadece \u00fcretim ortam\u0131nda gerekli olan ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00fcklerken, <code>--optimize-autoloader<\/code> ise Composer&#8217;\u0131n otomatik y\u00fckleme haritas\u0131n\u0131 optimize ederek performans\u0131 art\u0131r\u0131r. Bu i\u015flem biraz zaman alabilir.<\/p>\n<h3><code>.env<\/code> Dosyas\u0131n\u0131 Yap\u0131land\u0131rma<\/h3>\n<p>Laravel uygulamalar\u0131, \u00e7evre de\u011fi\u015fkenlerini y\u00f6netmek i\u00e7in <code>.env<\/code> dosyas\u0131n\u0131 kullan\u0131r. Bu dosya, veritaban\u0131 ba\u011flant\u0131 bilgileri, uygulama anahtar\u0131, e-posta ayarlar\u0131 gibi hassas bilgileri i\u00e7erir. \u00d6nce \u00f6rnek dosyay\u0131 kopyalay\u0131n:<\/p>\n<pre><code>\ncp .env.example .env\n<\/code><\/pre>\n<p>Ard\u0131ndan, <code>.env<\/code> dosyas\u0131n\u0131 bir metin d\u00fczenleyici ile a\u00e7\u0131n (\u00f6rne\u011fin <code>nano .env<\/code>) ve a\u015fa\u011f\u0131daki gibi gerekli d\u00fczenlemeleri yap\u0131n:<\/p>\n<pre><code>\nAPP_NAME=YourLaravelApp\nAPP_ENV=production\nAPP_KEY= # Buraya uygulama anahtar\u0131n\u0131z\u0131 ekleyece\u011fiz\nAPP_DEBUG=false\nAPP_URL=http:\/\/yourdomain.com\n\nDB_CONNECTION=mysql\nDB_HOST=127.0.0.1\nDB_PORT=3306\nDB_DATABASE=your_database_name\nDB_USERNAME=your_database_user\nDB_PASSWORD=your_database_password\n<\/code><\/pre>\n<p><code>APP_KEY<\/code> de\u011ferini olu\u015fturmak i\u00e7in a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code>\nphp artisan key:generate\n<\/code><\/pre>\n<p>Bu komut, <code>.env<\/code> dosyan\u0131za benzersiz bir uygulama anahtar\u0131 ekleyecektir. Bu anahtar, oturumlar ve \u015fifreleme i\u00e7in kullan\u0131l\u0131r ve kesinlikle gizli tutulmal\u0131d\u0131r.<\/p>\n<h3>Depolama ve \u00d6nbellek Klas\u00f6rlerine Yazma \u0130zinleri<\/h3>\n<p>Laravel, <code>storage<\/code> ve <code>bootstrap\/cache<\/code> dizinlerine yazma iznine ihtiya\u00e7 duyar. Bu dizinlere do\u011fru izinleri vermemek, uygulaman\u0131z\u0131n hatalar vermesine neden olur. Bu izinleri, Nginx&#8217;in ve PHP-FPM&#8217;in \u00e7al\u0131\u015ft\u0131\u011f\u0131 kullan\u0131c\u0131ya (genellikle <code>www-data<\/code>) vermemiz gerekir:<\/p>\n<pre><code>\nsudo chown -R www-data:www-data \/var\/www\/your_laravel_app\nsudo chmod -R 775 \/var\/www\/your_laravel_app\/storage\nsudo chmod -R 775 \/var\/www\/your_laravel_app\/bootstrap\/cache\n<\/code><\/pre>\n<p>Bu komutlar, projenizin t\u00fcm sahipli\u011fini <code>www-data<\/code> kullan\u0131c\u0131s\u0131na ve grubuna atar. Ard\u0131ndan, <code>storage<\/code> ve <code>bootstrap\/cache<\/code> dizinlerine grup ve di\u011fer kullan\u0131c\u0131lar i\u00e7in yazma ve y\u00fcr\u00fctme izinleri verir. E\u011fer uygulaman\u0131z\u0131n <code>public<\/code> dizinindeki dosyalar da <code>www-data<\/code> taraf\u0131ndan de\u011fi\u015ftirilecekse, benzer \u015fekilde izinleri d\u00fczenlemeniz gerekebilir. Ancak genellikle <code>public<\/code> dizini sadece okunabilir olmal\u0131d\u0131r. Bu ad\u0131mlar, Laravel uygulaman\u0131z\u0131n sunucuda d\u00fczg\u00fcn bir \u015fekilde \u00e7al\u0131\u015fmas\u0131 i\u00e7in temel gereksinimlerdir. Yanl\u0131\u015f izinler, uygulaman\u0131z\u0131n hata vermesine veya hi\u00e7 \u00e7al\u0131\u015fmamas\u0131na neden olabilir. \u00d6rne\u011fin, bir \u00f6nceki da\u011f\u0131t\u0131mda <code>storage<\/code> klas\u00f6r\u00fcne yazma izni verilmedi\u011fi i\u00e7in, kullan\u0131c\u0131lar\u0131n y\u00fckledi\u011fi resimler kaydedilememi\u015f ve bu da kritik bir i\u015flevsellik hatas\u0131na yol a\u00e7m\u0131\u015ft\u0131. Bu nedenle, izinleri do\u011fru ayarlamak kritik \u00f6neme sahiptir.<\/p>\n<div class=\"expert-tip\">\n  Uzman \u0130pucu: G\u00fcvenlik i\u00e7in, <code>.env<\/code> dosyan\u0131z\u0131 Git deposuna eklemeyin. Bunun yerine, <code>.gitignore<\/code> dosyas\u0131na ekleyerek hassas bilgilerin yanl\u0131\u015fl\u0131kla herkese a\u00e7\u0131k hale gelmesini engelleyin. Sunucuda manuel olarak yap\u0131land\u0131r\u0131n.\n<\/div>\n<h2>Nginx Sanal Host Yap\u0131land\u0131rmas\u0131: Laravel Uygulaman\u0131z\u0131 Nas\u0131l Yay\u0131nlars\u0131n\u0131z?<\/h2>\n<p>Laravel uygulaman\u0131z\u0131 sunucuya y\u00fckledik ve gerekli izinleri ayarlad\u0131k. \u015eimdi Nginx&#8217;i, gelen web isteklerini Laravel uygulaman\u0131z\u0131n <code>public<\/code> dizinine y\u00f6nlendirecek \u015fekilde yap\u0131land\u0131rmam\u0131z gerekiyor. Bu i\u015flem, Nginx&#8217;te bir &#8220;sanal host&#8221; veya &#8220;server block&#8221; olu\u015fturarak yap\u0131l\u0131r.<\/p>\n<h3>Yeni Bir Nginx Yap\u0131land\u0131rma Dosyas\u0131 Olu\u015fturma<\/h3>\n<p>Nginx yap\u0131land\u0131rma dosyalar\u0131 genellikle <code>\/etc\/nginx\/sites-available\/<\/code> dizininde bulunur. Yeni bir yap\u0131land\u0131rma dosyas\u0131 olu\u015fturmak i\u00e7in a\u015fa\u011f\u0131daki komutu kullan\u0131n (\u00f6rne\u011fin <code>yourdomain.com.conf<\/code> ad\u0131nda):<\/p>\n<pre><code>\nsudo nano \/etc\/nginx\/sites-available\/yourdomain.com.conf\n<\/code><\/pre>\n<p>Bu dosyay\u0131 a\u00e7t\u0131ktan sonra, i\u00e7ine a\u015fa\u011f\u0131daki temel Laravel Nginx yap\u0131land\u0131rmas\u0131n\u0131 yap\u0131\u015ft\u0131r\u0131n. Bu yap\u0131land\u0131rma, gelen HTTP isteklerini dinler, uygulaman\u0131z\u0131n k\u00f6k dizinini belirtir ve PHP-FPM ile ileti\u015fimi kurar:<\/p>\n<pre><code>\nserver {\n    listen 80;\n    listen [::]:80;\n    server_name yourdomain.com www.yourdomain.com;\n    root \/var\/www\/your_laravel_app\/public;\n\n    add_header X-Frame-Options \"SAMEORIGIN\";\n    add_header X-XSS-Protection \"1; mode=block\";\n    add_header X-Content-Type-Options \"nosniff\";\n    add_header Referrer-Policy \"no-referrer-when-downgrade\";\n    add_header Content-Security-Policy \"default-src 'self' data: 'unsafe-inline' 'unsafe-eval' yourdomain.com; img-src 'self' data: https:; font-src 'self' data:; style-src 'self' 'unsafe-inline' https:; script-src 'self' 'unsafe-inline' 'unsafe-eval' https:;\"; # \u00d6rnek CSP, uygulaman\u0131za g\u00f6re \u00f6zelle\u015ftirin\n\n    index index.php index.html index.htm;\n\n    charset utf-8;\n\n    location \/ {\n        try_files $uri $uri\/ \/index.php?$query_string;\n    }\n\n    location = \/favicon.ico { access_log off; log_not_found off; }\n    location = \/robots.txt  { access_log off; log_not_found off; }\n\n    error_page 404 \/index.php;\n\n    location ~ \\.php$ {\n        fastcgi_pass unix:\/var\/run\/php\/php8.2-fpm.sock; # PHP-FPM s\u00fcr\u00fcm\u00fcn\u00fcze g\u00f6re g\u00fcncelleyin\n        fastcgi_index index.php;\n        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;\n        include fastcgi_params;\n    }\n\n    location ~ \/\\.(?!well-known).* {\n        deny all;\n    }\n}\n<\/code><\/pre>\n<p>Bu yap\u0131land\u0131rma dosyas\u0131ndaki \u00f6nemli noktalar \u015funlard\u0131r:<\/p>\n<ul>\n<li><code>listen 80;<\/code>: Nginx&#8217;in HTTP isteklerini 80 numaral\u0131 porttan dinlemesini sa\u011flar.<\/li>\n<li><code>server_name yourdomain.com www.yourdomain.com;<\/code>: Uygulaman\u0131z\u0131n eri\u015filece\u011fi alan adlar\u0131n\u0131 belirtir. Kendi alan adlar\u0131n\u0131zla de\u011fi\u015ftirmeyi unutmay\u0131n.<\/li>\n<li><code>root \/var\/www\/your_laravel_app\/public;<\/code>: Laravel uygulaman\u0131z\u0131n <code>public<\/code> dizininin yolunu g\u00f6sterir. Nginx, t\u00fcm web isteklerini bu dizinden sunacakt\u0131r.<\/li>\n<li><code>location \/ { try_files $uri $uri\/ \/index.php?$query_string; }<\/code>: Bu kural, Nginx&#8217;in bir dosyay\u0131 veya dizini bulamazsa iste\u011fi Laravel&#8217;in <code>index.php<\/code> dosyas\u0131na y\u00f6nlendirmesini sa\u011flar. Bu, Laravel&#8217;in y\u00f6nlendirme mekanizmas\u0131n\u0131n \u00e7al\u0131\u015fmas\u0131 i\u00e7in kritik \u00f6neme sahiptir.<\/li>\n<li><code>location ~ \\.php$ { ... }<\/code>: Bu blok, PHP dosyalar\u0131na gelen istekleri PHP-FPM&#8217;e iletir. <code>fastcgi_pass unix:\/var\/run\/php\/php8.2-fpm.sock;<\/code> sat\u0131r\u0131ndaki PHP s\u00fcr\u00fcm\u00fcn\u00fcn, sunucunuzda kurulu olan PHP-FPM s\u00fcr\u00fcm\u00fcyle (\u00f6rne\u011fin <code>php8.2-fpm<\/code>) e\u015fle\u015fti\u011finden emin olun.<\/li>\n<li><code>add_header ...<\/code>: Bu sat\u0131rlar, taray\u0131c\u0131ya ek g\u00fcvenlik ba\u015fl\u0131klar\u0131 g\u00f6ndererek sitenizin g\u00fcvenli\u011fini art\u0131r\u0131r. \u00d6zellikle <code>Content-Security-Policy<\/code> (CSP) dikkatli ayarlanmal\u0131d\u0131r, aksi takdirde uygulaman\u0131zda sorunlara yol a\u00e7abilir.<\/li>\n<\/ul>\n<h3>Siteyi Etkinle\u015ftirme ve Nginx&#8217;i Yeniden Ba\u015flatma<\/h3>\n<p>Yap\u0131land\u0131rma dosyas\u0131n\u0131 kaydettikten sonra, Nginx&#8217;in bu sanal host dosyas\u0131n\u0131 tan\u0131mas\u0131 i\u00e7in <code>sites-enabled<\/code> dizinine bir sembolik ba\u011f (symlink) olu\u015fturman\u0131z gerekir:<\/p>\n<pre><code>\nsudo ln -s \/etc\/nginx\/sites-available\/yourdomain.com.conf \/etc\/nginx\/sites-enabled\/\n<\/code><\/pre>\n<p>\u015eimdi Nginx yap\u0131land\u0131rman\u0131zda herhangi bir s\u00f6zdizimi hatas\u0131 olup olmad\u0131\u011f\u0131n\u0131 kontrol edin:<\/p>\n<pre><code>\nsudo nginx -t\n<\/code><\/pre>\n<p>E\u011fer &#8220;test is successful&#8221; mesaj\u0131n\u0131 g\u00f6r\u00fcrseniz, her \u015fey yolundad\u0131r. Son olarak, Nginx&#8217;i yeniden ba\u015flatarak yeni yap\u0131land\u0131rmay\u0131 uygulay\u0131n:<\/p>\n<pre><code>\nsudo systemctl restart nginx\n<\/code><\/pre>\n<p>UFW g\u00fcvenlik duvar\u0131nda HTTP ve HTTPS portlar\u0131na izin verdi\u011finizden emin olun:<\/p>\n<pre><code>\nsudo ufw allow 'Nginx Full'\nsudo ufw reload\n<\/code><\/pre>\n<p>Art\u0131k alan ad\u0131n\u0131z\u0131 (\u00f6rne\u011fin <code>http:\/\/yourdomain.com<\/code>) web taray\u0131c\u0131n\u0131zda ziyaret etti\u011finizde, Laravel uygulaman\u0131z\u0131n ana sayfas\u0131n\u0131 g\u00f6rmelisiniz. E\u011fer bir sorunla kar\u015f\u0131la\u015f\u0131rsan\u0131z, Nginx hata g\u00fcnl\u00fcklerini (<code>\/var\/log\/nginx\/error.log<\/code>) ve PHP-FPM hata g\u00fcnl\u00fcklerini (genellikle <code>\/var\/log\/php8.2-fpm.log<\/code> veya PHP-FPM yap\u0131land\u0131rmas\u0131na g\u00f6re farkl\u0131 bir yer) kontrol edin. \u00d6rne\u011fin, bir keresinde <code>root<\/code> dizinini yanl\u0131\u015f belirtmi\u015ftim ve Nginx 404 hatas\u0131 veriyordu. Loglar\u0131 kontrol ederek hatay\u0131 h\u0131zl\u0131ca bulup d\u00fczeltebildim. Bu ad\u0131mlar, Laravel uygulaman\u0131z\u0131 Nginx \u00fczerinde ba\u015far\u0131yla yay\u0131nlamak i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<h2>Veritaban\u0131 ve \u00c7evre Ayarlar\u0131: Laravel Uygulaman\u0131z\u0131 Nas\u0131l G\u00fcvenli Hale Getirirsiniz?<\/h2>\n<p>Laravel uygulaman\u0131z\u0131n sunucuda \u00e7al\u0131\u015f\u0131r duruma gelmesi i\u00e7in veritaban\u0131 ba\u011flant\u0131s\u0131n\u0131n do\u011fru yap\u0131land\u0131r\u0131lmas\u0131 ve \u00e7evre de\u011fi\u015fkenlerinin g\u00fcvenli bir \u015fekilde y\u00f6netilmesi hayati \u00f6neme sahiptir. Ayr\u0131ca, uygulaman\u0131z\u0131n performans\u0131n\u0131 ve g\u00fcvenli\u011fini art\u0131rmak i\u00e7in baz\u0131 ek ayarlamalar yapabiliriz.<\/p>\n<h3>MySQL\/MariaDB Veritaban\u0131 ve Kullan\u0131c\u0131 Olu\u015fturma<\/h3>\n<p>Laravel uygulaman\u0131z\u0131n verilerini depolayabilmesi i\u00e7in bir veritaban\u0131na ve bu veritaban\u0131na eri\u015febilecek bir kullan\u0131c\u0131ya ihtiyac\u0131 vard\u0131r. Daha \u00f6nce MySQL\/MariaDB kurulumunu yapm\u0131\u015ft\u0131k. \u015eimdi bir veritaban\u0131 ve kullan\u0131c\u0131 olu\u015ftural\u0131m:<\/p>\n<pre><code>\nsudo mysql -u root -p\n<\/code><\/pre>\n<p>Parolan\u0131z\u0131 girdikten sonra MySQL komut istemine d\u00fc\u015feceksiniz. A\u015fa\u011f\u0131daki komutlar\u0131 kullanarak yeni bir veritaban\u0131 ve kullan\u0131c\u0131 olu\u015fturun ve bu kullan\u0131c\u0131ya veritaban\u0131 \u00fczerinde t\u00fcm yetkileri verin. <code>your_database_name<\/code>, <code>your_database_user<\/code> ve <code>your_database_password<\/code> k\u0131s\u0131mlar\u0131n\u0131 kendi de\u011ferlerinizle de\u011fi\u015ftirmeyi unutmay\u0131n:<\/p>\n<pre><code>\nCREATE DATABASE your_database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\nCREATE USER 'your_database_user'@'localhost' IDENTIFIED BY 'your_database_password';\nGRANT ALL PRIVILEGES ON your_database_name.* TO 'your_database_user'@'localhost';\nFLUSH PRIVILEGES;\nEXIT;\n<\/code><\/pre>\n<p>Bu ad\u0131mlar, Laravel uygulaman\u0131z\u0131n veritaban\u0131na g\u00fcvenli bir \u015fekilde ba\u011flanmas\u0131n\u0131 sa\u011flar. Daha sonra <code>.env<\/code> dosyas\u0131ndaki veritaban\u0131 ayarlar\u0131n\u0131 bu bilgilerle g\u00fcncelledi\u011finizden emin olun.<\/p>\n<h3>Laravel Migrasyonlar\u0131n\u0131 \u00c7al\u0131\u015ft\u0131rma<\/h3>\n<p>Veritaban\u0131 ve kullan\u0131c\u0131 olu\u015fturulduktan sonra, Laravel migrasyonlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rarak veritaban\u0131 \u015femas\u0131n\u0131 olu\u015fturabilirsiniz:<\/p>\n<pre><code>\ncd \/var\/www\/your_laravel_app\nphp artisan migrate --force\n<\/code><\/pre>\n<p><code>--force<\/code> parametresi, \u00fcretim ortam\u0131nda migrasyonlar\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in gereklidir. Ayr\u0131ca, e\u011fer uygulaman\u0131zda ba\u015flang\u0131\u00e7 verileri (seeders) varsa, bunlar\u0131 da \u00e7al\u0131\u015ft\u0131rabilirsiniz:<\/p>\n<pre><code>\nphp artisan db:seed --force\n<\/code><\/pre>\n<h3>\u00d6nbellekleme (Caching) ve Kuyruk (Queue) Yap\u0131land\u0131rmas\u0131<\/h3>\n<p>Laravel, performans\u0131 art\u0131rmak i\u00e7in g\u00fc\u00e7l\u00fc \u00f6nbellekleme ve kuyruk sistemlerine sahiptir. \u00dcretim ortam\u0131nda genellikle dosya tabanl\u0131 \u00f6nbellekleme yerine Redis veya Memcached gibi daha h\u0131zl\u0131 \u00e7\u00f6z\u00fcmler tercih edilir. Redis kurulumu i\u00e7in:<\/p>\n<pre><code>\nsudo apt install redis-server php8.2-redis -y\nsudo systemctl restart php8.2-fpm\n<\/code><\/pre>\n<p>Ard\u0131ndan <code>.env<\/code> dosyan\u0131zda <code>CACHE_DRIVER<\/code> ve <code>QUEUE_CONNECTION<\/code> de\u011ferlerini <code>redis<\/code> olarak de\u011fi\u015ftirebilirsiniz:<\/p>\n<pre><code>\nCACHE_DRIVER=redis\nQUEUE_CONNECTION=redis\n<\/code><\/pre>\n<p>Kuyruklar\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in bir supervisor veya systemd servisi kurman\u0131z ve s\u00fcrekli olarak <code>php artisan queue:work<\/code> komutunu \u00e7al\u0131\u015ft\u0131rman\u0131z gerekir. Bu, uzun s\u00fcren i\u015flemleri (\u00f6rne\u011fin e-posta g\u00f6nderme, resim i\u015fleme) arka planda asenkron olarak y\u00fcr\u00fctmenizi sa\u011flar, b\u00f6ylece web istekleri daha h\u0131zl\u0131 yan\u0131t verir.<\/p>\n<h3>G\u00fcvenlik \u00d6nlemleri<\/h3>\n<p>Uygulaman\u0131z\u0131n g\u00fcvenli\u011fini art\u0131rmak i\u00e7in ek \u00f6nlemler alabilirsiniz:<\/p>\n<ol>\n<li><strong><code>.env<\/code> Dosyas\u0131 G\u00fcvenli\u011fi:<\/strong> <code>.env<\/code> dosyan\u0131z\u0131n web \u00fczerinden eri\u015filemez oldu\u011fundan emin olun. Nginx yap\u0131land\u0131rman\u0131zdaki <code>location ~ \/\\.(?!well-known).* { deny all; }<\/code> kural\u0131 bu t\u00fcr dosyalara eri\u015fimi engeller.<\/li>\n<li><strong>UFW Kurallar\u0131:<\/strong> Sadece gerekli portlara (80, 443, 22) izin verin. Gerekmedik\u00e7e di\u011fer portlar\u0131 a\u00e7\u0131k b\u0131rakmay\u0131n.<\/li>\n<li><strong>SSL Sertifikas\u0131:<\/strong> Let&#8217;s Encrypt gibi \u00fccretsiz bir SSL sertifikas\u0131 kullanarak t\u00fcm trafi\u011fi HTTPS \u00fczerinden \u015fifreleyin. Bu, kullan\u0131c\u0131 verilerinin g\u00fcvenli\u011fini sa\u011flar ve SEO s\u0131ralaman\u0131z\u0131 iyile\u015ftirir.<\/li>\n<li><strong>G\u00fcncel Yaz\u0131l\u0131m:<\/strong> Ubuntu, Nginx, PHP ve Laravel ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131z\u0131 d\u00fczenli olarak g\u00fcncelleyin. Bu, bilinen g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131n kapat\u0131lmas\u0131na yard\u0131mc\u0131 olur.<\/li>\n<\/ol>\n<p>Bir vaka analizi olarak, bir m\u00fc\u015fteri veri taban\u0131n\u0131n yanl\u0131\u015f yap\u0131land\u0131rma sonucu (\u00f6rne\u011fin, root kullan\u0131c\u0131s\u0131n\u0131n parolas\u0131n\u0131n bo\u015f b\u0131rak\u0131lmas\u0131 veya uzaktan eri\u015fime izin verilmesi) maruz kald\u0131\u011f\u0131 riskleri d\u00fc\u015f\u00fcnebiliriz. Bu t\u00fcr bir senaryoda, sald\u0131rganlar kolayca veritaban\u0131na eri\u015febilir ve hassas m\u00fc\u015fteri bilgilerini \u00e7alabilirlerdi. Neyse ki, <code>mysql_secure_installation<\/code> komutu ve do\u011fru kullan\u0131c\u0131 izinleri sayesinde bu t\u00fcr riskler bertaraf edilmi\u015ftir. Do\u011fru veritaban\u0131 ve \u00e7evre ayarlar\u0131, uygulaman\u0131z\u0131n hem performans\u0131n\u0131 hem de g\u00fcvenli\u011fini garanti alt\u0131na al\u0131r. Bu ad\u0131mlar\u0131 titizlikle uygulamak, sa\u011flam ve g\u00fcvenilir bir \u00fcretim ortam\u0131 olu\u015fturman\u0131n anahtar\u0131d\u0131r.<\/p>\n<h2>Performans ve G\u00fcvenlik Optimizasyonlar\u0131: \u0130leri D\u00fczey \u0130pu\u00e7lar\u0131<\/h2>\n<p>Laravel uygulaman\u0131z\u0131 Ubuntu \u00fczerinde Nginx ile kurmak sadece ba\u015flang\u0131\u00e7t\u0131r. Ger\u00e7ek d\u00fcnya senaryolar\u0131nda, uygulaman\u0131z\u0131n y\u00fcksek trafik alt\u0131nda bile h\u0131zl\u0131 ve g\u00fcvenli kalmas\u0131n\u0131 sa\u011flamak i\u00e7in \u00e7e\u015fitli optimizasyonlara ihtiya\u00e7 duyars\u0131n\u0131z. \u0130\u015fte baz\u0131 ileri d\u00fczey ipu\u00e7lar\u0131:<\/p>\n<h3>Nginx Yap\u0131land\u0131rma Optimizasyonlar\u0131<\/h3>\n<p>Nginx, varsay\u0131lan ayarlar\u0131yla bile h\u0131zl\u0131d\u0131r, ancak belirli ayarlamalarla performans\u0131 daha da art\u0131rabilirsiniz:<\/p>\n<ul>\n<li><strong>Gzip S\u0131k\u0131\u015ft\u0131rmas\u0131:<\/strong> Nginx&#8217;i statik dosyalar\u0131 (CSS, JS, HTML) s\u0131k\u0131\u015ft\u0131rmak i\u00e7in yap\u0131land\u0131r\u0131n. Bu, bant geni\u015fli\u011fini azalt\u0131r ve sayfa y\u00fckleme s\u00fcrelerini h\u0131zland\u0131r\u0131r. <code>nginx.conf<\/code> dosyas\u0131nda veya sanal host yap\u0131land\u0131rman\u0131zda a\u015fa\u011f\u0131daki blo\u011fu ekleyebilirsiniz:\n<pre><code>\n        gzip on;\n        gzip_vary on;\n        gzip_proxied any;\n        gzip_comp_level 6;\n        gzip_buffers 16 8k;\n        gzip_http_version 1.1;\n        gzip_types text\/plain text\/css application\/json application\/javascript text\/xml application\/xml application\/xml+rss text\/javascript;\n        <\/code><\/pre>\n<\/li>\n<li><strong>Taray\u0131c\u0131 \u00d6nbellekleme:<\/strong> Taray\u0131c\u0131lar\u0131n statik dosyalar\u0131 (resimler, CSS, JS) yerel olarak \u00f6nbelle\u011fe almas\u0131n\u0131 sa\u011flay\u0131n. Bu, tekrar eden ziyaretlerde sayfa y\u00fcklemesini h\u0131zland\u0131r\u0131r. <code>location<\/code> bloklar\u0131n\u0131zda <code>expires<\/code> direktifini kullanabilirsiniz:\n<pre><code>\n        location ~* \\.(jpg|jpeg|gif|png|css|js|ico|xml)$ {\n            expires 30d;\n            access_log off;\n        }\n        <\/code><\/pre>\n<\/li>\n<li><strong>Worker S\u00fcre\u00e7leri:<\/strong> Nginx&#8217;in <code>worker_processes<\/code> ayar\u0131n\u0131 sunucunuzdaki CPU \u00e7ekirdek say\u0131s\u0131na e\u015fitleyin veya iki kat\u0131na \u00e7\u0131kar\u0131n (<code>\/etc\/nginx\/nginx.conf<\/code> dosyas\u0131nda). Bu, Nginx&#8217;in e\u015fzamanl\u0131 ba\u011flant\u0131lar\u0131 daha verimli i\u015flemesini sa\u011flar.<\/li>\n<\/ul>\n<h3>PHP-FPM Havuz Ayarlar\u0131 ve OPcache<\/h3>\n<p>PHP-FPM&#8217;in do\u011fru yap\u0131land\u0131r\u0131lmas\u0131, PHP kodunuzun performans\u0131n\u0131 do\u011frudan etkiler:<\/p>\n<ul>\n<li><strong>Havuz Ayarlar\u0131:<\/strong> <code>\/etc\/php\/8.2\/fpm\/pool.d\/www.conf<\/code> dosyas\u0131nda <code>pm.max_children<\/code>, <code>pm.start_servers<\/code>, <code>pm.min_spare_servers<\/code> ve <code>pm.max_spare_servers<\/code> de\u011ferlerini sunucunuzun RAM kapasitesine g\u00f6re ayarlay\u0131n. Yanl\u0131\u015f ayarlar bellek t\u00fckenmesine veya performans d\u00fc\u015f\u00fc\u015f\u00fcne yol a\u00e7abilir. Ba\u015flang\u0131\u00e7 olarak, <code>pm = dynamic<\/code> ve <code>pm.max_children = 50<\/code> gibi de\u011ferlerle ba\u015flayabilir, ard\u0131ndan y\u00fck alt\u0131nda izleme yaparak optimize edebilirsiniz.<\/li>\n<li><strong>OPcache Kullan\u0131m\u0131:<\/strong> OPcache, PHP kodunu \u00f6nbelle\u011fe alarak her istekte yeniden derlenmesini engeller. Bu, PHP yorumlama s\u00fcresini \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r. Genellikle PHP kurulumuyla birlikte gelir ve <code>\/etc\/php\/8.2\/fpm\/php.ini<\/code> dosyas\u0131nda etkinle\u015ftirilebilir:\n<pre><code>\n        opcache.enable=1\n        opcache.memory_consumption=128\n        opcache.interned_strings_buffer=8\n        opcache.max_accelerated_files=10000\n        opcache.revalidate_freq=0\n        opcache.fast_shutdown=1\n        <\/code><\/pre>\n<p>        De\u011fi\u015fikliklerden sonra PHP-FPM&#8217;i yeniden ba\u015flatmay\u0131 unutmay\u0131n.<\/li>\n<\/ul>\n<h3>Veritaban\u0131 Optimizasyonlar\u0131<\/h3>\n<p>Veritaban\u0131 sorgular\u0131n\u0131n performans\u0131, uygulaman\u0131z\u0131n genel h\u0131z\u0131n\u0131 b\u00fcy\u00fck \u00f6l\u00e7\u00fcde etkiler:<\/p>\n<ul>\n<li><strong>\u0130ndeksleme:<\/strong> S\u0131k\u00e7a sorgulanan s\u00fctunlara (\u00f6zellikle <code>WHERE<\/code> ve <code>JOIN<\/code> ko\u015fullar\u0131nda kullan\u0131lanlar) indeks ekleyin. Laravel migrasyonlar\u0131nda bunu kolayca yapabilirsiniz.<\/li>\n<li><strong>Sorgu Optimizasyonu:<\/strong> Laravel Eloquent&#8217;te N+1 sorgu sorunlar\u0131ndan ka\u00e7\u0131nmak i\u00e7in <code>with()<\/code> veya <code>load()<\/code> gibi eager loading y\u00f6ntemlerini kullan\u0131n.<\/li>\n<li><strong>Cache Kullan\u0131m\u0131:<\/strong> S\u0131k\u00e7a eri\u015filen ancak nadiren de\u011fi\u015fen verileri Redis veya Memcached gibi bir \u00f6nbellek sisteminde depolay\u0131n.<\/li>\n<\/ul>\n<h3>G\u00fcvenlik Ba\u015fl\u0131klar\u0131 ve Sertifikalar<\/h3>\n<p>Uygulaman\u0131z\u0131n sadece h\u0131zl\u0131 de\u011fil, ayn\u0131 zamanda g\u00fcvenli oldu\u011fundan emin olun:<\/p>\n<ul>\n<li><strong>SSL\/TLS (HTTPS):<\/strong> Let&#8217;s Encrypt ile \u00fccretsiz SSL sertifikalar\u0131 kurarak t\u00fcm trafi\u011fi \u015fifreleyin. Certbot arac\u0131 bu s\u00fcreci otomatikle\u015ftirir:\n<pre><code>\n        sudo apt install certbot python3-certbot-nginx -y\n        sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com\n        <\/code><\/pre>\n<p>        Bu komutlar Nginx yap\u0131land\u0131rman\u0131z\u0131 otomatik olarak g\u00fcnceller ve SSL sertifikas\u0131n\u0131 kurar.<\/li>\n<li><strong>G\u00fcvenlik Ba\u015fl\u0131klar\u0131:<\/strong> Nginx yap\u0131land\u0131rman\u0131zda <code>X-Frame-Options<\/code>, <code>X-XSS-Protection<\/code>, <code>X-Content-Type-Options<\/code>, <code>Referrer-Policy<\/code> ve <code>Content-Security-Policy<\/code> (CSP) gibi g\u00fcvenlik ba\u015fl\u0131klar\u0131n\u0131 ayarlay\u0131n. CSP, uygulaman\u0131zda \u00e7al\u0131\u015fmas\u0131na izin verilen kaynaklar\u0131 belirleyerek XSS sald\u0131r\u0131lar\u0131na kar\u015f\u0131 koruma sa\u011flar.<\/li>\n<li><strong>Otomatik Yedeklemeler:<\/strong> Veritaban\u0131 ve dosya yedeklemeleri i\u00e7in d\u00fczenli cron i\u015fleri ayarlay\u0131n. Bu, olas\u0131 bir veri kayb\u0131 durumunda kurtarma plan\u0131n\u0131z\u0131n olmas\u0131n\u0131 sa\u011flar. \u00d6rne\u011fin, bir yedekleme stratejisi olu\u015ftururken, veritaban\u0131n\u0131 g\u00fcnl\u00fck olarak bir bulut depolama hizmetine (AWS S3 gibi) ve uygulama dosyalar\u0131n\u0131 haftal\u0131k olarak farkl\u0131 bir sunucuya yedeklemeyi d\u00fc\u015f\u00fcnebilirsiniz.<\/li>\n<\/ul>\n<div class=\"expert-tip\">\n  Uzman \u0130pucu: Sunucunuzun performans\u0131n\u0131 izlemek i\u00e7in <code>htop<\/code>, <code>nginx-r-stats<\/code> veya Prometheus\/Grafana gibi ara\u00e7lar\u0131 kullan\u0131n. Bu ara\u00e7lar, darbo\u011fazlar\u0131 tespit etmenize ve optimizasyon stratejilerinizi geli\u015ftirmenize yard\u0131mc\u0131 olur.\n<\/div>\n<p>Bu optimizasyonlar, Laravel uygulaman\u0131z\u0131n yaln\u0131zca temel i\u015flevselli\u011fi yerine getirmesini de\u011fil, ayn\u0131 zamanda y\u00fcksek performans ve \u00fcst d\u00fczey g\u00fcvenlik standartlar\u0131n\u0131 kar\u015f\u0131lamas\u0131n\u0131 sa\u011flar. Her bir ayar, uygulaman\u0131z\u0131n genel deneyimini do\u011frudan etkileyebilir, bu y\u00fczden dikkatli bir \u015fekilde uygulanmalar\u0131 \u00f6nemlidir. \u00d6rne\u011fin, bir \u00f6nceki e-ticaret projemizde, Nginx&#8217;in Gzip s\u0131k\u0131\u015ft\u0131rmas\u0131n\u0131 etkinle\u015ftirmek ve taray\u0131c\u0131 \u00f6nbelleklemesini ayarlamak, sayfa y\u00fckleme s\u00fcrelerini ortalama %30 oran\u0131nda azaltm\u0131\u015f ve kullan\u0131c\u0131 memnuniyetini art\u0131rm\u0131\u015ft\u0131. Bu t\u00fcr k\u00fc\u00e7\u00fck g\u00f6r\u00fcnen de\u011fi\u015fiklikler, b\u00fcy\u00fck farklar yaratabilir.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>Bu kapsaml\u0131 rehberde, Laravel uygulaman\u0131z\u0131 Ubuntu \u00fczerinde Nginx ve PHP-FPM kullanarak nas\u0131l kuraca\u011f\u0131n\u0131z\u0131 ve yap\u0131land\u0131raca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m inceledik. LEMP y\u0131\u011f\u0131n\u0131n\u0131n temellerinden ba\u015flayarak, sunucu haz\u0131rl\u0131\u011f\u0131, Nginx sanal host yap\u0131land\u0131rmas\u0131, veritaban\u0131 entegrasyonu ve ileri d\u00fczey performans ile g\u00fcvenlik optimizasyonlar\u0131na kadar bir\u00e7ok konuya de\u011findik. Art\u0131k Laravel projelerinizi g\u00fcvenle \u00fcretim ortam\u0131na ta\u015f\u0131yabilir, y\u00fcksek performansl\u0131 ve g\u00fcvenli bir web deneyimi sunabilirsiniz. Unutmay\u0131n ki, ba\u015far\u0131l\u0131 bir da\u011f\u0131t\u0131m sadece kurulumla bitmez; d\u00fczenli bak\u0131m, izleme ve s\u00fcrekli optimizasyon da ayn\u0131 derecede \u00f6nemlidir. Bu ad\u0131mlar\u0131 uygulayarak, web uygulaman\u0131z\u0131n sa\u011flam bir temele sahip olmas\u0131n\u0131 ve gelecekteki b\u00fcy\u00fcme i\u00e7in haz\u0131r olmas\u0131n\u0131 sa\u011flam\u0131\u015f olursunuz. \u00d6zellikle y\u00fcksek trafikli uygulamalar i\u00e7in bu yap\u0131land\u0131rma, hem maliyet etkinli\u011fi hem de \u00f6l\u00e7eklenebilirlik a\u00e7\u0131s\u0131ndan ideal bir \u00e7\u00f6z\u00fcm sunar.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<ol>\n<li>\n<h3>Nginx yerine Apache kullanabilir miyim?<\/h3>\n<p>Evet, Laravel uygulamalar\u0131 Apache \u00fczerinde de \u00e7al\u0131\u015fabilir. Ancak Nginx, y\u00fcksek e\u015fzamanl\u0131 ba\u011flant\u0131lar\u0131 ve statik dosya sunumunu daha verimli y\u00f6netmesi nedeniyle genellikle daha iyi performans sunar. \u00d6zellikle y\u00fcksek trafikli siteler i\u00e7in Nginx tercih edilir. Apache&#8217;nin <code>.htaccess<\/code> dosyas\u0131 gibi \u00f6zellikleri, Nginx&#8217;te sanal host yap\u0131land\u0131rmas\u0131 i\u00e7inde ele al\u0131n\u0131r.<\/p>\n<\/li>\n<li>\n<h3>Laravel uygulamas\u0131n\u0131 g\u00fcncelledikten sonra ne yapmal\u0131y\u0131m?<\/h3>\n<p>Uygulaman\u0131z\u0131 g\u00fcncelledikten sonra (\u00f6rne\u011fin Git pull ile), genellikle <code>composer install --no-dev --optimize-autoloader<\/code> komutunu \u00e7al\u0131\u015ft\u0131rman\u0131z, <code>php artisan migrate --force<\/code> ile veritaban\u0131 migrasyonlar\u0131n\u0131 uygulaman\u0131z ve <code>php artisan cache:clear<\/code>, <code>php artisan config:clear<\/code>, <code>php artisan route:clear<\/code>, <code>php artisan view:clear<\/code> komutlar\u0131yla \u00f6nbelle\u011fi temizlemeniz \u00f6nerilir. Ayr\u0131ca, PHP-FPM&#8217;i yeniden ba\u015flatmak (<code>sudo systemctl restart php8.2-fpm<\/code>) de iyi bir uygulamad\u0131r.<\/p>\n<\/li>\n<li>\n<h3>502 Bad Gateway hatas\u0131 al\u0131yorum, ne yapmal\u0131y\u0131m?<\/h3>\n<p>Bu hata genellikle Nginx&#8217;in PHP-FPM ile ileti\u015fim kuramad\u0131\u011f\u0131 anlam\u0131na gelir. \u00d6ncelikle PHP-FPM servisinin \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olun (<code>sudo systemctl status php8.2-fpm<\/code>). Nginx yap\u0131land\u0131rman\u0131zdaki (<code>\/etc\/nginx\/sites-available\/yourdomain.com.conf<\/code>) <code>fastcgi_pass<\/code> sat\u0131r\u0131ndaki PHP-FPM soket yolunun (\u00f6rne\u011fin <code>unix:\/var\/run\/php\/php8.2-fpm.sock<\/code>) do\u011fru oldu\u011fundan ve PHP-FPM yap\u0131land\u0131rmas\u0131ndaki soket yolunun e\u015fle\u015fti\u011finden emin olun. Nginx ve PHP-FPM hata g\u00fcnl\u00fcklerini kontrol etmek (<code>\/var\/log\/nginx\/error.log<\/code> ve PHP-FPM g\u00fcnl\u00fckleri) sorunun k\u00f6k nedenini bulman\u0131za yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<\/li>\n<li>\n<h3>Laravel uygulamas\u0131nda 403 Forbidden hatas\u0131 al\u0131yorum, neden olabilir?<\/h3>\n<p>403 Forbidden hatas\u0131 genellikle dosya veya dizin izinleriyle ilgilidir. Uygulaman\u0131z\u0131n k\u00f6k dizininin ve \u00f6zellikle <code>storage<\/code> ile <code>bootstrap\/cache<\/code> dizinlerinin <code>www-data<\/code> kullan\u0131c\u0131s\u0131 taraf\u0131ndan yaz\u0131labilir oldu\u011fundan emin olun (<code>sudo chown -R www-data:www-data \/var\/www\/your_laravel_app<\/code> ve <code>sudo chmod -R 775 \/var\/www\/your_laravel_app\/storage<\/code>). Ayr\u0131ca, Nginx&#8217;in <code>root<\/code> direktifinin do\u011fru yolu g\u00f6sterdi\u011finden emin olun.<\/p>\n<\/li>\n<li>\n<h3>SSL sertifikas\u0131 kurduktan sonra HTTP trafi\u011fini HTTPS&#8217;e nas\u0131l y\u00f6nlendiririm?<\/h3>\n<p>Certbot genellikle bunu otomatik olarak yapar. Ancak manuel olarak yapmak isterseniz, Nginx yap\u0131land\u0131rman\u0131zda 80 numaral\u0131 portu dinleyen bir <code>server<\/code> blo\u011fu olu\u015fturup t\u00fcm istekleri HTTPS&#8217;e y\u00f6nlendirebilirsiniz:<\/p>\n<pre><code>\n        server {\n            listen 80;\n            listen [::]:80;\n            server_name yourdomain.com www.yourdomain.com;\n            return 301 https:\/\/$host$request_uri;\n        }\n        <\/code><\/pre>\n<p>        Bu yap\u0131land\u0131rma, t\u00fcm HTTP isteklerini 301 kal\u0131c\u0131 y\u00f6nlendirmesiyle HTTPS versiyonuna y\u00f6nlendirecektir.\n        <\/p>\n<\/li>\n<\/ol>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Laravel Nginx Ubuntu Kurulumu: Kapsaml\u0131 LEMP Rehberi Web uygulamalar\u0131n\u0131z\u0131n h\u0131zl\u0131, g\u00fcvenli ve \u00f6l\u00e7eklenebilir olmas\u0131n\u0131 m\u0131 istiyorsunuz? Laravel projelerinizi&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1468],"tags":[],"class_list":{"0":"post-33028","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-ubuntu","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Laravel Nginx Ubuntu Kurulumu Neden \u00d6nemli? LEMP Stack&#039;in Temelleri Nelerdir?<\/title>\n<meta name=\"description\" content=\"Web uygulamalar\u0131n\u0131z\u0131n h\u0131zl\u0131, g\u00fcvenli ve \u00f6l\u00e7eklenebilir olmas\u0131n\u0131 m\u0131 istiyorsunuz? Laravel projelerinizi Ubuntu sunucular \u00fczerinde Nginx ile yay\u0131na almak, bu hedeflere ula\u015fman\u0131n en etkili yollar\u0131ndan biridir. Bu rehber, Laravel uygulamalar\u0131n\u0131z\u0131 LEMP (Linux, Nginx, MySQL\/MariaDB, PHP-FPM) y\u0131\u011f\u0131n\u0131 ile Ubuntu \u00fczerine nas\u0131l kuraca\u011f\u0131n\u0131z\u0131 ve yap\u0131land\u0131raca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/laravel-nginx-ubuntu-kurulumu-neden-onemli-lemp-stackin-temelleri-nelerdir\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Laravel Nginx Ubuntu Kurulumu Neden \u00d6nemli? LEMP Stack&#039;in Temelleri Nelerdir?\" \/>\n<meta property=\"og:description\" content=\"Web uygulamalar\u0131n\u0131z\u0131n h\u0131zl\u0131, g\u00fcvenli ve \u00f6l\u00e7eklenebilir olmas\u0131n\u0131 m\u0131 istiyorsunuz? Laravel projelerinizi Ubuntu sunucular \u00fczerinde Nginx ile yay\u0131na almak, bu hedeflere ula\u015fman\u0131n en etkili yollar\u0131ndan biridir. Bu rehber, Laravel uygulamalar\u0131n\u0131z\u0131 LEMP (Linux, Nginx, MySQL\/MariaDB, PHP-FPM) y\u0131\u011f\u0131n\u0131 ile Ubuntu \u00fczerine nas\u0131l kuraca\u011f\u0131n\u0131z\u0131 ve yap\u0131land\u0131raca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/laravel-nginx-ubuntu-kurulumu-neden-onemli-lemp-stackin-temelleri-nelerdir\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-28T13:25:50+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"27 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/laravel-nginx-ubuntu-kurulumu-neden-onemli-lemp-stackin-temelleri-nelerdir\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/laravel-nginx-ubuntu-kurulumu-neden-onemli-lemp-stackin-temelleri-nelerdir\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Laravel Nginx Ubuntu Kurulumu Neden \u00d6nemli? LEMP Stack&#8217;in Temelleri Nelerdir?\",\"datePublished\":\"2025-10-28T13:25:50+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/laravel-nginx-ubuntu-kurulumu-neden-onemli-lemp-stackin-temelleri-nelerdir\/\"},\"wordCount\":4445,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Ubuntu\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/laravel-nginx-ubuntu-kurulumu-neden-onemli-lemp-stackin-temelleri-nelerdir\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/laravel-nginx-ubuntu-kurulumu-neden-onemli-lemp-stackin-temelleri-nelerdir\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/laravel-nginx-ubuntu-kurulumu-neden-onemli-lemp-stackin-temelleri-nelerdir\/\",\"name\":\"Laravel Nginx Ubuntu Kurulumu Neden \u00d6nemli? LEMP Stack'in Temelleri Nelerdir?\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-28T13:25:50+00:00\",\"description\":\"Web uygulamalar\u0131n\u0131z\u0131n h\u0131zl\u0131, g\u00fcvenli ve \u00f6l\u00e7eklenebilir olmas\u0131n\u0131 m\u0131 istiyorsunuz? Laravel projelerinizi Ubuntu sunucular \u00fczerinde Nginx ile yay\u0131na almak, bu hedeflere ula\u015fman\u0131n en etkili yollar\u0131ndan biridir. Bu rehber, Laravel uygulamalar\u0131n\u0131z\u0131 LEMP (Linux, Nginx, MySQL\/MariaDB, PHP-FPM) y\u0131\u011f\u0131n\u0131 ile Ubuntu \u00fczerine nas\u0131l kuraca\u011f\u0131n\u0131z\u0131 ve yap\u0131land\u0131raca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/laravel-nginx-ubuntu-kurulumu-neden-onemli-lemp-stackin-temelleri-nelerdir\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/laravel-nginx-ubuntu-kurulumu-neden-onemli-lemp-stackin-temelleri-nelerdir\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/laravel-nginx-ubuntu-kurulumu-neden-onemli-lemp-stackin-temelleri-nelerdir\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Laravel Nginx Ubuntu Kurulumu Neden \u00d6nemli? LEMP Stack&#8217;in Temelleri Nelerdir?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Laravel Nginx Ubuntu Kurulumu Neden \u00d6nemli? LEMP Stack'in Temelleri Nelerdir?","description":"Web uygulamalar\u0131n\u0131z\u0131n h\u0131zl\u0131, g\u00fcvenli ve \u00f6l\u00e7eklenebilir olmas\u0131n\u0131 m\u0131 istiyorsunuz? Laravel projelerinizi Ubuntu sunucular \u00fczerinde Nginx ile yay\u0131na almak, bu hedeflere ula\u015fman\u0131n en etkili yollar\u0131ndan biridir. Bu rehber, Laravel uygulamalar\u0131n\u0131z\u0131 LEMP (Linux, Nginx, MySQL\/MariaDB, PHP-FPM) y\u0131\u011f\u0131n\u0131 ile Ubuntu \u00fczerine nas\u0131l kuraca\u011f\u0131n\u0131z\u0131 ve yap\u0131land\u0131raca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/laravel-nginx-ubuntu-kurulumu-neden-onemli-lemp-stackin-temelleri-nelerdir\/","og_locale":"tr_TR","og_type":"article","og_title":"Laravel Nginx Ubuntu Kurulumu Neden \u00d6nemli? LEMP Stack'in Temelleri Nelerdir?","og_description":"Web uygulamalar\u0131n\u0131z\u0131n h\u0131zl\u0131, g\u00fcvenli ve \u00f6l\u00e7eklenebilir olmas\u0131n\u0131 m\u0131 istiyorsunuz? Laravel projelerinizi Ubuntu sunucular \u00fczerinde Nginx ile yay\u0131na almak, bu hedeflere ula\u015fman\u0131n en etkili yollar\u0131ndan biridir. Bu rehber, Laravel uygulamalar\u0131n\u0131z\u0131 LEMP (Linux, Nginx, MySQL\/MariaDB, PHP-FPM) y\u0131\u011f\u0131n\u0131 ile Ubuntu \u00fczerine nas\u0131l kuraca\u011f\u0131n\u0131z\u0131 ve yap\u0131land\u0131raca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.","og_url":"https:\/\/fatihsoysal.com\/blog\/laravel-nginx-ubuntu-kurulumu-neden-onemli-lemp-stackin-temelleri-nelerdir\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-28T13:25:50+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"27 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/laravel-nginx-ubuntu-kurulumu-neden-onemli-lemp-stackin-temelleri-nelerdir\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/laravel-nginx-ubuntu-kurulumu-neden-onemli-lemp-stackin-temelleri-nelerdir\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Laravel Nginx Ubuntu Kurulumu Neden \u00d6nemli? LEMP Stack&#8217;in Temelleri Nelerdir?","datePublished":"2025-10-28T13:25:50+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/laravel-nginx-ubuntu-kurulumu-neden-onemli-lemp-stackin-temelleri-nelerdir\/"},"wordCount":4445,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Ubuntu"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/laravel-nginx-ubuntu-kurulumu-neden-onemli-lemp-stackin-temelleri-nelerdir\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/laravel-nginx-ubuntu-kurulumu-neden-onemli-lemp-stackin-temelleri-nelerdir\/","url":"https:\/\/fatihsoysal.com\/blog\/laravel-nginx-ubuntu-kurulumu-neden-onemli-lemp-stackin-temelleri-nelerdir\/","name":"Laravel Nginx Ubuntu Kurulumu Neden \u00d6nemli? LEMP Stack'in Temelleri Nelerdir?","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-28T13:25:50+00:00","description":"Web uygulamalar\u0131n\u0131z\u0131n h\u0131zl\u0131, g\u00fcvenli ve \u00f6l\u00e7eklenebilir olmas\u0131n\u0131 m\u0131 istiyorsunuz? Laravel projelerinizi Ubuntu sunucular \u00fczerinde Nginx ile yay\u0131na almak, bu hedeflere ula\u015fman\u0131n en etkili yollar\u0131ndan biridir. Bu rehber, Laravel uygulamalar\u0131n\u0131z\u0131 LEMP (Linux, Nginx, MySQL\/MariaDB, PHP-FPM) y\u0131\u011f\u0131n\u0131 ile Ubuntu \u00fczerine nas\u0131l kuraca\u011f\u0131n\u0131z\u0131 ve yap\u0131land\u0131raca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/laravel-nginx-ubuntu-kurulumu-neden-onemli-lemp-stackin-temelleri-nelerdir\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/laravel-nginx-ubuntu-kurulumu-neden-onemli-lemp-stackin-temelleri-nelerdir\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/laravel-nginx-ubuntu-kurulumu-neden-onemli-lemp-stackin-temelleri-nelerdir\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Laravel Nginx Ubuntu Kurulumu Neden \u00d6nemli? LEMP Stack&#8217;in Temelleri Nelerdir?"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33028","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=33028"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33028\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=33028"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=33028"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=33028"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}