{"id":31125,"date":"2025-10-06T02:41:57","date_gmt":"2025-10-05T23:41:57","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=31125"},"modified":"2025-10-06T02:41:57","modified_gmt":"2025-10-05T23:41:57","slug":"gereksinimler","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/gereksinimler\/","title":{"rendered":"Gereksinimler"},"content":{"rendered":"<p><body><\/p>\n<p>Symfony, PHP tabanl\u0131, modern ve g\u00fc\u00e7l\u00fc web uygulamalar\u0131 geli\u015ftirmek i\u00e7in kullan\u0131lan pop\u00fcler bir framework&#8217;t\u00fcr. \u00dcretim ortam\u0131na da\u011f\u0131t\u0131m\u0131 ise genellikle dikkatli bir planlama ve do\u011fru yap\u0131land\u0131rma gerektirir. Bu rehberde, bir Symfony 4 uygulamas\u0131n\u0131 Ubuntu 18.04 i\u015fletim sistemi \u00fczerinde LEMP (Linux, Nginx, MySQL\/MariaDB, PHP-FPM) y\u0131\u011f\u0131n\u0131 kullanarak \u00fcretim ortam\u0131na nas\u0131l da\u011f\u0131taca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m \u00f6\u011freneceksiniz.<\/p>\n<p>LEMP, y\u00fcksek performans ve kaynak verimlili\u011fi sunan g\u00fc\u00e7l\u00fc bir kombinasyondur. Nginx hafif yap\u0131s\u0131yla statik i\u00e7erik sunumunda ve PHP-FPM ile dinamik i\u00e7erik i\u015flemede olduk\u00e7a etkilidir. Ubuntu 18.04 ise uzun s\u00fcreli destek (LTS) sunan stabil bir i\u015fletim sistemidir.<\/p>\n<h2>Gereksinimler<\/h2>\n<p>Bu rehbere ba\u015flamadan \u00f6nce a\u015fa\u011f\u0131daki maddelere sahip oldu\u011funuzdan emin olun:<\/p>\n<ul>\n<li>Ubuntu 18.04 y\u00fckl\u00fc bir sunucu (VPS veya fiziksel).<\/li>\n<li>SSH eri\u015fimi olan bir kullan\u0131c\u0131 (sudo yetkileri \u00f6nerilir).<\/li>\n<li>Temel Linux komut sat\u0131r\u0131 bilgisi.<\/li>\n<li>\u00dcretim ortam\u0131na da\u011f\u0131t\u0131lmaya haz\u0131r bir Symfony 4 uygulamas\u0131.<\/li>\n<\/ul>\n<h2>1. Sunucu Haz\u0131rl\u0131\u011f\u0131 ve LEMP Kurulumu<\/h2>\n<p>\u0130lk ad\u0131m, sunucunuzu g\u00fcncelleyip gerekli LEMP bile\u015fenlerini kurmakt\u0131r.<\/p>\n<h3>Sistem G\u00fcncellemesi<\/h3>\n<p>Sunucunuzdaki paket listelerini g\u00fcncelleyin ve y\u00fckl\u00fc 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<h3>Nginx Kurulumu<\/h3>\n<p>Nginx, web sunucusu olarak g\u00f6rev yapacak ve gelen HTTP isteklerini i\u015fleyecektir.<\/p>\n<pre><code class=\"language-bash\">sudo apt install nginx -y<\/code><\/pre>\n<p>Kurulumdan sonra Nginx&#8217;in \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 kontrol edebilirsiniz:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl status nginx<\/code><\/pre>\n<p>Taray\u0131c\u0131n\u0131zdan sunucunuzun IP adresine giderek &#8220;Welcome to Nginx!&#8221; sayfas\u0131n\u0131 g\u00f6rmeniz gerekir.<\/p>\n<h3>MySQL veya MariaDB Kurulumu<\/h3>\n<p>Veritaban\u0131 olarak MySQL veya MariaDB kullanabilirsiniz. Bu rehberde MariaDB&#8217;yi tercih edece\u011fiz, zira MySQL ile b\u00fcy\u00fck \u00f6l\u00e7\u00fcde uyumludur ve a\u00e7\u0131k kaynak toplulu\u011fu taraf\u0131ndan desteklenir.<\/p>\n<pre><code class=\"language-bash\">sudo apt install mariadb-server mariadb-client -y<\/code><\/pre>\n<p>Kurulumdan sonra veritaban\u0131 sunucunuzu g\u00fcvence alt\u0131na almak i\u00e7in g\u00fcvenlik beti\u011fini \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo mysql_secure_installation<\/code><\/pre>\n<p>Bu betik size root \u015fifresi belirleme, anonim kullan\u0131c\u0131lar\u0131 kald\u0131rma, root&#8217;un uzaktan giri\u015fini engelleme ve test veritaban\u0131n\u0131 kald\u0131rma gibi konularda sorular soracakt\u0131r. Genellikle t\u00fcm sorulara &#8216;Y&#8217; (Evet) yan\u0131t\u0131 vermeniz \u00f6nerilir.<\/p>\n<h3>PHP-FPM Kurulumu<\/h3>\n<p>Symfony, PHP ile \u00e7al\u0131\u015ft\u0131\u011f\u0131 i\u00e7in PHP&#8217;nin kendisini ve Nginx ile ileti\u015fim kurmas\u0131n\u0131 sa\u011flayacak PHP-FPM&#8217;i (FastCGI Process Manager) kurmam\u0131z gerekiyor. Symfony 4 genellikle PHP 7.2 veya \u00fcst\u00fcn\u00fc gerektirir. Ubuntu 18.04&#8217;\u00fcn varsay\u0131lan depolar\u0131nda PHP 7.2 bulunur. Daha yeni bir PHP s\u00fcr\u00fcm\u00fc (7.3, 7.4) kullanmak isterseniz, bir PPA (Personal Package Archive) eklemeniz gerekebilir. Bu rehberde PHP 7.2 kullanaca\u011f\u0131z.<\/p>\n<pre><code class=\"language-bash\">sudo apt install php-fpm php-mysql php-mbstring php-xml php-zip php-intl php-gd php-curl php-json php-common -y<\/code><\/pre>\n<p>Gereksinimleriniz do\u011frultusunda ek PHP uzant\u0131lar\u0131 y\u00fcklemeniz gerekebilir. \u00d6rne\u011fin, Doctrine ile \u00e7al\u0131\u015f\u0131yorsan\u0131z <code>php-pdo<\/code> veya YAML dosyalar\u0131 i\u00e7in <code>php-yaml<\/code>.<\/p>\n<p>Kurulumdan sonra PHP-FPM&#8217;in \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 kontrol edin:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl status php7.2-fpm<\/code><\/pre>\n<h2>2. Symfony Uygulamas\u0131n\u0131n Sunucuya Aktar\u0131m\u0131<\/h2>\n<p>Uygulaman\u0131z\u0131 sunucuya aktarmak i\u00e7in Git, SCP veya FTP gibi y\u00f6ntemler kullanabilirsiniz. Git, versiyon kontrol\u00fc ve kolay g\u00fcncellemeler sa\u011flad\u0131\u011f\u0131 i\u00e7in en \u00e7ok tercih edilen y\u00f6ntemdir.<\/p>\n<h3>Git ile Klonlama<\/h3>\n<p>Uygulaman\u0131z\u0131 sunucuda bar\u0131nd\u0131rmak istedi\u011finiz bir dizine klonlay\u0131n. Genellikle <code>\/var\/www\/<\/code> dizini tercih edilir.<\/p>\n<pre><code class=\"language-bash\">cd \/var\/www\/\nsudo git clone <your-symfony-repo-url> <your-project-name>\ncd <your-project-name><\/code><\/pre>\n<p>\u00d6rne\u011fin: <code>sudo git clone https:\/\/github.com\/youruser\/your-symfony-app.git myapp<\/code><\/p>\n<h3>Dizin \u0130zinlerinin Ayarlanmas\u0131<\/h3>\n<p>Web sunucunuzun (Nginx ve PHP-FPM) Symfony uygulaman\u0131z\u0131n <code>var\/cache<\/code> ve <code>var\/log<\/code> dizinlerine yazma iznine sahip olmas\u0131 gerekir. Nginx genellikle <code>www-data<\/code> kullan\u0131c\u0131s\u0131 ve grubuyla \u00e7al\u0131\u015f\u0131r.<\/p>\n<pre><code class=\"language-bash\">sudo chown -R www-data:www-data var public\nsudo chmod -R 775 var public<\/code><\/pre>\n<p>Baz\u0131 durumlarda, daha genel bir yakla\u015f\u0131m olarak, web sunucusu kullan\u0131c\u0131s\u0131n\u0131 (www-data) projenin grubuna ekleyip ACL (Access Control List) kullanmak daha g\u00fcvenli olabilir:<\/p>\n<pre><code class=\"language-bash\">sudo setfacl -R -m u:www-data:rwX -m u:<code>whoami<\/code>:rwX var public\nsudo setfacl -dR -m u:www-data:rwX -m u:<code>whoami<\/code>:rwX var public<\/code><\/pre>\n<p><code>whoami<\/code> komutu, \u015fu anki SSH kullan\u0131c\u0131n\u0131z\u0131n ad\u0131n\u0131 d\u00f6nd\u00fcr\u00fcr. Bu komutlar\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in <code>acl<\/code> paketinin y\u00fckl\u00fc olmas\u0131 gerekebilir: <code>sudo apt install acl -y<\/code>.<\/p>\n<h3>Composer Ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 Y\u00fckleme<\/h3>\n<p>Symfony projenizin ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 y\u00fcklemek i\u00e7in Composer&#8217;a ihtiyac\u0131n\u0131z var. E\u011fer y\u00fckl\u00fc de\u011filse:<\/p>\n<pre><code class=\"language-bash\">cd ~\ncurl -sS https:\/\/getcomposer.org\/installer | php\nsudo mv composer.phar \/usr\/local\/bin\/composer<\/code><\/pre>\n<p>Ard\u0131ndan projenizin k\u00f6k dizininde ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00fckleyin:<\/p>\n<pre><code class=\"language-bash\">cd \/var\/www\/<your-project-name>\ncomposer install --no-dev --optimize-autoloader<\/code><\/pre>\n<p><code>--no-dev<\/code> geli\u015ftirme ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 y\u00fcklemez, <code>--optimize-autoloader<\/code> ise Composer&#8217;\u0131n autoloader&#8217;\u0131n\u0131 daha h\u0131zl\u0131 \u00e7al\u0131\u015facak \u015fekilde optimize eder.<\/p>\n<h3>Ortam De\u011fi\u015fkenlerinin Ayarlanmas\u0131 (.env Dosyas\u0131)<\/h3>\n<p>Symfony, ortam de\u011fi\u015fkenlerini y\u00f6netmek i\u00e7in <code>.env<\/code> dosyas\u0131n\u0131 kullan\u0131r. \u00dcretim ortam\u0131 i\u00e7in bu dosyay\u0131 d\u00fczenlemeniz gerekecek. <code>.env.dist<\/code> dosyas\u0131n\u0131 kopyalayarak ba\u015flayabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">cp .env .env.local<\/code><\/pre>\n<p>\u015eimdi <code>.env.local<\/code> dosyas\u0131n\u0131 bir metin d\u00fczenleyici ile a\u00e7\u0131n (\u00f6rne\u011fin <code>nano<\/code>):<\/p>\n<pre><code class=\"language-bash\">nano .env.local<\/code><\/pre>\n<p>Burada a\u015fa\u011f\u0131daki \u00f6nemli de\u011fi\u015fiklikleri yap\u0131n:<\/p>\n<ul>\n<li><code>APP_ENV=prod<\/code>: Uygulaman\u0131n \u00fcretim modunda \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar.<\/li>\n<li><code>APP_DEBUG=0<\/code>: Hata ay\u0131klama modunu kapat\u0131r.<\/li>\n<li><code>DATABASE_URL=\"mysql:\/\/db_user:db_password@127.0.0.1:3306\/db_name?serverVersion=5.7\"<\/code>: Veritaban\u0131 ba\u011flant\u0131 bilgilerinizi g\u00fcncelleyin.<\/li>\n<li>Di\u011fer hassas API anahtarlar\u0131 veya servis URL&#8217;leri gibi \u00fcretim ortam\u0131na \u00f6zel de\u011ferleri ayarlay\u0131n.<\/li>\n<\/ul>\n<h2>3. Veritaban\u0131 Yap\u0131land\u0131rmas\u0131 ve Migrasyonlar<\/h2>\n<p>Veritaban\u0131 sunucunuzda uygulaman\u0131z i\u00e7in bir veritaban\u0131 ve kullan\u0131c\u0131 olu\u015fturman\u0131z gerekir.<\/p>\n<h3>Veritaban\u0131 ve Kullan\u0131c\u0131 Olu\u015fturma<\/h3>\n<p>MariaDB&#8217;ye root kullan\u0131c\u0131s\u0131 olarak ba\u011flan\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo mysql -u root -p<\/code><\/pre>\n<p>\u015eifrenizi girdikten sonra a\u015fa\u011f\u0131daki SQL komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rarak yeni bir veritaban\u0131 ve kullan\u0131c\u0131 olu\u015fturun:<\/p>\n<pre><code class=\"language-sql\">CREATE DATABASE myapp_prod CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\nCREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'your_strong_password';\nGRANT ALL PRIVILEGES ON myapp_prod.* TO 'myapp_user'@'localhost';\nFLUSH PRIVILEGES;\nEXIT;<\/code><\/pre>\n<p><code>myapp_prod<\/code>, <code>myapp_user<\/code> ve <code>your_strong_password<\/code> de\u011ferlerini kendi projenize uygun \u015fekilde de\u011fi\u015ftirin.<\/p>\n<h3>Doctrine Migrasyonlar\u0131n\u0131 \u00c7al\u0131\u015ft\u0131rma<\/h3>\n<p>Symfony uygulaman\u0131z\u0131n veritaban\u0131 \u015femas\u0131n\u0131 olu\u015fturmak ve g\u00fcncel tutmak i\u00e7in Doctrine Migrations kullan\u0131yorsan\u0131z, bunlar\u0131 \u00fcretim ortam\u0131nda \u00e7al\u0131\u015ft\u0131rman\u0131z gerekir:<\/p>\n<pre><code class=\"language-bash\">cd \/var\/www\/<your-project-name>\nphp bin\/console doctrine:migrations:migrate --no-interaction<\/code><\/pre>\n<p><code>--no-interaction<\/code> parametresi, her bir migrasyon i\u00e7in onay istemeden t\u00fcm bekleyen migrasyonlar\u0131 otomatik olarak \u00e7al\u0131\u015ft\u0131r\u0131r.<\/p>\n<h2>4. Nginx Sanal Host Yap\u0131land\u0131rmas\u0131<\/h2>\n<p>\u015eimdi Nginx&#8217;i Symfony uygulaman\u0131za gelen istekleri do\u011fru \u015fekilde y\u00f6nlendirecek \u015fekilde yap\u0131land\u0131rmam\u0131z gerekiyor.<\/p>\n<h3>Nginx Yap\u0131land\u0131rma Dosyas\u0131 Olu\u015fturma<\/h3>\n<p>Yeni bir Nginx sanal host yap\u0131land\u0131rma dosyas\u0131 olu\u015fturun. Genellikle <code>\/etc\/nginx\/sites-available\/<\/code> dizini kullan\u0131l\u0131r.<\/p>\n<pre><code class=\"language-bash\">sudo nano \/etc\/nginx\/sites-available\/<your-project-name>.conf<\/code><\/pre>\n<p>Dosyan\u0131n i\u00e7ine a\u015fa\u011f\u0131daki yap\u0131land\u0131rmay\u0131 yap\u0131\u015ft\u0131r\u0131n. Kendi proje ad\u0131n\u0131za, alan ad\u0131n\u0131za ve PHP-FPM s\u00fcr\u00fcm\u00fcn\u00fcze g\u00f6re d\u00fczenlemeyi unutmay\u0131n:<\/p>\n<pre><code class=\"language-nginx\">server {\n    listen 80;\n    server_name your_domain.com www.your_domain.com; # Alan ad\u0131n\u0131z\u0131 buraya yaz\u0131n\n    root \/var\/www\/<your-project-name>\/public; # Symfony public dizini\n\n    index index.php index.html;\n\n    location \/ {\n        # try_files ile \u00f6nce dosya\/dizin kontrol\u00fc, sonra Symfony front controller'a y\u00f6nlendirme\n        try_files $uri $uri\/ \/index.php$is_args$args;\n    }\n\n    location ~ \\.php$ {\n        include snippets\/fastcgi-php.conf;\n        fastcgi_pass unix:\/var\/run\/php\/php7.2-fpm.sock; # PHP-FPM soket yolu ve s\u00fcr\u00fcm\u00fc\n        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;\n    }\n\n    # Statik dosyalar i\u00e7in s\u00fcre sonu ba\u015fl\u0131klar\u0131 ekleme (performans i\u00e7in)\n    location ~* \\.(jpg|jpeg|gif|png|webp|ico|css|js|woff|woff2|ttf|svg|eot)$ {\n        expires 30d;\n        log_not_found off;\n    }\n\n    # .env veya benzeri hassas dosyalar\u0131n do\u011frudan eri\u015fimini engelleme\n    location ~ \/\\.env {\n        deny all;\n    }\n\n    error_log \/var\/log\/nginx\/<your-project-name>_error.log;\n    access_log \/var\/log\/nginx\/<your-project-name>_access.log;\n}<\/code><\/pre>\n<p><code>your_domain.com<\/code> k\u0131sm\u0131n\u0131 kendi alan ad\u0131n\u0131zla, <code><your-project-name><\/code> k\u0131sm\u0131n\u0131 projenizin dizin ad\u0131yla ve <code>php7.2-fpm.sock<\/code> k\u0131sm\u0131n\u0131 kulland\u0131\u011f\u0131n\u0131z PHP s\u00fcr\u00fcm\u00fcne g\u00f6re g\u00fcncelleyin (\u00f6rn. <code>php7.4-fpm.sock<\/code>).<\/p>\n<h3>Yap\u0131land\u0131rmay\u0131 Etkinle\u015ftirme<\/h3>\n<p>Olu\u015fturdu\u011funuz yap\u0131land\u0131rma dosyas\u0131n\u0131 <code>sites-enabled<\/code> dizinine sembolik link (symlink) olu\u015fturarak etkinle\u015ftirin:<\/p>\n<pre><code class=\"language-bash\">sudo ln -s \/etc\/nginx\/sites-available\/<your-project-name>.conf \/etc\/nginx\/sites-enabled\/<\/code><\/pre>\n<p>Varsay\u0131lan Nginx yap\u0131land\u0131rmas\u0131n\u0131 devre d\u0131\u015f\u0131 b\u0131rakmak iyi bir uygulamad\u0131r:<\/p>\n<pre><code class=\"language-bash\">sudo unlink \/etc\/nginx\/sites-enabled\/default<\/code><\/pre>\n<h3>Nginx Yap\u0131land\u0131rmas\u0131n\u0131 Test Etme ve Yeniden Ba\u015flatma<\/h3>\n<p>Nginx yap\u0131land\u0131rman\u0131zda bir hata olup olmad\u0131\u011f\u0131n\u0131 kontrol edin:<\/p>\n<pre><code class=\"language-bash\">sudo nginx -t<\/code><\/pre>\n<p>E\u011fer &#8220;test is successful&#8221; mesaj\u0131n\u0131 al\u0131rsan\u0131z, Nginx&#8217;i yeniden ba\u015flatarak yeni yap\u0131land\u0131rmay\u0131 uygulay\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl reload nginx<\/code><\/pre>\n<p>\u015eimdi alan ad\u0131n\u0131z \u00fczerinden uygulaman\u0131za eri\u015fmeyi deneyebilirsiniz.<\/p>\n<h2>5. Symfony Ortam Ayarlar\u0131 ve Cache Y\u00f6netimi<\/h2>\n<p>Uygulaman\u0131z\u0131n \u00fcretim ortam\u0131nda en iyi performans\u0131 g\u00f6stermesi i\u00e7in baz\u0131 Symfony \u00f6zel ayarlar\u0131n\u0131 yapman\u0131z gerekir.<\/p>\n<h3>Cache Temizleme ve Is\u0131nd\u0131rma (Warming Up)<\/h3>\n<p>Symfony, performans\u0131 art\u0131rmak i\u00e7in cache mekanizmas\u0131n\u0131 kullan\u0131r. \u00dcretim ortam\u0131nda cache&#8217;i temizlemek ve yeniden olu\u015fturmak \u00f6nemlidir.<\/p>\n<pre><code class=\"language-bash\">cd \/var\/www\/<your-project-name>\nphp bin\/console cache:clear\nphp bin\/console cache:warmup<\/code><\/pre>\n<p>Bu komutlar, uygulaman\u0131z\u0131n ilk iste\u011finde cache olu\u015fturma y\u00fck\u00fcn\u00fc ortadan kald\u0131rarak daha h\u0131zl\u0131 yan\u0131t vermesini sa\u011flar.<\/p>\n<h3>Statik Varl\u0131klar\u0131n Y\u00fcklenmesi (Assets)<\/h3>\n<p>E\u011fer uygulaman\u0131zda statik varl\u0131klar (CSS, JS, resimler) kullan\u0131yorsan\u0131z ve bunlar\u0131 Symfony&#8217;nin <code>public<\/code> dizinine kopyalaman\u0131z gerekiyorsa:<\/p>\n<pre><code class=\"language-bash\">php bin\/console assets:install --symlink public<\/code><\/pre>\n<p>E\u011fer Webpack Encore kullan\u0131yorsan\u0131z, varl\u0131klar\u0131 derlemek i\u00e7in a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131rman\u0131z gerekir:<\/p>\n<pre><code class=\"language-bash\">npm install # E\u011fer node_modules yoksa\nnpm run build # \u00dcretim i\u00e7in varl\u0131klar\u0131 derler<\/code><\/pre>\n<p>Bu ad\u0131mlar\u0131, projenizin k\u00f6k dizininde (<code>\/var\/www\/<your-project-name><\/code>) \u00e7al\u0131\u015ft\u0131rman\u0131z \u00f6nemlidir.<\/p>\n<h2>G\u00fcvenlik ve Performans \u0130pu\u00e7lar\u0131<\/h2>\n<ul>\n<li><strong>G\u00fcvenlik Duvar\u0131 (UFW):<\/strong> Sunucunuzda sadece gerekli portlar\u0131 (SSH i\u00e7in 22, HTTP i\u00e7in 80, HTTPS i\u00e7in 443) a\u00e7mak i\u00e7in UFW&#8217;yi (Uncomplicated Firewall) yap\u0131land\u0131r\u0131n:\n<pre><code class=\"language-bash\">sudo ufw allow OpenSSH\nsudo ufw allow 'Nginx HTTP'\nsudo ufw enable<\/code><\/pre>\n<p>            HTTPS kullanacaksan\u0131z <code>sudo ufw allow 'Nginx HTTPS'<\/code> komutunu da \u00e7al\u0131\u015ft\u0131rmal\u0131s\u0131n\u0131z.\n        <\/li>\n<li><strong>SSL\/TLS (HTTPS):<\/strong> Uygulaman\u0131z\u0131n g\u00fcvenli\u011fini art\u0131rmak i\u00e7in \u00fccretsiz bir SSL sertifikas\u0131 (Let&#8217;s Encrypt) kurun. Certbot arac\u0131 bu s\u00fcreci kolayla\u015ft\u0131r\u0131r:\n<pre><code class=\"language-bash\">sudo apt install certbot python-certbot-nginx -y\nsudo certbot --nginx -d your_domain.com -d www.your_domain.com<\/code><\/pre>\n<\/li>\n<li><strong>PHP-FPM Optimizasyonu:<\/strong> <code>\/etc\/php\/7.2\/fpm\/pool.d\/www.conf<\/code> (veya kulland\u0131\u011f\u0131n\u0131z PHP s\u00fcr\u00fcm\u00fcne g\u00f6re) dosyas\u0131ndaki <code>pm.max_children<\/code>, <code>pm.start_servers<\/code> gibi de\u011ferleri sunucunuzun kaynaklar\u0131na g\u00f6re ayarlayarak PHP-FPM performans\u0131n\u0131 optimize edebilirsiniz.<\/li>\n<li><strong>G\u00fcnl\u00fck Y\u00f6netimi:<\/strong> Uygulaman\u0131z\u0131n ve sunucunuzun g\u00fcnl\u00fck dosyalar\u0131n\u0131 d\u00fczenli olarak kontrol edin (\u00f6rn. <code>\/var\/log\/nginx\/<\/code> ve <code>\/var\/www\/<your-project-name>\/var\/log\/<\/code>). Monolog gibi Symfony entegrasyonlar\u0131 ile \u00f6zel g\u00fcnl\u00fck yap\u0131land\u0131rmalar\u0131 yapabilirsiniz.<\/li>\n<li><strong>Opcache:<\/strong> PHP&#8217;nin yerle\u015fik Opcache mod\u00fcl\u00fcn\u00fc etkinle\u015ftirerek PHP kodunuzun daha h\u0131zl\u0131 \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flay\u0131n. Genellikle PHP-FPM ile birlikte gelir ve varsay\u0131lan olarak etkindir. <code>\/etc\/php\/7.2\/fpm\/php.ini<\/code> dosyas\u0131ndan ayarlar\u0131n\u0131 kontrol edebilirsiniz.<\/li>\n<\/ul>\n<h2>Sonu\u00e7<\/h2>\n<p>Bu rehberde, bir Symfony 4 uygulamas\u0131n\u0131 Ubuntu 18.04 \u00fczerinde LEMP y\u0131\u011f\u0131n\u0131 kullanarak \u00fcretim ortam\u0131na nas\u0131l da\u011f\u0131taca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m \u00f6\u011frendiniz. Sunucu haz\u0131rl\u0131\u011f\u0131ndan ba\u015flayarak Nginx ve PHP-FPM yap\u0131land\u0131rmas\u0131na, veritaban\u0131 kurulumundan Symfony \u00f6zel ayarlar\u0131na kadar t\u00fcm kritik ad\u0131mlar\u0131 ele ald\u0131k. Art\u0131k Symfony uygulaman\u0131z\u0131n \u00fcretimde g\u00fcvenli ve performansl\u0131 bir \u015fekilde \u00e7al\u0131\u015fmas\u0131 i\u00e7in sa\u011flam bir temeliniz var.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<p><strong>S: Nginx yap\u0131land\u0131rmamda neden <code>root \/var\/www\/<your-project-name>\/public;<\/code> kullan\u0131yorum?<\/strong><br \/>\n        C: Symfony&#8217;nin \u00f6n denetleyicisi (front controller) olan <code>index.php<\/code> dosyas\u0131 <code>public\/<\/code> dizini alt\u0131nda bulunur. Nginx&#8217;in bu dizini k\u00f6k dizin olarak bilmesi, uygulaman\u0131z\u0131n do\u011fru \u015fekilde \u00e7al\u0131\u015fmas\u0131 i\u00e7in kritik \u00f6neme sahiptir. B\u00f6ylece t\u00fcm istekler Symfony \u00e7ekirde\u011fi taraf\u0131ndan i\u015flenir ve hassas proje dosyalar\u0131na do\u011frudan eri\u015fim engellenmi\u015f olur.<\/p>\n<p><strong>S: <code>.env.local<\/code> dosyas\u0131 yerine ba\u015fka bir y\u00f6ntem kullanabilir miyim?<\/strong><br \/>\n        C: Evet, <code>.env.local<\/code> dosyas\u0131 geli\u015ftirme ve k\u00fc\u00e7\u00fck \u00fcretim ortamlar\u0131 i\u00e7in uygundur. Ancak daha b\u00fcy\u00fck ve g\u00fcvenli ortamlar i\u00e7in, ortam de\u011fi\u015fkenlerini do\u011frudan sunucu seviyesinde (\u00f6rne\u011fin Nginx yap\u0131land\u0131rmas\u0131nda <code>fastcgi_param APP_ENV prod;<\/code> veya sistem genelinde <code>\/etc\/environment<\/code> dosyas\u0131nda) tan\u0131mlamak veya bir s\u0131r y\u00f6netimi \u00e7\u00f6z\u00fcm\u00fc (Vault, AWS Secrets Manager vb.) kullanmak daha g\u00fcvenli ve y\u00f6netilebilir olabilir.<\/p>\n<p><strong>S: Uygulamam\u0131n cache dizini neden <code>www-data<\/code> kullan\u0131c\u0131s\u0131 taraf\u0131ndan yaz\u0131labilir olmal\u0131?<\/strong><br \/>\n        C: Symfony, performans\u0131 art\u0131rmak i\u00e7in derlenmi\u015f kodlar\u0131, yap\u0131land\u0131rmalar\u0131 ve di\u011fer ge\u00e7ici verileri <code>var\/cache<\/code> dizininde saklar. Web sunucusu (Nginx ve PHP-FPM), bu dizine yazma iznine sahip olmal\u0131d\u0131r ki uygulama cache dosyalar\u0131n\u0131 olu\u015fturabilsin, g\u00fcncelleyebilsin ve silebilsin. Aksi takdirde, uygulama \u00e7al\u0131\u015f\u0131rken izin hatalar\u0131yla kar\u015f\u0131la\u015f\u0131rs\u0131n\u0131z.<\/p>\n<p><strong>S: Symfony 4 yerine Symfony 5 veya 6 da\u011f\u0131tmak i\u00e7in bu rehber kullan\u0131labilir mi?<\/strong><br \/>\n        C: Evet, bu rehberdeki temel LEMP kurulumu ve Nginx\/PHP-FPM yap\u0131land\u0131rma ad\u0131mlar\u0131 Symfony&#8217;nin di\u011fer LTS s\u00fcr\u00fcmleri i\u00e7in de b\u00fcy\u00fck \u00f6l\u00e7\u00fcde ge\u00e7erlidir. Symfony s\u00fcr\u00fcmleri aras\u0131ndaki temel farklar genellikle kod seviyesinde ve baz\u0131 komutlarda olabilir (\u00f6rn. Webpack Encore i\u00e7in <code>encore:build<\/code> komutu). Ancak sunucu taraf\u0131 da\u011f\u0131t\u0131m mant\u0131\u011f\u0131 ayn\u0131 kal\u0131r.<\/p>\n<p><strong>S: Neden <code>composer install --no-dev --optimize-autoloader<\/code> kullanmal\u0131y\u0131m?<\/strong><br \/>\n        C: <code>--no-dev<\/code> parametresi, geli\u015ftirme ortam\u0131nda kullan\u0131lan (\u00f6rne\u011fin test ara\u00e7lar\u0131, hata ay\u0131klama paketleri) ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00fcklemez. \u00dcretim ortam\u0131nda bu paketlere ihtiya\u00e7 duyulmaz ve y\u00fcklenmeleri disk alan\u0131 israf\u0131na, potansiyel g\u00fcvenlik a\u00e7\u0131klar\u0131na ve daha yava\u015f y\u00fckleme s\u00fcrelerine neden olabilir. <code>--optimize-autoloader<\/code> ise Composer&#8217;\u0131n autoloader&#8217;\u0131n\u0131 daha verimli hale getirir, bu da PHP&#8217;nin s\u0131n\u0131flar\u0131 daha h\u0131zl\u0131 bulmas\u0131n\u0131 sa\u011flayarak uygulaman\u0131z\u0131n performans\u0131n\u0131 art\u0131r\u0131r.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Symfony, PHP tabanl\u0131, modern ve g\u00fc\u00e7l\u00fc web uygulamalar\u0131 geli\u015ftirmek i\u00e7in kullan\u0131lan pop\u00fcler bir framework&#8217;t\u00fcr. \u00dcretim ortam\u0131na da\u011f\u0131t","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":[1],"tags":[],"class_list":{"0":"post-31125","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","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>Gereksinimler - 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\/gereksinimler\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Gereksinimler\" \/>\n<meta property=\"og:description\" content=\"Symfony, PHP tabanl\u0131, modern ve g\u00fc\u00e7l\u00fc web uygulamalar\u0131 geli\u015ftirmek i\u00e7in kullan\u0131lan pop\u00fcler bir framework&#039;t\u00fcr. \u00dcretim ortam\u0131na da\u011f\u0131t\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/gereksinimler\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-05T23:41:57+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=\"12 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gereksinimler\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gereksinimler\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Gereksinimler\",\"datePublished\":\"2025-10-05T23:41:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gereksinimler\/\"},\"wordCount\":1849,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/gereksinimler\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gereksinimler\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/gereksinimler\/\",\"name\":\"Gereksinimler - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-05T23:41:57+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gereksinimler\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/gereksinimler\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gereksinimler\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Gereksinimler\"}]},{\"@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":"Gereksinimler - 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\/gereksinimler\/","og_locale":"tr_TR","og_type":"article","og_title":"Gereksinimler","og_description":"Symfony, PHP tabanl\u0131, modern ve g\u00fc\u00e7l\u00fc web uygulamalar\u0131 geli\u015ftirmek i\u00e7in kullan\u0131lan pop\u00fcler bir framework't\u00fcr. \u00dcretim ortam\u0131na da\u011f\u0131t","og_url":"https:\/\/fatihsoysal.com\/blog\/gereksinimler\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-05T23:41:57+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"12 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/gereksinimler\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/gereksinimler\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Gereksinimler","datePublished":"2025-10-05T23:41:57+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/gereksinimler\/"},"wordCount":1849,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/gereksinimler\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/gereksinimler\/","url":"https:\/\/fatihsoysal.com\/blog\/gereksinimler\/","name":"Gereksinimler - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-05T23:41:57+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/gereksinimler\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/gereksinimler\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/gereksinimler\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Gereksinimler"}]},{"@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\/31125","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=31125"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31125\/revisions"}],"predecessor-version":[{"id":31126,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31125\/revisions\/31126"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=31125"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=31125"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=31125"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}