{"id":39797,"date":"2026-02-24T01:40:45","date_gmt":"2026-02-23T22:40:45","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=39797"},"modified":"2026-02-24T01:40:45","modified_gmt":"2026-02-23T22:40:45","slug":"ubuntu-20-04-uzerine-linux-nginx-mysql-php-lemp-stack-kurulumu-adim-adim-kapsamli-rehber","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerine-linux-nginx-mysql-php-lemp-stack-kurulumu-adim-adim-kapsamli-rehber\/","title":{"rendered":"Ubuntu 20.04 \u00dczerine Linux, Nginx, MySQL, PHP (LEMP Stack) Kurulumu: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber"},"content":{"rendered":"<p><body><\/p>\n<h2>Ubuntu 20.04 \u00dczerine Linux, Nginx, MySQL, PHP (LEMP Stack) Kurulumu: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber<\/h2>\n<p>Modern web uygulamalar\u0131 i\u00e7in sa\u011flam, h\u0131zl\u0131 ve g\u00fcvenilir bir altyap\u0131 olu\u015fturmak, geli\u015ftiriciler ve sistem y\u00f6neticileri i\u00e7in temel bir gerekliliktir. LEMP y\u0131\u011f\u0131n\u0131, Linux i\u015fletim sistemi, Nginx web sunucusu, MySQL veritaban\u0131 ve PHP programlama dilini bir araya getirerek bu ihtiyac\u0131 kar\u015f\u0131layan g\u00fc\u00e7l\u00fc bir \u00e7\u00f6z\u00fcmd\u00fcr. Apache&#8217;nin yerini alan Nginx, \u00f6zellikle y\u00fcksek e\u015fzamanl\u0131 ba\u011flant\u0131lar\u0131 ve statik i\u00e7erik sunumunu optimize etme yetene\u011fi sayesinde pop\u00fclerlik kazanm\u0131\u015ft\u0131r. Bu rehberde, Ubuntu 20.04 sunucunuz \u00fczerine LEMP y\u0131\u011f\u0131n\u0131n\u0131 ad\u0131m ad\u0131m nas\u0131l kuraca\u011f\u0131n\u0131z\u0131, yap\u0131land\u0131raca\u011f\u0131n\u0131z\u0131 ve g\u00fcvenli hale getirece\u011finizi detayl\u0131 bir \u015fekilde anlataca\u011f\u0131z.<\/p>\n<h3>LEMP Nedir ve Neden Tercih Edilmelidir?<\/h3>\n<p>LEMP, &#8220;Linux, Nginx, MySQL, PHP&#8221; kelimelerinin ba\u015f harflerinden olu\u015fan bir k\u0131saltmad\u0131r. Her bir bile\u015fen, web uygulaman\u0131z\u0131n farkl\u0131 bir y\u00f6n\u00fcn\u00fc y\u00f6netir:<\/p>\n<p>*   <strong>L (Linux):<\/strong> \u0130\u015fletim sistemidir. Ubuntu, Debian, CentOS gibi da\u011f\u0131t\u0131mlar en yayg\u0131n olanlar\u0131d\u0131r. Bu rehberde Ubuntu 20.04 kullanaca\u011f\u0131z.<br \/>\n*   <strong>E (Engine-X \/ Nginx):<\/strong> Y\u00fcksek performansl\u0131 bir web sunucusu ve ters proxy&#8217;dir. \u00d6zellikle statik i\u00e7erik sunumunda ve e\u015fzamanl\u0131 ba\u011flant\u0131lar\u0131 y\u00f6netmede Apache&#8217;ye g\u00f6re daha verimli kabul edilir.<br \/>\n*   <strong>M (MySQL \/ MariaDB):<\/strong> \u0130li\u015fkisel bir veritaban\u0131 y\u00f6netim sistemidir. Uygulaman\u0131z\u0131n verilerini depolamak ve y\u00f6netmek i\u00e7in kullan\u0131l\u0131r.<br \/>\n*   <strong>P (PHP):<\/strong> Dinamik web sayfalar\u0131 olu\u015fturmak i\u00e7in kullan\u0131lan pop\u00fcler bir sunucu taraf\u0131 betik dilidir. Nginx ile birlikte PHP-FPM (FastCGI Process Manager) arac\u0131l\u0131\u011f\u0131yla \u00e7al\u0131\u015f\u0131r.<\/p>\n<p>LEMP y\u0131\u011f\u0131n\u0131n\u0131 tercih etmenizin ba\u015fl\u0131ca nedenleri \u015funlard\u0131r:<\/p>\n<p>*   <strong>Y\u00fcksek Performans:<\/strong> Nginx&#8217;in olay tabanl\u0131 mimarisi sayesinde y\u00fcksek trafikli sitelerde bile \u00fcst\u00fcn performans sunar.<br \/>\n*   <strong>\u00d6l\u00e7eklenebilirlik:<\/strong> Bile\u015fenlerin mod\u00fcler yap\u0131s\u0131 sayesinde uygulaman\u0131z b\u00fcy\u00fcd\u00fck\u00e7e kolayca \u00f6l\u00e7eklendirilebilir.<br \/>\n*   <strong>Kaynak Verimlili\u011fi:<\/strong> Nginx, Apache&#8217;ye k\u0131yasla daha az sistem kayna\u011f\u0131 t\u00fcketir, bu da daha d\u00fc\u015f\u00fck maliyetli sunucularda bile iyi performans alman\u0131z\u0131 sa\u011flar.<br \/>\n*   <strong>G\u00fcvenlik:<\/strong> Her bile\u015fenin d\u00fczenli g\u00fcncellemeleri ve g\u00fcvenlik odakl\u0131 yap\u0131land\u0131rma se\u00e7enekleri sayesinde sa\u011flam bir g\u00fcvenlik katman\u0131 sunar.<br \/>\n*   <strong>Esneklik:<\/strong> Geni\u015f eklenti ve mod\u00fcl deste\u011fi sayesinde farkl\u0131 ihtiya\u00e7lara g\u00f6re \u00f6zelle\u015ftirilebilir.<\/p>\n<p>Bu rehber, Ubuntu 20.04 LTS (Long Term Support) s\u00fcr\u00fcm\u00fcn\u00fc temel almaktad\u0131r. LTS s\u00fcr\u00fcmleri, uzun s\u00fcreli destek ve kararl\u0131l\u0131k sunduklar\u0131 i\u00e7in \u00fcretim ortamlar\u0131 i\u00e7in idealdir.<\/p>\n<h3>\u00d6n Gereksinimler<\/h3>\n<p>LEMP kurulumuna ba\u015flamadan \u00f6nce a\u015fa\u011f\u0131daki gereksinimlere sahip oldu\u011funuzdan emin olun:<\/p>\n<p>*   <strong>Ubuntu 20.04 Sunucu:<\/strong> SSH eri\u015fimi olan bir Ubuntu 20.04 y\u00fckl\u00fc sanal veya fiziksel sunucu.<br \/>\n*   <strong>K\u00f6k \/ Sudo Yetkileri:<\/strong> Kurulum komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in k\u00f6k kullan\u0131c\u0131 eri\u015fimi veya <code>sudo<\/code> yetkilerine sahip bir kullan\u0131c\u0131.<br \/>\n*   <strong>\u0130nternet Ba\u011flant\u0131s\u0131:<\/strong> Sunucunun paketleri indirebilmesi i\u00e7in aktif bir internet ba\u011flant\u0131s\u0131.<br \/>\n*   <strong>Temel Komut Sat\u0131r\u0131 Bilgisi:<\/strong> Linux komut sat\u0131r\u0131 ile ilgili temel d\u00fczeyde bilgi sahibi olmak.<\/p>\n<p>\u015eimdi, LEMP kurulumuna ad\u0131m ad\u0131m ba\u015flayal\u0131m.<\/p>\n<h3>Sunucu \u0130lk Kurulumu ve G\u00fcvenli\u011fi<\/h3>\n<p>Herhangi bir b\u00fcy\u00fck kurulumdan \u00f6nce sunucunuzu g\u00fcncelleyerek ve temel g\u00fcvenlik ayarlar\u0131n\u0131 yaparak ba\u015flamak iyi bir uygulamad\u0131r.<\/p>\n<h4>Sistem Paketlerini G\u00fcncelleme<\/h4>\n<p>\u0130lk olarak, sunucunuzdaki paket listesini g\u00fcncelleyin ve mevcut paketleri en son s\u00fcr\u00fcmlerine y\u00fckseltin:<\/p>\n<pre><code class=\"language-bash\">sudo apt update\nsudo apt upgrade -y<\/code><\/pre>\n<p>Bu komutlar, sisteminizin en yeni g\u00fcvenlik yamalar\u0131na ve yaz\u0131l\u0131m g\u00fcncellemelerine sahip olmas\u0131n\u0131 sa\u011flar.<\/p>\n<h4>G\u00fcvenlik Duvar\u0131n\u0131 Yap\u0131land\u0131rma (UFW)<\/h4>\n<p>Ubuntu, varsay\u0131lan olarak UFW (Uncomplicated Firewall) adl\u0131 basit bir g\u00fcvenlik duvar\u0131 arac\u0131yla gelir. Gelen ba\u011flant\u0131lar\u0131 k\u0131s\u0131tlayarak sunucunuzun g\u00fcvenli\u011fini art\u0131rmak i\u00e7in UFW&#8217;yi etkinle\u015ftirmelisiniz.<\/p>\n<p>SSH ba\u011flant\u0131s\u0131n\u0131n kesilmemesi i\u00e7in \u00f6ncelikle SSH ba\u011flant\u0131 noktas\u0131na izin verin (varsay\u0131lan 22&#8217;dir):<\/p>\n<pre><code class=\"language-bash\">sudo ufw allow OpenSSH<\/code><\/pre>\n<p>Ard\u0131ndan, g\u00fcvenlik duvar\u0131n\u0131 etkinle\u015ftirin:<\/p>\n<pre><code class=\"language-bash\">sudo ufw enable<\/code><\/pre>\n<p>Onaylamak i\u00e7in <code>y<\/code> yaz\u0131p Enter tu\u015funa bas\u0131n. G\u00fcvenlik duvar\u0131n\u0131n durumunu kontrol etmek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">sudo ufw status<\/code><\/pre>\n<p>\u015eu anda sadece SSH ba\u011flant\u0131lar\u0131na izin verilmelidir. Nginx ve di\u011fer hizmetleri kurduktan sonra HTTP\/HTTPS ba\u011flant\u0131lar\u0131na da izin verece\u011fiz.<\/p>\n<h3>Nginx Kurulumu<\/h3>\n<p>Nginx, LEMP y\u0131\u011f\u0131n\u0131n\u0131n &#8220;E&#8221; bile\u015fenidir ve web isteklerini i\u015flemekten sorumludur.<\/p>\n<h4>Nginx Y\u00fckleme<\/h4>\n<p>Nginx&#8217;i Ubuntu depolar\u0131ndan kolayca y\u00fckleyebilirsiniz:<\/p>\n<pre><code class=\"language-bash\">sudo apt install nginx -y<\/code><\/pre>\n<p>Kurulum tamamland\u0131ktan sonra, Nginx servisi otomatik olarak ba\u015flayacakt\u0131r. Durumunu kontrol edebilirsiniz:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl status nginx<\/code><\/pre>\n<p>\u00c7\u0131kt\u0131da <code>active (running)<\/code> ibaresini g\u00f6rmelisiniz.<\/p>\n<h4>G\u00fcvenlik Duvar\u0131n\u0131 Nginx \u0130\u00e7in Yap\u0131land\u0131rma<\/h4>\n<p>Nginx&#8217;i kurduktan sonra, web sunucusunun d\u0131\u015far\u0131dan eri\u015filebilir olmas\u0131 i\u00e7in UFW g\u00fcvenlik duvar\u0131nda HTTP (80) ve HTTPS (443) ba\u011flant\u0131 noktalar\u0131na izin vermeniz gerekir. UFW, Nginx i\u00e7in \u00f6nceden tan\u0131mlanm\u0131\u015f profillerle gelir:<\/p>\n<p>*   <code>Nginx HTTP<\/code>: Yaln\u0131zca 80 numaral\u0131 ba\u011flant\u0131 noktas\u0131na (HTTP) izin verir.<br \/>\n*   <code>Nginx HTTPS<\/code>: Yaln\u0131zca 443 numaral\u0131 ba\u011flant\u0131 noktas\u0131na (HTTPS) izin verir.<br \/>\n*   <code>Nginx Full<\/code>: Hem 80 hem de 443 numaral\u0131 ba\u011flant\u0131 noktalar\u0131na izin verir.<\/p>\n<p>\u015eimdilik sadece HTTP&#8217;ye izin verelim. Daha sonra SSL\/TLS kurdu\u011fumuzda HTTPS&#8217;ye izin verece\u011fiz:<\/p>\n<pre><code class=\"language-bash\">sudo ufw allow 'Nginx HTTP'<\/code><\/pre>\n<p>G\u00fcvenlik duvar\u0131 durumunu tekrar kontrol edin:<\/p>\n<pre><code class=\"language-bash\">sudo ufw status<\/code><\/pre>\n<p>\u00c7\u0131kt\u0131da <code>Nginx HTTP<\/code>&#8216;nin izin verilenler listesinde oldu\u011funu g\u00f6rmelisiniz.<\/p>\n<h4>Nginx Kurulumunu Test Etme<\/h4>\n<p>Web taray\u0131c\u0131n\u0131z\u0131 a\u00e7\u0131n ve sunucunuzun IP adresini veya alan ad\u0131n\u0131 girin. \u00d6rne\u011fin: <code>http:\/\/your_server_ip<\/code><\/p>\n<p>E\u011fer Nginx do\u011fru bir \u015fekilde kurulduysa, &#8220;Welcome to nginx!&#8221; mesaj\u0131n\u0131 i\u00e7eren varsay\u0131lan Nginx kar\u015f\u0131lama sayfas\u0131n\u0131 g\u00f6rmelisiniz. Bu, Nginx&#8217;in d\u00fczg\u00fcn \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6sterir.<\/p>\n<h3>MySQL Kurulumu<\/h3>\n<p>MySQL, LEMP y\u0131\u011f\u0131n\u0131n\u0131n &#8220;M&#8221; bile\u015fenidir ve web uygulaman\u0131z\u0131n verilerini depolamak i\u00e7in kullan\u0131l\u0131r. Ubuntu 20.04 varsay\u0131lan olarak MySQL&#8217;in yerine MariaDB&#8217;yi de kullanabilir, ancak bu rehberde MySQL&#8217;i kuraca\u011f\u0131z.<\/p>\n<h4>MySQL Sunucusunu Y\u00fckleme<\/h4>\n<p>MySQL sunucusunu a\u015fa\u011f\u0131daki komutla y\u00fckleyin:<\/p>\n<pre><code class=\"language-bash\">sudo apt install mysql-server -y<\/code><\/pre>\n<p>Kurulum tamamland\u0131ktan sonra MySQL servisi otomatik olarak ba\u015flayacakt\u0131r. Durumunu kontrol edebilirsiniz:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl status mysql<\/code><\/pre>\n<p>\u00c7\u0131kt\u0131da <code>active (running)<\/code> ibaresini g\u00f6rmelisiniz.<\/p>\n<h4>MySQL G\u00fcvenlik Yap\u0131land\u0131rmas\u0131<\/h4>\n<p>MySQL kurulumuyla birlikte gelen <code>mysql_secure_installation<\/code> beti\u011fini \u00e7al\u0131\u015ft\u0131rmak, veritaban\u0131 sunucunuzun g\u00fcvenli\u011fini art\u0131rmak i\u00e7in kritik bir ad\u0131md\u0131r.<\/p>\n<pre><code class=\"language-bash\">sudo mysql_secure_installation<\/code><\/pre>\n<p>Bu betik size birka\u00e7 soru soracakt\u0131r:<\/p>\n<p>1.  <strong>VALIDATE PASSWORD COMPONENT?<\/strong> (\u015eifre do\u011frulama bile\u015fenini kurmak ister misiniz?)<br \/>\n    *   <code>y<\/code> veya <code>n<\/code> se\u00e7ene\u011fini se\u00e7in. G\u00fc\u00e7l\u00fc \u015fifre politikalar\u0131 uygulamak i\u00e7in <code>y<\/code> se\u00e7ene\u011fini tercih edebilirsiniz. E\u011fer <code>y<\/code> se\u00e7erseniz, \u015fifre g\u00fcc\u00fc seviyesi se\u00e7meniz istenecektir (LOW, MEDIUM, STRONG). Genellikle MEDIUM veya STRONG se\u00e7mek iyi bir fikirdir.<br \/>\n2.  <strong>Set root password?<\/strong> (K\u00f6k kullan\u0131c\u0131 \u015fifresi belirle?)<br \/>\n    *   <code>y<\/code> se\u00e7ene\u011fini se\u00e7in ve g\u00fc\u00e7l\u00fc bir k\u00f6k \u015fifresi belirleyin. Bu \u015fifreyi unutmay\u0131n, \u00e7\u00fcnk\u00fc MySQL sunucusuna y\u00f6netici olarak eri\u015fmek i\u00e7in gereklidir.<br \/>\n3.  <strong>Remove anonymous users?<\/strong> (Anonim kullan\u0131c\u0131lar\u0131 kald\u0131r?)<br \/>\n    *   <code>y<\/code> se\u00e7ene\u011fini se\u00e7in. Anonim kullan\u0131c\u0131lar test ama\u00e7l\u0131d\u0131r ve \u00fcretim ortamlar\u0131nda g\u00fcvenlik riski olu\u015ftururlar.<br \/>\n4.  <strong>Disallow root login remotely?<\/strong> (K\u00f6k kullan\u0131c\u0131n\u0131n uzaktan giri\u015f yapmas\u0131n\u0131 engelle?)<br \/>\n    *   <code>y<\/code> se\u00e7ene\u011fini se\u00e7in. K\u00f6k kullan\u0131c\u0131n\u0131n sadece <code>localhost<\/code> \u00fczerinden eri\u015fmesine izin vermek daha g\u00fcvenlidir. Uzaktan eri\u015fim i\u00e7in yeni, ayr\u0131cal\u0131klar\u0131 k\u0131s\u0131tl\u0131 kullan\u0131c\u0131lar olu\u015fturaca\u011f\u0131z.<br \/>\n5.  <strong>Remove test database and access to it?<\/strong> (Test veritaban\u0131n\u0131 ve eri\u015fimini kald\u0131r?)<br \/>\n    *   <code>y<\/code> se\u00e7ene\u011fini se\u00e7in. Test veritaban\u0131 \u00fcretim ortam\u0131nda gereksizdir ve potansiyel bir g\u00fcvenlik a\u00e7\u0131\u011f\u0131d\u0131r.<br \/>\n6.  <strong>Reload privilege tables now?<\/strong> (Ayr\u0131cal\u0131k tablolar\u0131n\u0131 \u015fimdi yeniden y\u00fckle?)<br \/>\n    *   <code>y<\/code> se\u00e7ene\u011fini se\u00e7in. Bu, yapt\u0131\u011f\u0131n\u0131z t\u00fcm de\u011fi\u015fikliklerin hemen etkin olmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>Bu ad\u0131mlar\u0131 tamamlad\u0131ktan sonra MySQL sunucunuz daha g\u00fcvenli bir yap\u0131ya sahip olacakt\u0131r.<\/p>\n<h4>MySQL K\u00f6k Kullan\u0131c\u0131s\u0131 ile Ba\u011flanma<\/h4>\n<p>MySQL k\u00f6k kullan\u0131c\u0131s\u0131 olarak ba\u011flanmak i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">sudo mysql -u root -p<\/code><\/pre>\n<p>\u015eifrenizi girmeniz istenecektir. Ba\u015far\u0131l\u0131 bir \u015fekilde giri\u015f yaparsan\u0131z MySQL komut istemcisini (<code>mysql><\/code>) g\u00f6receksiniz. \u00c7\u0131kmak i\u00e7in <code>exit;<\/code> yaz\u0131p Enter tu\u015funa bas\u0131n.<\/p>\n<h4>Yeni Bir MySQL Kullan\u0131c\u0131s\u0131 ve Veritaban\u0131 Olu\u015fturma<\/h4>\n<p>Web uygulamalar\u0131n\u0131z i\u00e7in genellikle k\u00f6k kullan\u0131c\u0131 yerine \u00f6zel, daha az yetkili bir MySQL kullan\u0131c\u0131s\u0131 ve veritaban\u0131 olu\u015fturmak iyi bir g\u00fcvenlik uygulamas\u0131d\u0131r.<\/p>\n<p>MySQL komut istemcisine ba\u011flan\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo mysql -u root -p<\/code><\/pre>\n<p>\u015eimdi a\u015fa\u011f\u0131daki komutlar\u0131 kullanarak yeni bir veritaban\u0131, kullan\u0131c\u0131 ve yetkiler olu\u015fturun. Kendi veritaban\u0131 ad\u0131n\u0131z\u0131, kullan\u0131c\u0131 ad\u0131n\u0131z\u0131 ve g\u00fc\u00e7l\u00fc \u015fifrenizi kullanmay\u0131 unutmay\u0131n.<\/p>\n<pre><code class=\"language-sql\">CREATE DATABASE example_database;\nCREATE USER 'example_user'@'localhost' IDENTIFIED BY 'your_strong_password';\nGRANT ALL PRIVILEGES ON example_database.* TO 'example_user'@'localhost';\nFLUSH PRIVILEGES;\nEXIT;<\/code><\/pre>\n<p>*   <code>CREATE DATABASE example_database;<\/code>: <code>example_database<\/code> ad\u0131nda yeni bir veritaban\u0131 olu\u015fturur.<br \/>\n*   <code>CREATE USER 'example_user'@'localhost' IDENTIFIED BY 'your_strong_password';<\/code>: <code>example_user<\/code> ad\u0131nda ve belirtilen \u015fifreye sahip yeni bir kullan\u0131c\u0131 olu\u015fturur. <code>@'localhost'<\/code> ifadesi, bu kullan\u0131c\u0131n\u0131n yaln\u0131zca sunucunun kendisinden (yerel olarak) ba\u011flanabilece\u011fi anlam\u0131na gelir.<br \/>\n<em>   <code>GRANT ALL PRIVILEGES ON example_database.<\/em> TO 'example_user'@'localhost';<\/code>: <code>example_database<\/code> \u00fczerindeki t\u00fcm ayr\u0131cal\u0131klar\u0131 <code>example_user<\/code>&#8216;a verir. Y\u0131ld\u0131z i\u015faretleri (<code>.*<\/code>) t\u00fcm tablolar\u0131 ifade eder.<br \/>\n*   <code>FLUSH PRIVILEGES;<\/code>: Ayr\u0131cal\u0131k tablolar\u0131n\u0131 yeniden y\u00fckleyerek de\u011fi\u015fikliklerin hemen etkili olmas\u0131n\u0131 sa\u011flar.<br \/>\n*   <code>EXIT;<\/code>: MySQL komut istemcisinden \u00e7\u0131kar.<\/p>\n<p>Art\u0131k web uygulaman\u0131z bu <code>example_user<\/code> ve <code>example_database<\/code> ile MySQL&#8217;e ba\u011flanabilir.<\/p>\n<h3>PHP Kurulumu<\/h3>\n<p>PHP, dinamik i\u00e7erik olu\u015fturmaktan ve veritaban\u0131 ile ileti\u015fim kurmaktan sorumlu olan LEMP y\u0131\u011f\u0131n\u0131n\u0131n &#8220;P&#8221; bile\u015fenidir. Nginx do\u011frudan PHP dosyalar\u0131n\u0131 i\u015fleyemedi\u011fi i\u00e7in, PHP-FPM (FastCGI Process Manager) kullan\u0131r\u0131z. PHP-FPM, PHP betiklerini \u00e7al\u0131\u015ft\u0131ran ayr\u0131 bir servistir ve Nginx ile ileti\u015fim kurar.<\/p>\n<h4>PHP ve PHP-FPM Kurulumu<\/h4>\n<p>Ubuntu 20.04 varsay\u0131lan olarak PHP 7.4 s\u00fcr\u00fcm\u00fcn\u00fc sunar. PHP-FPM ve Nginx ile MySQL ba\u011flant\u0131s\u0131 i\u00e7in gerekli olan PHP mod\u00fcllerini kural\u0131m:<\/p>\n<pre><code class=\"language-bash\">sudo apt install php-fpm php-mysql php-cli php-curl php-json php-gd php-mbstring php-xml php-zip -y<\/code><\/pre>\n<p>Bu komut, PHP-FPM&#8217;i ve yayg\u0131n olarak kullan\u0131lan di\u011fer PHP uzant\u0131lar\u0131n\u0131 y\u00fckleyecektir:<\/p>\n<p>*   <code>php-fpm<\/code>: PHP FastCGI Process Manager.<br \/>\n*   <code>php-mysql<\/code>: PHP&#8217;nin MySQL veritabanlar\u0131yla ileti\u015fim kurmas\u0131n\u0131 sa\u011flar.<br \/>\n*   <code>php-cli<\/code>: Komut sat\u0131r\u0131ndan PHP betiklerini \u00e7al\u0131\u015ft\u0131rmak i\u00e7in.<br \/>\n*   <code>php-curl<\/code>: PHP&#8217;nin \u00e7e\u015fitli protokoller arac\u0131l\u0131\u011f\u0131yla sunucularla ileti\u015fim kurmas\u0131n\u0131 sa\u011flar.<br \/>\n*   <code>php-json<\/code>: JSON verilerini i\u015flemek i\u00e7in.<br \/>\n*   <code>php-gd<\/code>: G\u00f6r\u00fcnt\u00fc i\u015fleme yetenekleri i\u00e7in (\u00f6rne\u011fin, k\u00fc\u00e7\u00fck resim olu\u015fturma).<br \/>\n*   <code>php-mbstring<\/code>: \u00c7ok baytl\u0131 karakter dizileriyle \u00e7al\u0131\u015fmak i\u00e7in.<br \/>\n*   <code>php-xml<\/code>: XML verilerini i\u015flemek i\u00e7in.<br \/>\n*   <code>php-zip<\/code>: ZIP ar\u015fivlerini i\u015flemek i\u00e7in.<\/p>\n<p>Kurulum tamamland\u0131ktan sonra, PHP-FPM servisi otomatik olarak ba\u015flayacakt\u0131r. Durumunu kontrol edebilirsiniz:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl status php7.4-fpm<\/code><\/pre>\n<p>\u00c7\u0131kt\u0131da <code>active (running)<\/code> ibaresini g\u00f6rmelisiniz.<\/p>\n<h4>PHP Yap\u0131land\u0131rmas\u0131 (\u0130ste\u011fe Ba\u011fl\u0131 ama \u00d6nerilen)<\/h4>\n<p>PHP&#8217;nin baz\u0131 varsay\u0131lan ayarlar\u0131n\u0131 g\u00fcvenlik ve performans i\u00e7in de\u011fi\u015ftirmek isteyebilirsiniz. En \u00f6nemli ayarlardan biri <code>cgi.fix_pathinfo<\/code>&#8216;dur. Bu ayar\u0131n <code>0<\/code> olarak ayarlanmas\u0131, Nginx&#8217;in g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 \u00f6nlemeye yard\u0131mc\u0131 olur.<\/p>\n<p>PHP yap\u0131land\u0131rma dosyas\u0131n\u0131 a\u00e7\u0131n (PHP 7.4 i\u00e7in):<\/p>\n<pre><code class=\"language-bash\">sudo nano \/etc\/php\/7.4\/fpm\/php.ini<\/code><\/pre>\n<p>Dosya i\u00e7inde <code>cgi.fix_pathinfo<\/code> sat\u0131r\u0131n\u0131 bulun (Ctrl+W ile arayabilirsiniz). Varsay\u0131lan olarak yorum sat\u0131r\u0131 (<code>#<\/code> veya <code>;<\/code> ile ba\u015flar) veya <code>1<\/code> olarak ayarlanm\u0131\u015f olabilir.<\/p>\n<pre><code class=\"language-ini\">;cgi.fix_pathinfo=1<\/code><\/pre>\n<p>Bu sat\u0131r\u0131 a\u015fa\u011f\u0131daki gibi de\u011fi\u015ftirin (yorum sat\u0131r\u0131n\u0131 kald\u0131r\u0131n ve de\u011feri <code>0<\/code> yap\u0131n):<\/p>\n<pre><code class=\"language-ini\">cgi.fix_pathinfo=0<\/code><\/pre>\n<p>De\u011fi\u015fikli\u011fi kaydetmek i\u00e7in <code>Ctrl+O<\/code>, \u00e7\u0131kmak i\u00e7in <code>Ctrl+X<\/code> tu\u015flar\u0131na bas\u0131n.<\/p>\n<p>De\u011fi\u015fikliklerin etkili olmas\u0131 i\u00e7in PHP-FPM servisini yeniden ba\u015flat\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl restart php7.4-fpm<\/code><\/pre>\n<h3>Nginx&#8217;i PHP ile \u00c7al\u0131\u015facak \u015eekilde Yap\u0131land\u0131rma<\/h3>\n<p>Nginx&#8217;in PHP dosyalar\u0131n\u0131 PHP-FPM arac\u0131l\u0131\u011f\u0131yla i\u015flemesi i\u00e7in bir sunucu blo\u011fu (server block) yap\u0131land\u0131rmas\u0131 yapman\u0131z gerekir. Varsay\u0131lan Nginx yap\u0131land\u0131rma dosyas\u0131n\u0131 de\u011fi\u015ftirebilir veya kendi siteniz i\u00e7in yeni bir dosya olu\u015fturabilirsiniz. Yeni bir dosya olu\u015fturmak daha iyi bir uygulamad\u0131r, \u00f6zellikle birden fazla web sitesi bar\u0131nd\u0131racaksan\u0131z.<\/p>\n<h4>Yeni Bir Nginx Sunucu Blo\u011fu Olu\u015fturma<\/h4>\n<p>\u00d6rnek olarak <code>example.com<\/code> ad\u0131nda bir alan ad\u0131 i\u00e7in yeni bir sunucu blo\u011fu olu\u015fturaca\u011f\u0131z. Web sitenizin k\u00f6k dizini genellikle <code>\/var\/www\/html<\/code> alt\u0131nda bulunur. Kendi alan ad\u0131n\u0131z\u0131 ve dizin yolunuzu kullanmay\u0131 unutmay\u0131n.<\/p>\n<p>\u00d6ncelikle web siteniz i\u00e7in bir k\u00f6k dizini olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-bash\">sudo mkdir -p \/var\/www\/example.com\/html<\/code><\/pre>\n<p>Bu dizinin sahipli\u011fini web sunucusu kullan\u0131c\u0131s\u0131na (genellikle <code>www-data<\/code>) verin:<\/p>\n<pre><code class=\"language-bash\">sudo chown -R www-data:www-data \/var\/www\/example.com\/html\nsudo chmod -R 755 \/var\/www\/example.com<\/code><\/pre>\n<p>\u015eimdi, yeni bir Nginx sunucu blo\u011fu yap\u0131land\u0131rma dosyas\u0131 olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-bash\">sudo nano \/etc\/nginx\/sites-available\/example.com<\/code><\/pre>\n<p>Dosyan\u0131n i\u00e7ine a\u015fa\u011f\u0131daki i\u00e7eri\u011fi yap\u0131\u015ft\u0131r\u0131n. <code>server_name<\/code> k\u0131sm\u0131n\u0131 kendi alan ad\u0131n\u0131zla de\u011fi\u015ftirmeyi unutmay\u0131n. E\u011fer hen\u00fcz bir alan ad\u0131n\u0131z yoksa, sunucunuzun IP adresini kullanabilirsiniz.<\/p>\n<pre><code class=\"language-nginx\">server {\n    listen 80;\n    listen [::]:80;\n\n    root \/var\/www\/example.com\/html;\n    index index.php index.html index.htm index.nginx-debian.html;\n\n    server_name example.com www.example.com; # Kendi alan ad\u0131n\u0131z\u0131 buraya yaz\u0131n\n\n    location \/ {\n        try_files $uri $uri\/ =404;\n    }\n\n    location ~ \\.php$ {\n        include snippets\/fastcgi-php.conf;\n        fastcgi_pass unix:\/var\/run\/php\/php7.4-fpm.sock; # PHP-FPM s\u00fcr\u00fcm\u00fcn\u00fcze dikkat edin\n    }\n\n    location ~ \/\\.ht {\n        deny all;\n    }\n}<\/code><\/pre>\n<p>Bu yap\u0131land\u0131rma dosyas\u0131ndaki \u00f6nemli direktifler:<\/p>\n<p>*   <code>listen 80;<\/code>: Nginx&#8217;in 80 numaral\u0131 ba\u011flant\u0131 noktas\u0131n\u0131 (HTTP) dinlemesini sa\u011flar.<br \/>\n*   <code>root \/var\/www\/example.com\/html;<\/code>: Web sitenizin k\u00f6k dizinini belirtir.<br \/>\n*   <code>index ...;<\/code>: Varsay\u0131lan olarak aranacak dosya adlar\u0131n\u0131 belirtir. <code>index.php<\/code>&#8216;yi ekledi\u011fimizden emin olun.<br \/>\n*   <code>server_name example.com www.example.com;<\/code>: Bu sunucu blo\u011funun hangi alan adlar\u0131 i\u00e7in ge\u00e7erli oldu\u011funu belirtir.<br \/>\n*   <code>location \/ { ... }<\/code>: Herhangi bir iste\u011fin nas\u0131l i\u015flenece\u011fini tan\u0131mlar. <code>try_files<\/code> direktifi, dosyan\u0131n veya dizinin var olup olmad\u0131\u011f\u0131n\u0131 kontrol eder, yoksa 404 hatas\u0131 d\u00f6nd\u00fcr\u00fcr.<br \/>\n*   <code>location ~ \\.php$ { ... }<\/code>: <code>.php<\/code> uzant\u0131l\u0131 dosya isteklerinin nas\u0131l i\u015flenece\u011fini tan\u0131mlar.<br \/>\n    *   <code>include snippets\/fastcgi-php.conf;<\/code>: PHP-FPM i\u00e7in FastCGI parametrelerini i\u00e7erir.<br \/>\n    *   <code>fastcgi_pass unix:\/var\/run\/php\/php7.4-fpm.sock;<\/code>: \u0130stekleri PHP-FPM&#8217;e iletir. Soket yolu PHP-FPM s\u00fcr\u00fcm\u00fcn\u00fcze g\u00f6re de\u011fi\u015febilir (\u00f6rn. <code>php7.4-fpm.sock<\/code>).<br \/>\n*   <code>location ~ \/\\.ht { ... }<\/code>: <code>.htaccess<\/code> gibi gizli dosyalar\u0131n do\u011frudan eri\u015fimini engeller. Nginx <code>.htaccess<\/code> dosyalar\u0131n\u0131 kullanmaz, ancak bu bir g\u00fcvenlik \u00f6nlemidir.<\/p>\n<p>De\u011fi\u015fiklikleri kaydedip dosyadan \u00e7\u0131k\u0131n.<\/p>\n<h4>Sunucu Blo\u011funu Etkinle\u015ftirme<\/h4>\n<p>Yeni sunucu blo\u011funu etkinle\u015ftirmek i\u00e7in, <code>sites-available<\/code> dizinindeki yap\u0131land\u0131rma dosyan\u0131za <code>sites-enabled<\/code> dizininde bir sembolik ba\u011flant\u0131 (symlink) olu\u015fturman\u0131z gerekir:<\/p>\n<pre><code class=\"language-bash\">sudo ln -s \/etc\/nginx\/sites-available\/example.com \/etc\/nginx\/sites-enabled\/<\/code><\/pre>\n<p>Nginx&#8217;in varsay\u0131lan yap\u0131land\u0131rmas\u0131n\u0131 devre d\u0131\u015f\u0131 b\u0131rakmak iyi bir uygulamad\u0131r, b\u00f6ylece yeni yap\u0131land\u0131rman\u0131z \u00e7ak\u0131\u015fmaz:<\/p>\n<pre><code class=\"language-bash\">sudo unlink \/etc\/nginx\/sites-enabled\/default<\/code><\/pre>\n<h4>Nginx Yap\u0131land\u0131rmas\u0131n\u0131 Test Etme ve Yeniden Ba\u015flatma<\/h4>\n<p>Yeni yap\u0131land\u0131rman\u0131z\u0131n s\u00f6zdizimsel olarak do\u011fru oldu\u011fundan emin olmak i\u00e7in Nginx&#8217;i test edin:<\/p>\n<pre><code class=\"language-bash\">sudo nginx -t<\/code><\/pre>\n<p>E\u011fer <code>syntax is ok<\/code> ve <code>test is successful<\/code> mesajlar\u0131n\u0131 g\u00f6r\u00fcrseniz, her \u015fey yolundad\u0131r. Herhangi bir hata varsa, yap\u0131land\u0131rma dosyan\u0131z\u0131 kontrol edin ve d\u00fczeltin.<\/p>\n<p>\u015eimdi Nginx servisini yeniden ba\u015flat\u0131n, b\u00f6ylece yeni yap\u0131land\u0131rman\u0131z etkinle\u015fir:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl restart nginx<\/code><\/pre>\n<h3>PHP \u0130\u015flemini Test Etme<\/h3>\n<p>LEMP y\u0131\u011f\u0131n\u0131m\u0131z\u0131n d\u00fczg\u00fcn \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 do\u011frulamak i\u00e7in web sitenizin k\u00f6k dizinine basit bir PHP bilgi dosyas\u0131 olu\u015ftural\u0131m.<\/p>\n<pre><code class=\"language-bash\">sudo nano \/var\/www\/example.com\/html\/info.php<\/code><\/pre>\n<p>Dosyan\u0131n i\u00e7ine a\u015fa\u011f\u0131daki PHP kodunu yap\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-php\"><?php\nphpinfo();\n?><\/code><\/pre>\n<p>De\u011fi\u015fiklikleri kaydedip dosyadan \u00e7\u0131k\u0131n.<\/p>\n<p>\u015eimdi web taray\u0131c\u0131n\u0131z\u0131 a\u00e7\u0131n ve <code>http:\/\/your_domain_or_IP_address\/info.php<\/code> adresine gidin.<\/p>\n<p>E\u011fer her \u015fey do\u011fru kurulduysa, PHP s\u00fcr\u00fcm\u00fcn\u00fcz, yap\u0131land\u0131rma ayarlar\u0131n\u0131z ve y\u00fckl\u00fc uzant\u0131lar\u0131n\u0131z hakk\u0131nda detayl\u0131 bilgi i\u00e7eren bir PHP bilgi sayfas\u0131 g\u00f6rmelisiniz. Bu sayfa, Nginx&#8217;in PHP-FPM ile ba\u015far\u0131l\u0131 bir \u015fekilde ileti\u015fim kurdu\u011funu ve PHP betiklerini i\u015fleyebildi\u011fini kan\u0131tlar.<\/p>\n<p><strong>\u00d6nemli G\u00fcvenlik Notu:<\/strong> <code>phpinfo.php<\/code> dosyas\u0131, sunucunuz hakk\u0131nda hassas bilgiler i\u00e7erir. Testi tamamlad\u0131ktan sonra bu dosyay\u0131 silmeniz <strong>\u015fiddetle tavsiye edilir<\/strong>.<\/p>\n<pre><code class=\"language-bash\">sudo rm \/var\/www\/example.com\/html\/info.php<\/code><\/pre>\n<h3>LEMP Y\u0131\u011f\u0131n\u0131n\u0131 G\u00fcvenli Hale Getirme<\/h3>\n<p>Temel LEMP kurulumunu tamamlad\u0131n\u0131z, ancak bir \u00fcretim ortam\u0131 i\u00e7in sunucunuzu daha da g\u00fcvenli hale getirmek kritik \u00f6neme sahiptir.<\/p>\n<h4>UFW G\u00fcvenlik Duvar\u0131<\/h4>\n<p>Daha \u00f6nce UFW&#8217;yi etkinle\u015ftirmi\u015ftik. E\u011fer Nginx Full profilini kullanmak isterseniz (HTTP ve HTTPS i\u00e7in), HTTP&#8217;yi kapat\u0131p Full profilini a\u00e7abilirsiniz:<\/p>\n<pre><code class=\"language-bash\">sudo ufw delete allow 'Nginx HTTP'\nsudo ufw allow 'Nginx Full'\nsudo ufw status<\/code><\/pre>\n<p>Bu, hem 80 hem de 443 numaral\u0131 ba\u011flant\u0131 noktalar\u0131na izin verecektir.<\/p>\n<h4>SSH G\u00fcvenli\u011fi<\/h4>\n<p>*   <strong>SSH Anahtar Tabanl\u0131 Kimlik Do\u011frulama:<\/strong> \u015eifre tabanl\u0131 kimlik do\u011frulamas\u0131 yerine SSH anahtar \u00e7iftleri kullanarak giri\u015f yap\u0131n. Bu, kaba kuvvet sald\u0131r\u0131lar\u0131na kar\u015f\u0131 \u00e7ok daha g\u00fcvenlidir.<br \/>\n*   <strong>Varsay\u0131lan SSH Portunu De\u011fi\u015ftirme:<\/strong> SSH servisi i\u00e7in varsay\u0131lan 22 numaral\u0131 portu farkl\u0131 bir portla de\u011fi\u015ftirmek, otomatik botlar\u0131n sald\u0131r\u0131lar\u0131n\u0131 azaltabilir.<br \/>\n*   <strong>K\u00f6k Kullan\u0131c\u0131n\u0131n Do\u011frudan Giri\u015fini Engelleme:<\/strong> <code>PermitRootLogin no<\/code> ayar\u0131n\u0131 <code>\/etc\/ssh\/sshd_config<\/code> dosyas\u0131nda yaparak k\u00f6k kullan\u0131c\u0131n\u0131n SSH \u00fczerinden do\u011frudan oturum a\u00e7mas\u0131n\u0131 engelleyin. Bunun yerine, sudo yetkilerine sahip normal bir kullan\u0131c\u0131 ile giri\u015f yap\u0131n ve gerekti\u011finde <code>sudo<\/code> kullan\u0131n.<\/p>\n<h4>Nginx G\u00fcvenli\u011fi<\/h4>\n<p>*   <strong>Nginx S\u00fcr\u00fcm\u00fcn\u00fc Gizleme:<\/strong> Nginx&#8217;in s\u00fcr\u00fcm bilgisini HTTP yan\u0131t ba\u015fl\u0131klar\u0131nda gizlemek, potansiyel sald\u0131rganlar\u0131n belirli g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 hedeflemesini zorla\u015ft\u0131r\u0131r. <code>server_tokens off;<\/code> direktifini <code>http<\/code> veya <code>server<\/code> blo\u011funa ekleyin.<br \/>\n*   <strong>SSL\/TLS (HTTPS) Kurulumu:<\/strong> T\u00fcm web trafi\u011finizi \u015fifrelemek i\u00e7in SSL\/TLS sertifikas\u0131 kullan\u0131n. Let&#8217;s Encrypt, \u00fccretsiz sertifikalar sunar ve Certbot arac\u0131yla kolayca kurulabilir.<\/p>\n<h5>Let&#8217;s Encrypt ile SSL\/TLS Kurulumu<\/h5>\n<p>Bu, web sitenizin g\u00fcvenli\u011fi i\u00e7in olmazsa olmaz bir ad\u0131md\u0131r.<\/p>\n<p>1.  <strong>Certbot Kurulumu:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo apt install certbot python3-certbot-nginx -y<\/code><\/pre>\n<p>2.  <strong>Sertifika Alma:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo certbot --nginx -d example.com -d www.example.com<\/code><\/pre>\n<p>    Bu komutu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda, Certbot sizi bir dizi soruyla y\u00f6nlendirecektir: e-posta adresiniz, hizmet \u015fartlar\u0131n\u0131 kabul etmeniz vb. Ayr\u0131ca, HTTP trafi\u011fini otomatik olarak HTTPS&#8217;ye y\u00f6nlendirmek isteyip istemedi\u011finizi soracakt\u0131r. Genellikle &#8220;Redirect&#8221; se\u00e7ene\u011fini se\u00e7mek iyi bir fikirdir.<br \/>\n3.  <strong>Otomatik Yenileme Testi:<\/strong><br \/>\n    Let&#8217;s Encrypt sertifikalar\u0131 90 g\u00fcn ge\u00e7erlidir. Certbot, otomatik yenileme i\u00e7in bir cron i\u015fi veya systemd zamanlay\u0131c\u0131s\u0131 kurar. Yenileme s\u00fcrecinin \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olmak i\u00e7in bir test yapabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">sudo certbot renew --dry-run<\/code><\/pre>\n<p>    E\u011fer herhangi bir hata g\u00f6rmezseniz, otomatik yenileme d\u00fczg\u00fcn \u00e7al\u0131\u015f\u0131yor demektir.<\/p>\n<p>Certbot kurulumundan sonra Nginx yap\u0131land\u0131rma dosyan\u0131z otomatik olarak g\u00fcncellenecek ve 80 numaral\u0131 porttan gelen istekler 443 numaral\u0131 porta y\u00f6nlendirilecektir. Ayr\u0131ca, <code>Nginx Full<\/code> UFW kural\u0131na izin verdi\u011finizden emin olun.<\/p>\n<h4>PHP G\u00fcvenli\u011fi<\/h4>\n<p>*   <strong><code>disable_functions<\/code>:<\/strong> <code>php.ini<\/code> dosyas\u0131nda, sunucunuzda \u00e7al\u0131\u015fmamas\u0131 gereken tehlikeli PHP fonksiyonlar\u0131n\u0131 devre d\u0131\u015f\u0131 b\u0131rak\u0131n (\u00f6rn. <code>exec<\/code>, <code>shell_exec<\/code>, <code>passthru<\/code>).<br \/>\n*   <strong><code>allow_url_fopen<\/code> ve <code>allow_url_include<\/code>:<\/strong> Bu ayarlar\u0131n devre d\u0131\u015f\u0131 b\u0131rak\u0131lmas\u0131, uzaktan dosya dahil etme (RFI) sald\u0131r\u0131lar\u0131n\u0131 \u00f6nlemeye yard\u0131mc\u0131 olabilir.<br \/>\n*   <strong>Hata Raporlamas\u0131n\u0131 Kapatma:<\/strong> \u00dcretim ortam\u0131nda <code>display_errors = Off<\/code> olarak ayarlay\u0131n. Hatalar\u0131 bir log dosyas\u0131na yazd\u0131r\u0131n (<code>log_errors = On<\/code>).<br \/>\n*   <strong>PHP S\u00fcr\u00fcm\u00fcn\u00fc G\u00fcncel Tutma:<\/strong> Eski PHP s\u00fcr\u00fcmlerinde bilinen g\u00fcvenlik a\u00e7\u0131klar\u0131 olabilir. Her zaman en son stabil PHP s\u00fcr\u00fcm\u00fcn\u00fc kullanmaya \u00e7al\u0131\u015f\u0131n.<\/p>\n<h4>MySQL G\u00fcvenli\u011fi<\/h4>\n<p>*   <strong>G\u00fc\u00e7l\u00fc \u015eifreler:<\/strong> T\u00fcm MySQL kullan\u0131c\u0131lar\u0131 i\u00e7in g\u00fc\u00e7l\u00fc ve benzersiz \u015fifreler kullan\u0131n.<br \/>\n*   <strong>En Az Ayr\u0131cal\u0131k Prensibi:<\/strong> Uygulamalar\u0131n\u0131z\u0131n veritaban\u0131 kullan\u0131c\u0131lar\u0131na yaln\u0131zca ihtiya\u00e7 duyduklar\u0131 ayr\u0131cal\u0131klar\u0131 verin. \u00d6rne\u011fin, bir web sitesi kullan\u0131c\u0131s\u0131n\u0131n <code>DROP TABLE<\/code> veya <code>GRANT<\/code> gibi ayr\u0131cal\u0131klara ihtiyac\u0131 yoktur.<br \/>\n*   <strong>Uzak Eri\u015fimi K\u0131s\u0131tlama:<\/strong> MySQL k\u00f6k kullan\u0131c\u0131s\u0131n\u0131n uzaktan eri\u015fimini engelledik. Di\u011fer kullan\u0131c\u0131lar i\u00e7in de uzaktan eri\u015fim gerekiyorsa, yaln\u0131zca belirli IP adreslerinden eri\u015fime izin verin.<br \/>\n*   <strong>D\u00fczenli Yedeklemeler:<\/strong> Veri kayb\u0131n\u0131 \u00f6nlemek i\u00e7in veritabanlar\u0131n\u0131z\u0131n d\u00fczenli yedeklerini al\u0131n.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Tebrikler! Ubuntu 20.04 sunucunuz \u00fczerine Linux, Nginx, MySQL ve PHP (LEMP) y\u0131\u011f\u0131n\u0131n\u0131 ba\u015far\u0131yla kurdunuz ve temel g\u00fcvenlik yap\u0131land\u0131rmalar\u0131n\u0131 ger\u00e7ekle\u015ftirdiniz. Bu kapsaml\u0131 rehber, modern web uygulamalar\u0131n\u0131z i\u00e7in sa\u011flam ve y\u00fcksek performansl\u0131 bir temel olu\u015fturman\u0131za yard\u0131mc\u0131 oldu.<\/p>\n<p>Art\u0131k sunucunuz, dinamik web sitelerini ve uygulamalar\u0131n\u0131 bar\u0131nd\u0131rmaya haz\u0131rd\u0131r. Bu kurulumun \u00fczerine favori i\u00e7erik y\u00f6netim sistemlerinizi (WordPress, Joomla, Drupal vb.) veya \u00f6zel PHP tabanl\u0131 uygulamalar\u0131n\u0131z\u0131 da\u011f\u0131tabilirsiniz. Unutmay\u0131n ki sunucu y\u00f6netimi s\u00fcrekli bir s\u00fcre\u00e7tir. Sunucunuzu d\u00fczenli olarak g\u00fcncellemek, g\u00fcvenlik ayarlar\u0131n\u0131z\u0131 g\u00f6zden ge\u00e7irmek ve performans\u0131n\u0131 izlemek, uzun vadede sorunsuz bir deneyim i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<p>\u0130leri d\u00fczey optimizasyonlar ve g\u00fcvenlik \u00f6nlemleri i\u00e7in Nginx, MySQL ve PHP&#8217;nin belgelerini incelemeyi d\u00fc\u015f\u00fcnebilirsiniz. \u00d6rne\u011fin, Nginx i\u00e7in \u00f6nbellekleme (caching), PHP i\u00e7in OPcache kullan\u0131m\u0131 ve MySQL i\u00e7in sorgu optimizasyonu gibi konular, uygulaman\u0131z\u0131n performans\u0131n\u0131 daha da art\u0131rabilir. G\u00fcvenli\u011finiz i\u00e7in ise fail2ban gibi ara\u00e7larla kaba kuvvet sald\u0131r\u0131lar\u0131n\u0131 engellemeyi veya merkezi log y\u00f6netimi \u00e7\u00f6z\u00fcmlerini kullanmay\u0131 ara\u015ft\u0131rabilirsiniz. Ba\u015far\u0131lar dileriz!<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Ubuntu 20.04 \u00dczerine Linux, Nginx, MySQL, PHP (LEMP Stack) Kurulumu: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber\nModern web uygulamalar\u0131 i\u00e7in sa\u011flam, h\u0131zl\u0131 ve","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":[241],"tags":[],"class_list":{"0":"post-39797","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-linux","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>Ubuntu 20.04 \u00dczerine Linux, Nginx, MySQL, PHP (LEMP Stack) Kurulumu: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\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\/ubuntu-20-04-uzerine-linux-nginx-mysql-php-lemp-stack-kurulumu-adim-adim-kapsamli-rehber\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ubuntu 20.04 \u00dczerine Linux, Nginx, MySQL, PHP (LEMP Stack) Kurulumu: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber\" \/>\n<meta property=\"og:description\" content=\"Ubuntu 20.04 \u00dczerine Linux, Nginx, MySQL, PHP (LEMP Stack) Kurulumu: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber Modern web uygulamalar\u0131 i\u00e7in sa\u011flam, h\u0131zl\u0131 ve\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerine-linux-nginx-mysql-php-lemp-stack-kurulumu-adim-adim-kapsamli-rehber\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-23T22:40:45+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=\"19 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerine-linux-nginx-mysql-php-lemp-stack-kurulumu-adim-adim-kapsamli-rehber\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerine-linux-nginx-mysql-php-lemp-stack-kurulumu-adim-adim-kapsamli-rehber\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Ubuntu 20.04 \u00dczerine Linux, Nginx, MySQL, PHP (LEMP Stack) Kurulumu: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber\",\"datePublished\":\"2026-02-23T22:40:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerine-linux-nginx-mysql-php-lemp-stack-kurulumu-adim-adim-kapsamli-rehber\/\"},\"wordCount\":3289,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Linux\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerine-linux-nginx-mysql-php-lemp-stack-kurulumu-adim-adim-kapsamli-rehber\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerine-linux-nginx-mysql-php-lemp-stack-kurulumu-adim-adim-kapsamli-rehber\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerine-linux-nginx-mysql-php-lemp-stack-kurulumu-adim-adim-kapsamli-rehber\/\",\"name\":\"Ubuntu 20.04 \u00dczerine Linux, Nginx, MySQL, PHP (LEMP Stack) Kurulumu: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-02-23T22:40:45+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerine-linux-nginx-mysql-php-lemp-stack-kurulumu-adim-adim-kapsamli-rehber\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerine-linux-nginx-mysql-php-lemp-stack-kurulumu-adim-adim-kapsamli-rehber\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerine-linux-nginx-mysql-php-lemp-stack-kurulumu-adim-adim-kapsamli-rehber\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ubuntu 20.04 \u00dczerine Linux, Nginx, MySQL, PHP (LEMP Stack) Kurulumu: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber\"}]},{\"@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":"Ubuntu 20.04 \u00dczerine Linux, Nginx, MySQL, PHP (LEMP Stack) Kurulumu: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","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\/ubuntu-20-04-uzerine-linux-nginx-mysql-php-lemp-stack-kurulumu-adim-adim-kapsamli-rehber\/","og_locale":"tr_TR","og_type":"article","og_title":"Ubuntu 20.04 \u00dczerine Linux, Nginx, MySQL, PHP (LEMP Stack) Kurulumu: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber","og_description":"Ubuntu 20.04 \u00dczerine Linux, Nginx, MySQL, PHP (LEMP Stack) Kurulumu: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber Modern web uygulamalar\u0131 i\u00e7in sa\u011flam, h\u0131zl\u0131 ve","og_url":"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerine-linux-nginx-mysql-php-lemp-stack-kurulumu-adim-adim-kapsamli-rehber\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-02-23T22:40:45+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"19 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerine-linux-nginx-mysql-php-lemp-stack-kurulumu-adim-adim-kapsamli-rehber\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerine-linux-nginx-mysql-php-lemp-stack-kurulumu-adim-adim-kapsamli-rehber\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Ubuntu 20.04 \u00dczerine Linux, Nginx, MySQL, PHP (LEMP Stack) Kurulumu: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber","datePublished":"2026-02-23T22:40:45+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerine-linux-nginx-mysql-php-lemp-stack-kurulumu-adim-adim-kapsamli-rehber\/"},"wordCount":3289,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Linux"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerine-linux-nginx-mysql-php-lemp-stack-kurulumu-adim-adim-kapsamli-rehber\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerine-linux-nginx-mysql-php-lemp-stack-kurulumu-adim-adim-kapsamli-rehber\/","url":"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerine-linux-nginx-mysql-php-lemp-stack-kurulumu-adim-adim-kapsamli-rehber\/","name":"Ubuntu 20.04 \u00dczerine Linux, Nginx, MySQL, PHP (LEMP Stack) Kurulumu: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-02-23T22:40:45+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerine-linux-nginx-mysql-php-lemp-stack-kurulumu-adim-adim-kapsamli-rehber\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerine-linux-nginx-mysql-php-lemp-stack-kurulumu-adim-adim-kapsamli-rehber\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerine-linux-nginx-mysql-php-lemp-stack-kurulumu-adim-adim-kapsamli-rehber\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Ubuntu 20.04 \u00dczerine Linux, Nginx, MySQL, PHP (LEMP Stack) Kurulumu: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber"}]},{"@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\/39797","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=39797"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39797\/revisions"}],"predecessor-version":[{"id":39798,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39797\/revisions\/39798"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=39797"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=39797"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=39797"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}