{"id":39832,"date":"2026-02-24T12:22:23","date_gmt":"2026-02-24T09:22:23","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmaliyiz-2\/"},"modified":"2026-02-24T12:22:23","modified_gmt":"2026-02-24T09:22:23","slug":"neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmaliyiz-2","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmaliyiz-2\/","title":{"rendered":"Neden Docker Compose ile Laravel, Nginx ve MySQL Kurulumu Yapmal\u0131y\u0131z?"},"content":{"rendered":"<p><title>Laravel, Nginx, MySQL Docker Compose Kurulumu Rehberi<\/title><br \/>\n<body><\/p>\n<p>Modern web geli\u015ftirme s\u00fcre\u00e7lerinde kar\u015f\u0131la\u015fan en b\u00fcy\u00fck zorluklardan biri, tutarl\u0131 ve izole edilmi\u015f geli\u015ftirme ortamlar\u0131 olu\u015fturmakt\u0131r. Peki, Laravel projenizi Nginx ve MySQL ile Docker Compose kullanarak nas\u0131l h\u0131zl\u0131ca aya\u011fa kald\u0131rabilir ve bu karma\u015f\u0131kl\u0131\u011f\u0131 ortadan kald\u0131rabilirsiniz? Bu rehber, size ad\u0131m ad\u0131m bir Laravel uygulamas\u0131n\u0131 Docker konteynerlerinde sorunsuz bir \u015fekilde \u00e7al\u0131\u015ft\u0131rman\u0131n t\u00fcm detaylar\u0131n\u0131 sunuyor.<\/p>\n<h2>Neden Docker Compose ile Laravel, Nginx ve MySQL Kurulumu Yapmal\u0131y\u0131z?<\/h2>\n<p>G\u00fcn\u00fcm\u00fcz web geli\u015ftirme d\u00fcnyas\u0131nda, projelerin karma\u015f\u0131kl\u0131\u011f\u0131 artt\u0131k\u00e7a, geli\u015ftirme ortamlar\u0131n\u0131n y\u00f6netimi de bir o kadar zorla\u015fmaktad\u0131r. Farkl\u0131 geli\u015ftiricilerin farkl\u0131 i\u015fletim sistemleri veya yaz\u0131l\u0131m versiyonlar\u0131 kullanmas\u0131, &#8220;Benim bilgisayar\u0131mda \u00e7al\u0131\u015f\u0131yordu!&#8221; sendromuna yol a\u00e7arak zaman kayb\u0131na ve moral bozuklu\u011funa neden olabilir. \u0130\u015fte tam bu noktada Docker Compose devreye giriyor ve bu problemleri k\u00f6kten \u00e7\u00f6z\u00fcyor. Docker Compose, birden fazla Docker konteynerini tan\u0131mlayan ve \u00e7al\u0131\u015ft\u0131ran bir ara\u00e7t\u0131r. Bu sayede, Laravel uygulaman\u0131z i\u00e7in gerekli olan PHP-FPM, Nginx web sunucusu ve MySQL veritaban\u0131 gibi t\u00fcm servisleri tek bir yap\u0131land\u0131rma dosyas\u0131 (<code>docker-compose.yml<\/code>) ile kolayca y\u00f6netebilirsiniz.<\/p>\n<p>Docker Compose kullanman\u0131n en b\u00fcy\u00fck avantajlar\u0131ndan biri, <strong>izolasyon<\/strong> sa\u011flamas\u0131d\u0131r. Her servis kendi ba\u011f\u0131ms\u0131z konteynerinde \u00e7al\u0131\u015f\u0131r, bu da ba\u011f\u0131ml\u0131l\u0131k \u00e7ak\u0131\u015fmalar\u0131n\u0131 ortadan kald\u0131r\u0131r. \u00d6rne\u011fin, projeniz bir PHP 8.1 s\u00fcr\u00fcm\u00fcne ihtiya\u00e7 duyarken, ba\u015fka bir projeniz PHP 7.4 kullan\u0131yor olabilir. Docker sayesinde her iki projeyi de ayn\u0131 makinede, birbirine kar\u0131\u015fmadan \u00e7al\u0131\u015ft\u0131rabilirsiniz. Ayr\u0131ca, <strong>ta\u015f\u0131nabilirlik<\/strong> de kritik bir fakt\u00f6rd\u00fcr. Geli\u015ftirme ortam\u0131n\u0131z\u0131 tan\u0131mlayan <code>docker-compose.yml<\/code> dosyas\u0131, projenizle birlikte versiyon kontrol sistemine (Git gibi) dahil edilebilir. Bu, yeni bir geli\u015ftiricinin projeye kat\u0131ld\u0131\u011f\u0131nda veya mevcut bir projenin farkl\u0131 bir makineye ta\u015f\u0131nmas\u0131 gerekti\u011finde, ortam kurulumunu dakikalar i\u00e7inde tamamlamas\u0131n\u0131 sa\u011flar. Sadece Docker ve Docker Compose y\u00fckl\u00fc olmas\u0131 yeterlidir; geriye kalan her \u015fey yap\u0131land\u0131rma dosyas\u0131nda tan\u0131ml\u0131d\u0131r.<\/p>\n<p>Bir di\u011fer \u00f6nemli fayda ise <strong>kolay kurulum ve y\u00f6netimdir<\/strong>. Karma\u015f\u0131k sanal makineler kurmak veya i\u015fletim sisteminize PHP, Nginx, MySQL gibi yaz\u0131l\u0131mlar\u0131 manuel olarak y\u00fcklemek yerine, sadece birka\u00e7 komutla t\u00fcm ortam\u0131 aya\u011fa kald\u0131rabilirsiniz. Bu, \u00f6zellikle yeni ba\u015flayanlar veya h\u0131zl\u0131 prototipleme yapmak isteyenler i\u00e7in b\u00fcy\u00fck bir kolayl\u0131kt\u0131r. Geli\u015ftirme ve \u00fcretim ortamlar\u0131 aras\u0131nda <strong>tutarl\u0131l\u0131k<\/strong> sa\u011flamas\u0131 da Docker Compose&#8217;u vazge\u00e7ilmez k\u0131lar. Yerel ortam\u0131n\u0131zda \u00e7al\u0131\u015fan bir uygulaman\u0131n, \u00fcretim sunucusunda da ayn\u0131 \u015fekilde davranaca\u011f\u0131ndan emin olabilirsiniz, \u00e7\u00fcnk\u00fc her iki ortam da ayn\u0131 Docker imajlar\u0131n\u0131 ve yap\u0131land\u0131rmalar\u0131n\u0131 kullan\u0131r. Bu tutarl\u0131l\u0131k, da\u011f\u0131t\u0131m s\u00fcre\u00e7lerini basitle\u015ftirir ve &#8220;canl\u0131da patlama&#8221; riskini azalt\u0131r. Dolay\u0131s\u0131yla, Docker Compose ile Laravel, Nginx ve MySQL kurulumu yapmak, geli\u015ftirici verimlili\u011fini art\u0131rman\u0131n, da\u011f\u0131t\u0131m s\u00fcre\u00e7lerini h\u0131zland\u0131rman\u0131n ve ekip i\u00e7inde uyumlu bir \u00e7al\u0131\u015fma ortam\u0131 yaratman\u0131n anahtar\u0131d\u0131r.<\/p>\n<h2>Docker Compose Projemizi Ba\u015flatmak \u0130\u00e7in \u0130lk Ad\u0131mlar Nelerdir?<\/h2>\n<p>Docker Compose ile bir Laravel projesi kurmaya ba\u015flamadan \u00f6nce, sisteminizde baz\u0131 temel gereksinimlerin kar\u015f\u0131land\u0131\u011f\u0131ndan emin olmal\u0131y\u0131z. \u0130lk ve en \u00f6nemli ad\u0131m, tabii ki Docker Desktop&#8217;\u0131n kurulu olmas\u0131d\u0131r. Docker Desktop, Docker Engine, Docker CLI, Docker Compose ve Kubernetes&#8217;i tek bir pakette sunarak hem Windows hem de macOS kullan\u0131c\u0131lar\u0131 i\u00e7in kurulumu olduk\u00e7a basitle\u015ftirir. Linux kullan\u0131c\u0131lar\u0131 ise Docker Engine ve Docker Compose&#8217;u ayr\u0131 ayr\u0131 kurabilirler. Kurulum tamamland\u0131ktan sonra, terminalinizde <code>docker --version<\/code> ve <code>docker compose version<\/code> komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rarak her \u015feyin do\u011fru bir \u015fekilde y\u00fcklendi\u011fini kontrol edebilirsiniz.<\/p>\n<p>\u015eimdi projemiz i\u00e7in bir \u00e7al\u0131\u015fma alan\u0131 olu\u015ftural\u0131m. Genellikle, projenin t\u00fcm dosyalar\u0131n\u0131 bar\u0131nd\u0131racak ana bir dizin olu\u015fturmak en iyi yakla\u015f\u0131md\u0131r. Bu dizin i\u00e7erisinde Laravel uygulamam\u0131z\u0131n kodlar\u0131, Docker Compose yap\u0131land\u0131rma dosyam\u0131z ve di\u011fer yard\u0131mc\u0131 dosyalar yer alacakt\u0131r. \u00d6rne\u011fin, ana dizini <code>laravel-docker-app<\/code> olarak adland\u0131rabiliriz:<\/p>\n<pre><code>\nmkdir laravel-docker-app\ncd laravel-docker-app\n    <\/code><\/pre>\n<p>Bu dizinin i\u00e7ine girdikten sonra, Laravel projemizi olu\u015fturabiliriz. Laravel&#8217;i do\u011frudan Docker konteynerleri i\u00e7inde kurmak yerine, \u00e7o\u011fu zaman yerel makinede Composer arac\u0131l\u0131\u011f\u0131yla kurmak daha pratik olabilir. Bu, Docker imaj\u0131na Composer&#8217;\u0131 dahil etme karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 ortadan kald\u0131r\u0131r ve projenin h\u0131zl\u0131ca ba\u015flat\u0131lmas\u0131n\u0131 sa\u011flar. E\u011fer Composer kurulu de\u011filse, \u00f6ncelikle onu kurman\u0131z gerekecektir. Ard\u0131ndan, a\u015fa\u011f\u0131daki komutla yeni bir Laravel projesi olu\u015fturabiliriz:<\/p>\n<pre><code>\ncomposer create-project laravel\/laravel .\n    <\/code><\/pre>\n<p>Bu komut, mevcut dizine yeni bir Laravel projesi kuracakt\u0131r. Laravel&#8217;in t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 indirmesi biraz zaman alabilir. Proje kurulumu tamamland\u0131ktan sonra, ana dizinimiz art\u0131k Laravel&#8217;in t\u00fcm \u00e7ekirdek dosyalar\u0131n\u0131 i\u00e7erecektir. Daha sonra, Docker Compose&#8217;un kalbi olan <code>docker-compose.yml<\/code> dosyas\u0131n\u0131 olu\u015fturaca\u011f\u0131z. Bu dosya, t\u00fcm servislerimizi (Nginx, PHP-FPM, MySQL) ve bunlar\u0131n birbirleriyle nas\u0131l etkile\u015fime girece\u011fini tan\u0131mlayaca\u011f\u0131m\u0131z yerdir. Dosyay\u0131 ana dizinimizde a\u015fa\u011f\u0131daki gibi olu\u015fturabiliriz:<\/p>\n<pre><code>\ntouch docker-compose.yml\n    <\/code><\/pre>\n<p>Bu dosyan\u0131n i\u00e7ine yazaca\u011f\u0131m\u0131z yap\u0131land\u0131rmalar, Docker&#8217;a hangi imajlar\u0131 kullanaca\u011f\u0131n\u0131, hangi portlar\u0131 a\u00e7aca\u011f\u0131n\u0131, hangi dizinleri ba\u011flayaca\u011f\u0131n\u0131 ve servislerin birbirleriyle nas\u0131l ileti\u015fim kuraca\u011f\u0131n\u0131 s\u00f6yleyecektir. \u0130lk ad\u0131mlarda bu dosyan\u0131n bo\u015f olmas\u0131 normaldir; sonraki ad\u0131mlarda her servisi tek tek bu dosyaya ekleyece\u011fiz. Bu temel kurulum ad\u0131mlar\u0131, projemizin Dockerize edilmesi i\u00e7in sa\u011flam bir zemin haz\u0131rlar ve bizi daha karma\u015f\u0131k yap\u0131land\u0131rmalara ge\u00e7i\u015f i\u00e7in haz\u0131rlar.<\/p>\n<h3>Docker Compose ile MySQL Servisi Nas\u0131l Yap\u0131land\u0131r\u0131l\u0131r?<\/h3>\n<p>Uygulamam\u0131z\u0131n veri depolama ihtiyac\u0131n\u0131 kar\u015f\u0131lamak i\u00e7in bir MySQL veritaban\u0131na ihtiyac\u0131m\u0131z var. Docker Compose sayesinde, MySQL veritaban\u0131n\u0131 ayr\u0131 bir konteyner olarak kolayca aya\u011fa kald\u0131rabiliriz. Bu, veritaban\u0131 y\u00f6netimini basitle\u015ftirir ve ana sistemimizden izole eder. <code>docker-compose.yml<\/code> dosyam\u0131z\u0131 a\u00e7arak MySQL servisini tan\u0131mlamaya ba\u015flayal\u0131m. \u0130lk olarak, bir servis ad\u0131 belirleyece\u011fiz, genellikle &#8220;db&#8221; veya &#8220;mysql&#8221; gibi isimler tercih edilir. Daha sonra, Docker Hub&#8217;dan \u00e7ekece\u011fimiz MySQL imaj\u0131n\u0131 belirtmeliyiz. Genellikle en son kararl\u0131 s\u00fcr\u00fcm\u00fc kullanmak iyi bir tercihtir, \u00f6rne\u011fin <code>mysql:8.0<\/code> gibi.<\/p>\n<p>MySQL konteynerinin do\u011fru \u015fekilde \u00e7al\u0131\u015fabilmesi i\u00e7in baz\u0131 ortam de\u011fi\u015fkenlerine ihtiyac\u0131 vard\u0131r. Bu de\u011fi\u015fkenler, veritaban\u0131n\u0131n ilk kurulumunda root \u015fifresini, olu\u015fturulacak varsay\u0131lan veritaban\u0131n\u0131 ve bir kullan\u0131c\u0131 ad\u0131 ile \u015fifresini belirlememizi sa\u011flar. Bu sayede, Laravel uygulamam\u0131z\u0131n veritaban\u0131na ba\u011flanabilmesi i\u00e7in gerekli kimlik bilgilerini \u00f6nceden tan\u0131mlam\u0131\u015f oluruz. \u0130\u015fte <code>docker-compose.yml<\/code> dosyas\u0131nda MySQL servisi i\u00e7in temel bir yap\u0131land\u0131rma \u00f6rne\u011fi:<\/p>\n<pre><code>\nversion: '3.8'\n\nservices:\n  db:\n    image: mysql:8.0\n    container_name: mysql_db\n    restart: always\n    environment:\n      MYSQL_ROOT_PASSWORD: your_root_password_here\n      MYSQL_DATABASE: laravel_db\n      MYSQL_USER: laravel_user\n      MYSQL_PASSWORD: laravel_password\n    ports:\n      - \"3306:3306\"\n    volumes:\n      - db_data:\/var\/lib\/mysql\n    healthcheck:\n      test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-pyour_root_password_here\"]\n      timeout: 20s\n      retries: 10\n      interval: 10s\n\nvolumes:\n  db_data:\n    driver: local\n    <\/code><\/pre>\n<p>Yukar\u0131daki yap\u0131land\u0131rmada <code>MYSQL_ROOT_PASSWORD<\/code>, <code>MYSQL_DATABASE<\/code>, <code>MYSQL_USER<\/code> ve <code>MYSQL_PASSWORD<\/code> de\u011ferlerini kendi tercihinize g\u00f6re de\u011fi\u015ftirmeyi unutmay\u0131n. Bu bilgiler, Laravel projenizin <code>.env<\/code> dosyas\u0131ndaki veritaban\u0131 ba\u011flant\u0131 ayarlar\u0131yla e\u015fle\u015fmelidir. <code>ports: - \"3306:3306\"<\/code> sat\u0131r\u0131, host makinenizin 3306 portunu, MySQL konteynerinin 3306 portuna y\u00f6nlendirir. Bu sayede, isterseniz yerel makinenizdeki bir veritaban\u0131 y\u00f6netim arac\u0131 (\u00f6rne\u011fin DBeaver veya MySQL Workbench) ile de Docker i\u00e7indeki veritaban\u0131na ba\u011flanabilirsiniz.<\/p>\n<p><strong>Veri kal\u0131c\u0131l\u0131\u011f\u0131<\/strong>, bir veritaban\u0131 konteyneri i\u00e7in hayati \u00f6neme sahiptir. Konteynerler ge\u00e7icidir; e\u011fer konteyneri silerseniz, i\u00e7indeki t\u00fcm veriler de kaybolur. Bu durumu \u00f6nlemek i\u00e7in Docker <code>volumes<\/code> kullan\u0131r\u0131z. <code>volumes: - db_data:\/var\/lib\/mysql<\/code> sat\u0131r\u0131, host makinenizde (Docker taraf\u0131ndan y\u00f6netilen) <code>db_data<\/code> ad\u0131nda bir volume olu\u015fturur ve bu volume&#8217;\u00fc MySQL konteynerinin verilerini depolad\u0131\u011f\u0131 <code>\/var\/lib\/mysql<\/code> dizinine ba\u011flar. Bu sayede, konteyner silinse bile verileriniz <code>db_data<\/code> volume&#8217;\u00fcnde g\u00fcvende kal\u0131r ve yeni bir MySQL konteyneri bu volume&#8217;\u00fc kullanarak kald\u0131\u011f\u0131 yerden devam edebilir. Son olarak, <code>healthcheck<\/code> k\u0131sm\u0131, veritaban\u0131 servisinin ger\u00e7ekten \u00e7al\u0131\u015f\u0131r durumda olup olmad\u0131\u011f\u0131n\u0131 kontrol etmek i\u00e7in kullan\u0131l\u0131r. Bu, di\u011fer servislerin (\u00f6rne\u011fin PHP-FPM) veritaban\u0131na ba\u011flanmaya \u00e7al\u0131\u015fmadan \u00f6nce veritaban\u0131n\u0131n haz\u0131r olmas\u0131n\u0131 sa\u011flar ve servisler aras\u0131 ba\u011f\u0131ml\u0131l\u0131k y\u00f6netiminde \u00f6nemli bir rol oynar.<\/p>\n<h3>Nginx Web Sunucusu Nas\u0131l Entegre Edilir ve Yap\u0131land\u0131r\u0131l\u0131r?<\/h3>\n<p>Laravel uygulamam\u0131z\u0131n internet \u00fczerinden eri\u015filebilir olmas\u0131 i\u00e7in bir web sunucusuna ihtiyac\u0131m\u0131z var. Nginx, y\u00fcksek performansl\u0131 ve hafif yap\u0131s\u0131yla modern web uygulamalar\u0131 i\u00e7in pop\u00fcler bir se\u00e7imdir. Docker Compose ile Nginx&#8217;i de kolayca bir konteyner olarak yap\u0131land\u0131rabiliriz. <code>docker-compose.yml<\/code> dosyam\u0131za Nginx servisini ekleyerek ba\u015flayal\u0131m. Servis ad\u0131 olarak genellikle &#8220;nginx&#8221; veya &#8220;web&#8221; kullan\u0131l\u0131r. Nginx imaj\u0131 i\u00e7in <code>nginx:stable-alpine<\/code> gibi hafif ve kararl\u0131 bir s\u00fcr\u00fcm\u00fc tercih edebiliriz. Bu, konteyner boyutunu k\u00fc\u00e7\u00fclt\u00fcr ve kaynak t\u00fcketimini azalt\u0131r.<\/p>\n<p>Nginx&#8217;in Laravel projemizi do\u011fru bir \u015fekilde sunabilmesi i\u00e7in \u00f6zel bir yap\u0131land\u0131rma dosyas\u0131na ihtiyac\u0131 vard\u0131r. Bu yap\u0131land\u0131rma dosyas\u0131, Nginx&#8217;e hangi portu dinleyece\u011fini, k\u00f6k dizinin nerede oldu\u011funu ve PHP-FPM ile nas\u0131l ileti\u015fim kuraca\u011f\u0131n\u0131 s\u00f6yler. Genellikle bu dosyay\u0131 projemizin ana dizininde <code>nginx\/default.conf<\/code> gibi bir yolda olu\u015ftururuz. \u0130\u00e7eri\u011fi a\u015fa\u011f\u0131daki gibi olabilir:<\/p>\n<pre><code>\n# nginx\/default.conf\nserver {\n    listen 80;\n    server_name localhost;\n    root \/var\/www\/html\/public; # Laravel'in public dizini\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\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 ~ \\.php$ {\n        try_files $uri =404;\n        fastcgi_split_path_info ^(.+\\.php)(\/.+)$;\n        fastcgi_pass php:9000; # PHP-FPM servisine y\u00f6nlendirme\n        fastcgi_index index.php;\n        include fastcgi_params;\n        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n        fastcgi_param PATH_INFO $fastcgi_path_info;\n    }\n\n    location ~ \/\\.ht {\n        deny all;\n    }\n}\n    <\/code><\/pre>\n<p>Bu yap\u0131land\u0131rma dosyas\u0131nda dikkat etmemiz gereken en \u00f6nemli k\u0131s\u0131m <code>root \/var\/www\/html\/public;<\/code> sat\u0131r\u0131d\u0131r. Bu, Nginx&#8217;in Laravel uygulamas\u0131n\u0131n <code>public<\/code> dizinini web k\u00f6k\u00fc olarak kullanmas\u0131n\u0131 sa\u011flar. Ayr\u0131ca, <code>fastcgi_pass php:9000;<\/code> sat\u0131r\u0131, PHP dosyalar\u0131n\u0131 i\u015flemek i\u00e7in iste\u011fi &#8220;php&#8221; ad\u0131ndaki servise (yani PHP-FPM konteynerimize) 9000 portundan y\u00f6nlendirir. Bu, Docker Compose&#8217;un servis isimlerini otomatik olarak DNS olarak \u00e7\u00f6z\u00fcmlemesi sayesinde m\u00fcmk\u00fcn olur.<\/p>\n<p>\u015eimdi <code>docker-compose.yml<\/code> dosyam\u0131za Nginx servisini ekleyelim:<\/p>\n<pre><code>\nversion: '3.8'\n\nservices:\n  # ... (db servisi burada) ...\n\n  nginx:\n    image: nginx:stable-alpine\n    container_name: nginx_web\n    restart: always\n    ports:\n      - \"80:80\" # Host'un 80 portunu konteynerin 80 portuna y\u00f6nlendir\n    volumes:\n      - .\/:\/var\/www\/html # Proje kodlar\u0131m\u0131z\u0131 konteynere ba\u011fla\n      - .\/nginx\/default.conf:\/etc\/nginx\/conf.d\/default.conf # Nginx yap\u0131land\u0131rmam\u0131z\u0131 ba\u011fla\n    depends_on:\n      - php # Nginx'in ba\u015flamadan \u00f6nce PHP-FPM'in haz\u0131r olmas\u0131n\u0131 bekle\n\n  # ... (php servisi a\u015fa\u011f\u0131da eklenecek) ...\n    <\/code><\/pre>\n<p><code>ports: - \"80:80\"<\/code> sat\u0131r\u0131, host makinenizin 80 portunu (varsay\u0131lan HTTP portu) Nginx konteynerinin 80 portuna y\u00f6nlendirir. Bu sayede taray\u0131c\u0131n\u0131zdan <code>http:\/\/localhost<\/code> adresine giderek uygulaman\u0131za eri\u015febilirsiniz. <code>volumes<\/code> b\u00f6l\u00fcm\u00fcnde iki \u00f6nemli ba\u011flama i\u015flemi yap\u0131yoruz: <code>.\/:\/var\/www\/html<\/code> ile projemizin t\u00fcm kodlar\u0131n\u0131 Nginx konteynerinin <code>\/var\/www\/html<\/code> dizinine ba\u011fl\u0131yoruz. Bu, geli\u015ftirme s\u0131ras\u0131nda kodlar\u0131m\u0131zda yapt\u0131\u011f\u0131m\u0131z de\u011fi\u015fikliklerin an\u0131nda konteyner i\u00e7inde de g\u00f6r\u00fcnmesini sa\u011flar. \u0130kinci ba\u011flama ise <code>.\/nginx\/default.conf:\/etc\/nginx\/conf.d\/default.conf<\/code> ile \u00f6zel Nginx yap\u0131land\u0131rma dosyam\u0131z\u0131 konteynerin ilgili dizinine kopyalar. Son olarak, <code>depends_on: - php<\/code> ifadesi, Nginx servisinin PHP-FPM servisi ba\u015flamadan \u00f6nce ba\u015flat\u0131lmamas\u0131n\u0131 sa\u011flar, bu da servisler aras\u0131 do\u011fru ba\u015flatma s\u0131ras\u0131n\u0131 garanti eder.<\/p>\n<h3>Laravel Uygulamas\u0131 \u0130\u00e7in PHP-FPM Servisi Nas\u0131l Kurulur ve Ba\u011flan\u0131r?<\/h3>\n<p>Laravel, bir PHP framework&#8217;\u00fc oldu\u011fu i\u00e7in PHP \u00e7al\u0131\u015fma zaman\u0131na ihtiya\u00e7 duyar. Web sunucusu olan Nginx, PHP kodunu do\u011frudan yorumlayamaz; bunun yerine PHP-FPM (FastCGI Process Manager) ile ileti\u015fim kurar. PHP-FPM, PHP kodunu i\u015fleyen ve Nginx&#8217;e sonucu geri d\u00f6nd\u00fcren bir arac\u0131d\u0131r. Docker Compose ile PHP-FPM servisini de ayr\u0131 bir konteyner olarak kolayca yap\u0131land\u0131rabiliriz. <code>docker-compose.yml<\/code> dosyam\u0131za &#8220;php&#8221; ad\u0131nda yeni bir servis ekleyelim.<\/p>\n<p>PHP imaj\u0131 olarak, projenizin gereksinimlerine uygun bir PHP s\u00fcr\u00fcm\u00fcn\u00fc se\u00e7melisiniz. \u00d6rne\u011fin, <code>php:8.2-fpm-alpine<\/code> gibi bir imaj, hem modern bir PHP s\u00fcr\u00fcm\u00fc sunar hem de Alpine Linux tabanl\u0131 oldu\u011fu i\u00e7in olduk\u00e7a hafiftir. Ancak, Laravel gibi framework&#8217;ler genellikle baz\u0131 PHP uzant\u0131lar\u0131na ihtiya\u00e7 duyar (pdo_mysql, mbstring, gd, bcmath, exif vb.). Bu uzant\u0131lar\u0131 do\u011frudan Docker Hub&#8217;dan \u00e7ekilen temel PHP imaj\u0131na eklemek i\u00e7in \u00f6zel bir <code>Dockerfile<\/code> olu\u015fturmak en iyi y\u00f6ntemdir. Projemizin ana dizininde bir <code>Dockerfile<\/code> (veya <code>php.Dockerfile<\/code>) olu\u015ftural\u0131m:<\/p>\n<pre><code>\n# Dockerfile\nFROM php:8.2-fpm-alpine\n\n# Gerekli ba\u011f\u0131ml\u0131l\u0131klar\u0131 ve PHP uzant\u0131lar\u0131n\u0131 y\u00fckle\nRUN apk add --no-cache \\\n    autoconf \\\n    g++ \\\n    make \\\n    libzip-dev \\\n    libpng-dev \\\n    jpeg-dev \\\n    libwebp-dev \\\n    freetype-dev \\\n    icu-dev \\\n    git \\\n    nodejs \\\n    npm \\\n    && docker-php-ext-install -j$(nproc) pdo_mysql mbstring exif pcntl bcmath gd intl opcache \\\n    && docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp \\\n    && rm -rf \/var\/cache\/apk\/*\n\n# Composer'\u0131 kur\nCOPY --from=composer:latest \/usr\/bin\/composer \/usr\/bin\/composer\n\nWORKDIR \/var\/www\/html\n\nEXPOSE 9000\n    <\/code><\/pre>\n<p>Bu <code>Dockerfile<\/code>, temel PHP-FPM imaj\u0131n\u0131 al\u0131r, Laravel i\u00e7in gerekli olan \u00e7e\u015fitli PHP uzant\u0131lar\u0131n\u0131 y\u00fckler ve ayr\u0131ca Composer&#8217;\u0131 da konteyner i\u00e7ine kurar. <code>WORKDIR \/var\/www\/html<\/code> komutu, konteyner i\u00e7indeki \u00e7al\u0131\u015fma dizinini belirler. \u015eimdi bu <code>Dockerfile<\/code>&#8216;\u0131 kullanarak <code>docker-compose.yml<\/code> dosyam\u0131zda PHP servisini tan\u0131mlayal\u0131m:<\/p>\n<pre><code>\nversion: '3.8'\n\nservices:\n  # ... (db ve nginx servisleri burada) ...\n\n  php:\n    build:\n      context: .\n      dockerfile: Dockerfile # Yukar\u0131daki Dockerfile'\u0131 kullan\n    container_name: php_app\n    restart: always\n    volumes:\n      - .\/:\/var\/www\/html # Proje kodlar\u0131m\u0131z\u0131 konteynere ba\u011fla\n    ports:\n      - \"9000:9000\" # Sadece PHP-FPM'in d\u0131\u015far\u0131dan eri\u015fimini kontrol etmek i\u00e7in\n    depends_on:\n      - db # PHP-FPM'in ba\u015flamadan \u00f6nce veritaban\u0131n\u0131n haz\u0131r olmas\u0131n\u0131 bekle\n    environment:\n      # Laravel .env dosyas\u0131ndaki de\u011ferler i\u00e7in varsay\u0131lanlar veya ge\u00e7ersiz k\u0131lmalar\n      DB_CONNECTION: mysql\n      DB_HOST: db # Veritaban\u0131 servisinin ad\u0131\n      DB_PORT: 3306\n      DB_DATABASE: laravel_db\n      DB_USERNAME: laravel_user\n      DB_PASSWORD: laravel_password\n    <\/code><\/pre>\n<p>PHP servisi i\u00e7in <code>build: context: . dockerfile: Dockerfile<\/code> sat\u0131rlar\u0131, Docker Compose&#8217;a bu servisin imaj\u0131n\u0131 olu\u015fturmak i\u00e7in mevcut dizindeki (<code>.<\/code>) <code>Dockerfile<\/code> dosyas\u0131n\u0131 kullanmas\u0131n\u0131 s\u00f6yler. <code>volumes: - .\/:\/var\/www\/html<\/code> sat\u0131r\u0131, projemizin t\u00fcm kodlar\u0131n\u0131 PHP-FPM konteynerinin <code>\/var\/www\/html<\/code> dizinine ba\u011flar. Bu, geli\u015ftirme s\u0131ras\u0131nda kodlar\u0131m\u0131zda yapt\u0131\u011f\u0131m\u0131z de\u011fi\u015fikliklerin an\u0131nda PHP konteynerinde de yans\u0131mas\u0131n\u0131 sa\u011flar.<\/p>\n<p><code>depends_on: - db<\/code> ifadesi, PHP-FPM servisinin MySQL veritaban\u0131 servisi ba\u015flamadan \u00f6nce ba\u015flat\u0131lmamas\u0131n\u0131 sa\u011flar. Bu, PHP uygulamas\u0131n\u0131n veritaban\u0131 ba\u011flant\u0131s\u0131 kurmaya \u00e7al\u0131\u015fmadan \u00f6nce veritaban\u0131n\u0131n haz\u0131r olmas\u0131n\u0131 garanti eder. <code>environment<\/code> b\u00f6l\u00fcm\u00fc ise, Laravel&#8217;in <code>.env<\/code> dosyas\u0131ndaki baz\u0131 de\u011ferleri do\u011frudan konteyner ortam de\u011fi\u015fkenleri olarak ayarlamam\u0131za olanak tan\u0131r. \u00d6zellikle veritaban\u0131 ba\u011flant\u0131 bilgileri gibi hassas verileri bu \u015fekilde y\u00f6netmek, uygulaman\u0131n farkl\u0131 ortamlarda (geli\u015ftirme, test, \u00fcretim) kolayca uyarlanmas\u0131n\u0131 sa\u011flar. <code>DB_HOST: db<\/code> ifadesi, PHP-FPM&#8217;in MySQL servisine &#8220;db&#8221; ad\u0131yla eri\u015fmesini sa\u011flar, \u00e7\u00fcnk\u00fc Docker Compose servis adlar\u0131n\u0131 otomatik olarak i\u00e7 a\u011f DNS&#8217;i olarak kaydeder. Bu yap\u0131land\u0131rma ile art\u0131k Laravel uygulaman\u0131z\u0131n kodlar\u0131n\u0131 i\u015fleyecek PHP-FPM servisi haz\u0131r hale gelmi\u015f olur ve Nginx ile sorunsuz bir \u015fekilde ileti\u015fim kurabilir.<\/p>\n<h2>Uygulamay\u0131 \u00c7al\u0131\u015ft\u0131rma ve \u0130lk Testler: Her \u015eey Yolunda m\u0131?<\/h2>\n<p>\u015eimdiye kadar t\u00fcm servislerimizi (MySQL, Nginx, PHP-FPM) <code>docker-compose.yml<\/code> dosyam\u0131zda tan\u0131mlad\u0131k ve gerekli yap\u0131land\u0131rmalar\u0131 yapt\u0131k. Art\u0131k uygulamam\u0131z\u0131 Docker konteynerlerinde aya\u011fa kald\u0131rman\u0131n ve her \u015feyin d\u00fczg\u00fcn \u00e7al\u0131\u015f\u0131p \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 test etmenin zaman\u0131 geldi. Bu a\u015fama, t\u00fcm par\u00e7alar\u0131n bir araya geldi\u011fi ve projemizin canland\u0131\u011f\u0131 noktad\u0131r. Terminalinizi a\u00e7\u0131n ve projenizin ana dizinine gidin (<code>docker-compose.yml<\/code> dosyas\u0131n\u0131n bulundu\u011fu yer). Ard\u0131ndan a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code>\ndocker compose up -d\n    <\/code><\/pre>\n<p>Bu komut, <code>docker-compose.yml<\/code> dosyas\u0131n\u0131 okuyacak, tan\u0131mlanan t\u00fcm servisler i\u00e7in Docker imajlar\u0131n\u0131 (e\u011fer yerelde yoksa Docker Hub&#8217;dan \u00e7ekerek) olu\u015fturacak veya \u00e7ekecek ve bu servisleri arka planda (<code>-d<\/code> parametresi sayesinde &#8220;detached&#8221; modda) \u00e7al\u0131\u015ft\u0131racakt\u0131r. \u0130lk \u00e7al\u0131\u015ft\u0131rmada imajlar\u0131n indirilmesi biraz zaman alabilir. \u0130\u015flem tamamland\u0131\u011f\u0131nda, terminalinizde \u00e7al\u0131\u015fan servislerin isimlerini g\u00f6receksiniz. Konteynerlerin durumunu kontrol etmek i\u00e7in <code>docker compose ps<\/code> komutunu kullanabilirsiniz. T\u00fcm servislerin durumunun &#8220;Up&#8221; olmas\u0131 gerekir.<\/p>\n<p>Konteynerler \u00e7al\u0131\u015fmaya ba\u015flad\u0131ktan sonra, Laravel uygulamam\u0131z\u0131n veritaban\u0131 \u015femas\u0131n\u0131 olu\u015fturmam\u0131z ve belki de baz\u0131 ba\u015flang\u0131\u00e7 verilerini eklememiz gerekebilir. Bu i\u015flemleri de Docker konteyneri i\u00e7inden yapmal\u0131y\u0131z. PHP-FPM konteynerimiz i\u00e7inde Artisan komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in a\u015fa\u011f\u0131daki komutu kullanabiliriz:<\/p>\n<pre><code>\ndocker compose exec php php artisan migrate\ndocker compose exec php php artisan db:seed # E\u011fer seed dosyalar\u0131n\u0131z varsa\n    <\/code><\/pre>\n<p><code>docker compose exec php<\/code> komutu, &#8220;php&#8221; ad\u0131ndaki servisin konteyneri i\u00e7inde bir komut \u00e7al\u0131\u015ft\u0131rmam\u0131z\u0131 sa\u011flar. <code>php artisan migrate<\/code> veritaban\u0131 migrasyonlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rarak tablolar\u0131 olu\u015fturur, <code>php artisan db:seed<\/code> ise \u00f6rnek verileri veritaban\u0131na ekler. Bu komutlar\u0131n ba\u015far\u0131yla \u00e7al\u0131\u015fmas\u0131, PHP-FPM konteynerinin MySQL konteyneri ile sorunsuz bir \u015fekilde ileti\u015fim kurabildi\u011fini g\u00f6sterir.<\/p>\n<p>T\u00fcm servisler \u00e7al\u0131\u015f\u0131yor ve veritaban\u0131 ayarlar\u0131 yap\u0131ld\u0131ktan sonra, uygulamam\u0131za taray\u0131c\u0131dan eri\u015febiliriz. Nginx servisini 80 numaral\u0131 porta y\u00f6nlendirdi\u011fimiz i\u00e7in, web taray\u0131c\u0131n\u0131z\u0131 a\u00e7\u0131n ve adres \u00e7ubu\u011funa <code>http:\/\/localhost<\/code> yaz\u0131n. Laravel&#8217;in ho\u015f geldiniz sayfas\u0131n\u0131 g\u00f6rmeniz gerekir. E\u011fer Laravel&#8217;in varsay\u0131lan sayfas\u0131n\u0131 g\u00f6r\u00fcyorsan\u0131z, tebrikler! Laravel uygulaman\u0131z, Nginx ve MySQL ile Docker Compose \u00fczerinde ba\u015far\u0131yla \u00e7al\u0131\u015f\u0131yor demektir. E\u011fer bir sorunla kar\u015f\u0131la\u015f\u0131rsan\u0131z, ilk olarak konteyner loglar\u0131n\u0131 kontrol etmek iyi bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r. \u00d6rne\u011fin, Nginx konteynerinin loglar\u0131n\u0131 g\u00f6rmek i\u00e7in <code>docker compose logs nginx<\/code> komutunu kullanabilirsiniz. Bu, olas\u0131 yap\u0131land\u0131rma hatalar\u0131n\u0131 veya \u00e7al\u0131\u015fma zaman\u0131 sorunlar\u0131n\u0131 tespit etmenize yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<div class=\"expert-tip\">\n        Uzman \u0130pucu: Uygulaman\u0131z\u0131n canl\u0131ya \u00e7\u0131kmadan \u00f6nce yerel ortamda kusursuz \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olmak i\u00e7in, t\u00fcm servislerin loglar\u0131n\u0131 d\u00fczenli olarak kontrol edin. Hata mesajlar\u0131 veya uyar\u0131lar, genellikle sorunun kayna\u011f\u0131n\u0131 do\u011frudan i\u015faret eder. Ayr\u0131ca, Laravel&#8217;in kendi log dosyalar\u0131n\u0131 (<code>storage\/logs\/laravel.log<\/code>) da PHP konteyneri i\u00e7inde incelemeyi unutmay\u0131n.\n    <\/div>\n<p>Geli\u015ftirme s\u00fcrecinde yapt\u0131\u011f\u0131n\u0131z kod de\u011fi\u015fikliklerinin otomatik olarak yans\u0131d\u0131\u011f\u0131ndan emin olmak i\u00e7in, taray\u0131c\u0131n\u0131z\u0131 yenileyerek de\u011fi\u015fiklikleri kontrol edin. <code>volumes<\/code> ba\u011flamas\u0131 sayesinde, host makinenizde yapt\u0131\u011f\u0131n\u0131z kod de\u011fi\u015fiklikleri an\u0131nda konteyner i\u00e7inde de g\u00f6r\u00fcn\u00fcr olacakt\u0131r. Bu, geli\u015ftirme ak\u0131\u015f\u0131n\u0131z\u0131 h\u0131zland\u0131r\u0131r ve Docker&#8217;\u0131n sundu\u011fu en b\u00fcy\u00fck kolayl\u0131klardan biridir. Uygulamay\u0131 durdurmak istedi\u011finizde, projenizin ana dizininde <code>docker compose down<\/code> komutunu kullanabilirsiniz. Bu komut, t\u00fcm servisleri durdurur ve konteynerleri siler. Ancak, veritaban\u0131 verileriniz <code>db_data<\/code> volume&#8217;\u00fcnde g\u00fcvende kalacakt\u0131r.<\/p>\n<h2>Geli\u015fmi\u015f Yap\u0131land\u0131rmalar ve Optimizasyon \u0130pu\u00e7lar\u0131 Nelerdir?<\/h2>\n<p>Temel kurulumu ba\u015far\u0131yla tamamlad\u0131ktan sonra, Docker Compose ile Laravel geli\u015ftirme ortam\u0131n\u0131z\u0131 daha verimli, g\u00fcvenli ve performansl\u0131 hale getirmek i\u00e7in baz\u0131 geli\u015fmi\u015f yap\u0131land\u0131rmalara ve optimizasyon ipu\u00e7lar\u0131na g\u00f6z atabiliriz. Bu b\u00f6l\u00fcmde, deneyimli kullan\u0131c\u0131lar\u0131n i\u015f ak\u0131\u015flar\u0131n\u0131 iyile\u015ftirecek ve projelerini bir sonraki seviyeye ta\u015f\u0131yacak pratik bilgiler bulacaks\u0131n\u0131z.<\/p>\n<h3>Laravel .env Dosyas\u0131n\u0131n Docker Compose ile Entegrasyonu<\/h3>\n<p>Laravel, ortam de\u011fi\u015fkenlerini y\u00f6netmek i\u00e7in <code>.env<\/code> dosyas\u0131n\u0131 kullan\u0131r. Docker Compose&#8217;da ise bu de\u011fi\u015fkenleri do\u011frudan <code>docker-compose.yml<\/code> i\u00e7indeki <code>environment<\/code> b\u00f6l\u00fcm\u00fcnde veya bir <code>.env<\/code> dosyas\u0131 arac\u0131l\u0131\u011f\u0131yla y\u00f6netebiliriz. En iyi uygulama, hassas bilgileri (veritaban\u0131 \u015fifreleri, API anahtarlar\u0131 vb.) do\u011frudan <code>docker-compose.yml<\/code> i\u00e7ine yazmaktan ka\u00e7\u0131nmakt\u0131r. Bunun yerine, ana dizininizde bir <code>.env<\/code> dosyas\u0131 olu\u015fturup Docker Compose&#8217;un bu dosyay\u0131 otomatik olarak okumas\u0131n\u0131 sa\u011flayabilirsiniz. Docker Compose, <code>docker-compose.yml<\/code> dosyas\u0131n\u0131n bulundu\u011fu dizindeki <code>.env<\/code> dosyas\u0131n\u0131 otomatik olarak y\u00fckler.<\/p>\n<pre><code>\n# .env (proje ana dizininde)\nDB_CONNECTION=mysql\nDB_HOST=db\nDB_PORT=3306\nDB_DATABASE=laravel_db\nDB_USERNAME=laravel_user\nDB_PASSWORD=laravel_password\nAPP_NAME=\"My Docker Laravel App\"\nAPP_ENV=local\nAPP_KEY=base64:YOUR_GENERATED_APP_KEY_HERE\n    <\/code><\/pre>\n<p>Daha sonra <code>docker-compose.yml<\/code> dosyan\u0131zda PHP servisi alt\u0131nda bu de\u011fi\u015fkenlere referans verebilirsiniz:<\/p>\n<pre><code>\nservices:\n  php:\n    # ...\n    environment:\n      DB_CONNECTION: ${DB_CONNECTION}\n      DB_HOST: ${DB_HOST}\n      DB_PORT: ${DB_PORT}\n      DB_DATABASE: ${DB_DATABASE}\n      DB_USERNAME: ${DB_USERNAME}\n      DB_PASSWORD: ${DB_PASSWORD}\n      APP_KEY: ${APP_KEY}\n      APP_ENV: ${APP_ENV}\n    # ...\n    <\/code><\/pre>\n<p>Bu yakla\u015f\u0131m, ortam de\u011fi\u015fkenlerini merkezi bir yerden y\u00f6netmenizi ve hassas bilgileri <code>docker-compose.yml<\/code> dosyas\u0131ndan ay\u0131rman\u0131z\u0131 sa\u011flar. Ayr\u0131ca, farkl\u0131 ortamlar (geli\u015ftirme, test, \u00fcretim) i\u00e7in farkl\u0131 <code>.env<\/code> dosyalar\u0131 kullanarak kolayca ge\u00e7i\u015f yapabilirsiniz.<\/p>\n<h3>Composer ve Artisan Komutlar\u0131n\u0131 Docker \u0130\u00e7inde \u00c7al\u0131\u015ft\u0131rma<\/h3>\n<p>Projenizin ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 y\u00f6netmek veya Laravel&#8217;in Artisan komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in her zaman PHP-FPM konteyneri i\u00e7ine girmelisiniz. Daha \u00f6nce <code>docker compose exec php php artisan migrate<\/code> \u00f6rne\u011fini g\u00f6rm\u00fc\u015ft\u00fck. Composer i\u00e7in de benzer bir yakla\u015f\u0131m izleyebilirsiniz:<\/p>\n<pre><code>\ndocker compose exec php composer install\ndocker compose exec php composer update\ndocker compose exec php php artisan cache:clear\ndocker compose exec php php artisan config:clear\n    <\/code><\/pre>\n<p>Bu y\u00f6ntem, Composer ve Artisan&#8217;\u0131n konteynerin izole edilmi\u015f ortam\u0131nda \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar ve host makinenizdeki PHP veya Composer kurulumuyla \u00e7ak\u0131\u015fma riskini ortadan kald\u0131r\u0131r.<\/p>\n<h3>\u00d6zel Dockerfile ile PHP \u0130maj\u0131n\u0131 \u00d6zelle\u015ftirme<\/h3>\n<p>Yukar\u0131da bahsetti\u011fimiz gibi, PHP imaj\u0131n\u0131z\u0131 \u00f6zelle\u015ftirmek i\u00e7in bir <code>Dockerfile<\/code> kullanmak, uygulaman\u0131z\u0131n gereksinimlerine tam olarak uyan bir ortam olu\u015fturman\u0131z\u0131 sa\u011flar. Sadece gerekli uzant\u0131lar\u0131 eklemekle kalmaz, ayn\u0131 zamanda \u00f6zel PHP ayarlar\u0131n\u0131 (<code>php.ini<\/code>) da yap\u0131land\u0131rabilirsiniz. \u00d6rne\u011fin, Laravel i\u00e7in bellek limitini art\u0131rmak veya zaman a\u015f\u0131m\u0131 ayarlar\u0131n\u0131 de\u011fi\u015ftirmek isteyebilirsiniz. Bunun i\u00e7in <code>php\/custom.ini<\/code> gibi bir dosya olu\u015fturup <code>Dockerfile<\/code> i\u00e7inde kopyalayabilirsiniz:<\/p>\n<pre><code>\n# php\/custom.ini\nmemory_limit = 256M\nupload_max_filesize = 64M\npost_max_size = 64M\nmax_execution_time = 300\n    <\/code><\/pre>\n<pre><code>\n# Dockerfile\nFROM php:8.2-fpm-alpine\n# ... (uzant\u0131 kurulumlar\u0131) ...\nCOPY php\/custom.ini \/usr\/local\/etc\/php\/conf.d\/custom.ini\n# ...\n    <\/code><\/pre>\n<h3>Caching Servisleri (Redis\/Memcached) Ekleme<\/h3>\n<p>Laravel uygulamalar\u0131n\u0131n performans\u0131n\u0131 art\u0131rmak i\u00e7in genellikle Redis veya Memcached gibi caching servisleri kullan\u0131l\u0131r. Bu servisleri de Docker Compose ile kolayca projenize entegre edebilirsiniz:<\/p>\n<pre><code>\nversion: '3.8'\n\nservices:\n  # ... di\u011fer servisler ...\n\n  redis:\n    image: redis:alpine\n    container_name: redis_cache\n    restart: always\n    ports:\n      - \"6379:6379\"\n    volumes:\n      - redis_data:\/data # Veri kal\u0131c\u0131l\u0131\u011f\u0131 i\u00e7in\n\nvolumes:\n  # ... di\u011fer volume'ler ...\n  redis_data:\n    driver: local\n    <\/code><\/pre>\n<p>Ard\u0131ndan Laravel&#8217;in <code>.env<\/code> dosyas\u0131nda <code>REDIS_HOST=redis<\/code> olarak ayarlayarak uygulaman\u0131z\u0131n Redis servisine ba\u011flanmas\u0131n\u0131 sa\u011flayabilirsiniz. Benzer \u015fekilde, Memcached i\u00e7in de bir servis tan\u0131mlayabilirsiniz.<\/p>\n<h3>HTTPS Yap\u0131land\u0131rmas\u0131 ve G\u00fcvenlik<\/h3>\n<p>Geli\u015ftirme ortam\u0131nda genellikle HTTP kullan\u0131l\u0131rken, \u00fcretimde HTTPS olmazsa olmazd\u0131r. Docker Compose ile Nginx&#8217;i HTTPS i\u00e7in yap\u0131land\u0131rmak m\u00fcmk\u00fcnd\u00fcr. Let&#8217;s Encrypt gibi hizmetlerle otomatik sertifika sa\u011flamak i\u00e7in <code>certbot<\/code> gibi ek konteynerler kullanabilirsiniz. Geli\u015ftirme ortam\u0131nda ise, kendinden imzal\u0131 (self-signed) sertifikalar olu\u015fturarak HTTPS&#8217;i test edebilirsiniz. Bu, Nginx yap\u0131land\u0131rman\u0131zda ek <code>server<\/code> bloklar\u0131 ve SSL sertifikas\u0131 yollar\u0131n\u0131 belirtmeyi gerektirir.<\/p>\n<pre><code>\n<div class=\"expert-tip\">\n  Uzman \u0130pucu: \u00dcretim ortam\u0131nda Docker Compose'u do\u011frudan kullanmak yerine, Kubernetes gibi daha geli\u015fmi\u015f orkestrasyon ara\u00e7lar\u0131n\u0131 de\u011ferlendirmeyi d\u00fc\u015f\u00fcnebilirsiniz. Docker Compose, \u00f6zellikle geli\u015ftirme ve k\u00fc\u00e7\u00fck \u00f6l\u00e7ekli da\u011f\u0131t\u0131mlar i\u00e7in m\u00fckemmeldir. Ancak, g\u00fcvenlik i\u00e7in ortam de\u011fi\u015fkenlerini Docker Secrets veya Kubernetes Secrets ile y\u00f6netmek \u00e7ok daha g\u00fcvenlidir.\n<\/div>\n    <\/code><\/pre>\n<p>Bu geli\u015fmi\u015f yap\u0131land\u0131rmalar ve ipu\u00e7lar\u0131, Docker Compose ile Laravel geli\u015ftirme deneyiminizi daha profesyonel ve sorunsuz hale getirecektir. Projenizin b\u00fcy\u00fckl\u00fc\u011f\u00fcne ve gereksinimlerine g\u00f6re bu teknikleri uygulayarak, daha sa\u011flam ve y\u00f6netilebilir bir geli\u015ftirme ortam\u0131 olu\u015fturabilirsiniz.<\/p>\n<h2>Sonu\u00e7: Docker Compose ile Laravel Geli\u015ftirmenin Gelece\u011fi<\/h2>\n<p>Bu kapsaml\u0131 rehber boyunca, Laravel projenizi Nginx ve MySQL ile Docker Compose kullanarak nas\u0131l ba\u015ftan sona kuraca\u011f\u0131n\u0131z\u0131, yap\u0131land\u0131raca\u011f\u0131n\u0131z\u0131 ve y\u00f6netece\u011finizi ad\u0131m ad\u0131m \u00f6\u011frendik. Docker Compose&#8217;un sundu\u011fu izolasyon, ta\u015f\u0131nabilirlik ve kolay y\u00f6netim gibi temel avantajlardan ba\u015flayarak, MySQL, Nginx ve PHP-FPM servislerini ayr\u0131 ayr\u0131 nas\u0131l tan\u0131mlayaca\u011f\u0131m\u0131z\u0131, veri kal\u0131c\u0131l\u0131\u011f\u0131 i\u00e7in volume&#8217;leri nas\u0131l kullanaca\u011f\u0131m\u0131z\u0131 ve uygulamam\u0131z\u0131 nas\u0131l \u00e7al\u0131\u015ft\u0131r\u0131p test edece\u011fimizi detayland\u0131rd\u0131k. Ayr\u0131ca, ortam de\u011fi\u015fkenlerinin y\u00f6netimi, \u00f6zel Dockerfile&#8217;lar, caching servislerinin entegrasyonu ve g\u00fcvenlik gibi geli\u015fmi\u015f konulara da de\u011finerek, projenizi daha profesyonel bir seviyeye ta\u015f\u0131yacak ipu\u00e7lar\u0131 sunduk.<\/p>\n<p>Docker Compose, \u00f6zellikle geli\u015ftirme ortamlar\u0131n\u0131n standartla\u015ft\u0131r\u0131lmas\u0131, yeni ekip \u00fcyelerinin h\u0131zl\u0131ca projeye dahil edilmesi ve farkl\u0131 projeler aras\u0131nda ge\u00e7i\u015f yaparken ya\u015fanan karma\u015f\u0131kl\u0131\u011f\u0131n azalt\u0131lmas\u0131 konusunda paha bi\u00e7ilmez bir ara\u00e7t\u0131r. Geli\u015ftirici verimlili\u011fini art\u0131r\u0131r, &#8220;benim makinemde \u00e7al\u0131\u015f\u0131yordu&#8221; sorunlar\u0131n\u0131 ortadan kald\u0131r\u0131r ve geli\u015ftirme ile \u00fcretim ortamlar\u0131 aras\u0131nda tutarl\u0131l\u0131k sa\u011flayarak da\u011f\u0131t\u0131m s\u00fcre\u00e7lerini kolayla\u015ft\u0131r\u0131r. Modern web geli\u015ftirme pratiklerinin vazge\u00e7ilmezi haline gelen kapsay\u0131c\u0131 teknolojileri, Laravel gibi pop\u00fcler framework&#8217;lerle birle\u015fti\u011finde, geli\u015ftiricilere s\u0131n\u0131rs\u0131z esneklik ve g\u00fc\u00e7 sunar.<\/p>\n<p>Gelecekte, kapsay\u0131c\u0131 teknolojilerinin web geli\u015ftirme ekosistemindeki rol\u00fc daha da artacak. Mikroservis mimarileri, sunucusuz bili\u015fim ve CI\/CD (S\u00fcrekli Entegrasyon\/S\u00fcrekli Da\u011f\u0131t\u0131m) s\u00fcre\u00e7lerinde Docker ve Docker Compose gibi ara\u00e7lar merkezi bir yer tutmaya devam edecek. Bu rehberde edindi\u011finiz bilgilerle, sadece mevcut projenizi de\u011fil, gelecekteki t\u00fcm web projelerinizi de daha modern, s\u00fcrd\u00fcr\u00fclebilir ve \u00f6l\u00e7eklenebilir bir \u015fekilde geli\u015ftirebileceksiniz. \u015eimdi \u00f6\u011frendiklerinizi kendi projelerinizde uygulama zaman\u0131!<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<ul>\n<li>\n            <strong>S: Docker Compose kullanmak performans\u0131m\u0131 etkiler mi?<\/strong><\/p>\n<p>C: Geli\u015ftirme ortam\u0131nda, \u00f6zellikle macOS ve Windows&#8217;ta Docker Desktop&#8217;\u0131n sanalla\u015ft\u0131rma katman\u0131 nedeniyle yerel kurulumlara g\u00f6re hafif bir performans d\u00fc\u015f\u00fc\u015f\u00fc ya\u015fanabilir. Ancak, bu genellikle g\u00f6z ard\u0131 edilebilir d\u00fczeydedir ve Docker&#8217;\u0131n sundu\u011fu avantajlar bu k\u00fc\u00e7\u00fck dezavantaj\u0131 fazlas\u0131yla telafi eder. Linux&#8217;ta ise performans fark\u0131 neredeyse hi\u00e7 yoktur.<\/p>\n<\/li>\n<li>\n            <strong>S: Laravel&#8217;in .env dosyas\u0131ndaki APP_KEY&#8217;i nas\u0131l olu\u015fturabilirim?<\/strong><\/p>\n<p>C: <code>docker compose exec php php artisan key:generate<\/code> komutunu \u00e7al\u0131\u015ft\u0131rarak APP_KEY&#8217;i otomatik olarak olu\u015fturabilirsiniz. Bu komut, Laravel projenizin <code>.env<\/code> dosyas\u0131n\u0131 g\u00fcncelleyecektir.<\/p>\n<\/li>\n<li>\n            <strong>S: Veritaban\u0131 verilerimi yedeklemek i\u00e7in ne yapmal\u0131y\u0131m?<\/strong><\/p>\n<p>C: MySQL veritaban\u0131 verileriniz <code>db_data<\/code> ad\u0131ndaki Docker volume&#8217;\u00fcnde saklan\u0131r. Bu volume&#8217;\u00fc yedeklemek i\u00e7in <code>docker volume inspect db_data<\/code> komutuyla fiziksel konumunu bulup manuel olarak kopyalayabilir veya <code>mysqldump<\/code> gibi ara\u00e7lar\u0131 PHP konteyneri i\u00e7inden \u00e7al\u0131\u015ft\u0131rarak veritaban\u0131 yede\u011fi alabilirsiniz.<\/p>\n<\/li>\n<li>\n            <strong>S: Nginx veya PHP-FPM yap\u0131land\u0131rmamda de\u011fi\u015fiklik yapt\u0131\u011f\u0131mda ne yapmal\u0131y\u0131m?<\/strong><\/p>\n<p>C: Nginx yap\u0131land\u0131rman\u0131zda (<code>nginx\/default.conf<\/code>) de\u011fi\u015fiklik yapt\u0131ysan\u0131z, Nginx konteynerini yeniden ba\u015flatman\u0131z gerekir: <code>docker compose restart nginx<\/code>. E\u011fer PHP-FPM i\u00e7in <code>Dockerfile<\/code> veya <code>php\/custom.ini<\/code> gibi dosyalarda de\u011fi\u015fiklik yapt\u0131ysan\u0131z, imaj\u0131 yeniden olu\u015fturman\u0131z ve servisi yeniden ba\u015flatman\u0131z gerekir: <code>docker compose build php && docker compose restart php<\/code>.<\/p>\n<\/li>\n<li>\n            <strong>S: Docker Compose ile birden fazla Laravel projesini ayn\u0131 anda \u00e7al\u0131\u015ft\u0131rabilir miyim?<\/strong><\/p>\n<p>C: Evet, her Laravel projesi i\u00e7in ayr\u0131 bir dizin ve kendi <code>docker-compose.yml<\/code> dosyas\u0131 olu\u015fturarak birden fazla projeyi ayn\u0131 anda \u00e7al\u0131\u015ft\u0131rabilirsiniz. Her projenin kendi servisleri ve portlar\u0131 farkl\u0131 olaca\u011f\u0131 i\u00e7in \u00e7ak\u0131\u015fma ya\u015fanmaz. \u00d6rne\u011fin, bir projenin Nginx&#8217;ini 80 portuna, di\u011ferini 8080 portuna y\u00f6nlendirebilirsiniz.<\/p>\n<\/li>\n<\/ul>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Laravel, Nginx, MySQL Docker Compose Kurulumu Rehberi Modern web geli\u015ftirme s\u00fcre\u00e7lerinde kar\u015f\u0131la\u015fan en b\u00fcy\u00fck zorluklardan biri, tutarl\u0131 ve&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":[1504],"tags":[],"class_list":{"0":"post-39832","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-nginx","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>Neden Docker Compose ile Laravel, Nginx ve MySQL Kurulumu Yapmal\u0131y\u0131z?<\/title>\n<meta name=\"description\" content=\"Modern web geli\u015ftirme s\u00fcre\u00e7lerinde kar\u015f\u0131la\u015fan en b\u00fcy\u00fck zorluklardan biri, tutarl\u0131 ve izole edilmi\u015f geli\u015ftirme ortamlar\u0131 olu\u015fturmakt\u0131r. Peki, Laravel projenizi Nginx ve MySQL ile Docker Compose kullanarak nas\u0131l h\u0131zl\u0131ca aya\u011fa kald\u0131rabilir ve bu karma\u015f\u0131kl\u0131\u011f\u0131 ortadan kald\u0131rabilirsiniz? Bu rehber, size ad\u0131m ad\u0131m bir Laravel uygulamas\u0131n\u0131 Docker konteynerlerinde sorunsuz bir \u015fekilde \u00e7al\u0131\u015ft\u0131rman\u0131n t\u00fcm detaylar\u0131n\u0131 sunuyor.\" \/>\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\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmaliyiz-2\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Neden Docker Compose ile Laravel, Nginx ve MySQL Kurulumu Yapmal\u0131y\u0131z?\" \/>\n<meta property=\"og:description\" content=\"Modern web geli\u015ftirme s\u00fcre\u00e7lerinde kar\u015f\u0131la\u015fan en b\u00fcy\u00fck zorluklardan biri, tutarl\u0131 ve izole edilmi\u015f geli\u015ftirme ortamlar\u0131 olu\u015fturmakt\u0131r. Peki, Laravel projenizi Nginx ve MySQL ile Docker Compose kullanarak nas\u0131l h\u0131zl\u0131ca aya\u011fa kald\u0131rabilir ve bu karma\u015f\u0131kl\u0131\u011f\u0131 ortadan kald\u0131rabilirsiniz? Bu rehber, size ad\u0131m ad\u0131m bir Laravel uygulamas\u0131n\u0131 Docker konteynerlerinde sorunsuz bir \u015fekilde \u00e7al\u0131\u015ft\u0131rman\u0131n t\u00fcm detaylar\u0131n\u0131 sunuyor.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmaliyiz-2\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-24T09:22:23+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=\"24 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmaliyiz-2\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmaliyiz-2\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Neden Docker Compose ile Laravel, Nginx ve MySQL Kurulumu Yapmal\u0131y\u0131z?\",\"datePublished\":\"2026-02-24T09:22:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmaliyiz-2\/\"},\"wordCount\":3907,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Nginx\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmaliyiz-2\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmaliyiz-2\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmaliyiz-2\/\",\"name\":\"Neden Docker Compose ile Laravel, Nginx ve MySQL Kurulumu Yapmal\u0131y\u0131z?\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-02-24T09:22:23+00:00\",\"description\":\"Modern web geli\u015ftirme s\u00fcre\u00e7lerinde kar\u015f\u0131la\u015fan en b\u00fcy\u00fck zorluklardan biri, tutarl\u0131 ve izole edilmi\u015f geli\u015ftirme ortamlar\u0131 olu\u015fturmakt\u0131r. Peki, Laravel projenizi Nginx ve MySQL ile Docker Compose kullanarak nas\u0131l h\u0131zl\u0131ca aya\u011fa kald\u0131rabilir ve bu karma\u015f\u0131kl\u0131\u011f\u0131 ortadan kald\u0131rabilirsiniz? Bu rehber, size ad\u0131m ad\u0131m bir Laravel uygulamas\u0131n\u0131 Docker konteynerlerinde sorunsuz bir \u015fekilde \u00e7al\u0131\u015ft\u0131rman\u0131n t\u00fcm detaylar\u0131n\u0131 sunuyor.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmaliyiz-2\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmaliyiz-2\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmaliyiz-2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Neden Docker Compose ile Laravel, Nginx ve MySQL Kurulumu Yapmal\u0131y\u0131z?\"}]},{\"@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":"Neden Docker Compose ile Laravel, Nginx ve MySQL Kurulumu Yapmal\u0131y\u0131z?","description":"Modern web geli\u015ftirme s\u00fcre\u00e7lerinde kar\u015f\u0131la\u015fan en b\u00fcy\u00fck zorluklardan biri, tutarl\u0131 ve izole edilmi\u015f geli\u015ftirme ortamlar\u0131 olu\u015fturmakt\u0131r. Peki, Laravel projenizi Nginx ve MySQL ile Docker Compose kullanarak nas\u0131l h\u0131zl\u0131ca aya\u011fa kald\u0131rabilir ve bu karma\u015f\u0131kl\u0131\u011f\u0131 ortadan kald\u0131rabilirsiniz? Bu rehber, size ad\u0131m ad\u0131m bir Laravel uygulamas\u0131n\u0131 Docker konteynerlerinde sorunsuz bir \u015fekilde \u00e7al\u0131\u015ft\u0131rman\u0131n t\u00fcm detaylar\u0131n\u0131 sunuyor.","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\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmaliyiz-2\/","og_locale":"tr_TR","og_type":"article","og_title":"Neden Docker Compose ile Laravel, Nginx ve MySQL Kurulumu Yapmal\u0131y\u0131z?","og_description":"Modern web geli\u015ftirme s\u00fcre\u00e7lerinde kar\u015f\u0131la\u015fan en b\u00fcy\u00fck zorluklardan biri, tutarl\u0131 ve izole edilmi\u015f geli\u015ftirme ortamlar\u0131 olu\u015fturmakt\u0131r. Peki, Laravel projenizi Nginx ve MySQL ile Docker Compose kullanarak nas\u0131l h\u0131zl\u0131ca aya\u011fa kald\u0131rabilir ve bu karma\u015f\u0131kl\u0131\u011f\u0131 ortadan kald\u0131rabilirsiniz? Bu rehber, size ad\u0131m ad\u0131m bir Laravel uygulamas\u0131n\u0131 Docker konteynerlerinde sorunsuz bir \u015fekilde \u00e7al\u0131\u015ft\u0131rman\u0131n t\u00fcm detaylar\u0131n\u0131 sunuyor.","og_url":"https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmaliyiz-2\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-02-24T09:22:23+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"24 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmaliyiz-2\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmaliyiz-2\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Neden Docker Compose ile Laravel, Nginx ve MySQL Kurulumu Yapmal\u0131y\u0131z?","datePublished":"2026-02-24T09:22:23+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmaliyiz-2\/"},"wordCount":3907,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Nginx"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmaliyiz-2\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmaliyiz-2\/","url":"https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmaliyiz-2\/","name":"Neden Docker Compose ile Laravel, Nginx ve MySQL Kurulumu Yapmal\u0131y\u0131z?","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-02-24T09:22:23+00:00","description":"Modern web geli\u015ftirme s\u00fcre\u00e7lerinde kar\u015f\u0131la\u015fan en b\u00fcy\u00fck zorluklardan biri, tutarl\u0131 ve izole edilmi\u015f geli\u015ftirme ortamlar\u0131 olu\u015fturmakt\u0131r. Peki, Laravel projenizi Nginx ve MySQL ile Docker Compose kullanarak nas\u0131l h\u0131zl\u0131ca aya\u011fa kald\u0131rabilir ve bu karma\u015f\u0131kl\u0131\u011f\u0131 ortadan kald\u0131rabilirsiniz? Bu rehber, size ad\u0131m ad\u0131m bir Laravel uygulamas\u0131n\u0131 Docker konteynerlerinde sorunsuz bir \u015fekilde \u00e7al\u0131\u015ft\u0131rman\u0131n t\u00fcm detaylar\u0131n\u0131 sunuyor.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmaliyiz-2\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmaliyiz-2\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmaliyiz-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Neden Docker Compose ile Laravel, Nginx ve MySQL Kurulumu Yapmal\u0131y\u0131z?"}]},{"@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\/39832","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=39832"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39832\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=39832"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=39832"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=39832"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}