{"id":39810,"date":"2026-02-24T04:21:04","date_gmt":"2026-02-24T01:21:04","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmalisiniz\/"},"modified":"2026-02-24T04:21:04","modified_gmt":"2026-02-24T01:21:04","slug":"neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmalisiniz","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmalisiniz\/","title":{"rendered":"Neden Docker Compose ile Laravel, Nginx ve MySQL Kurulumu Yapmal\u0131s\u0131n\u0131z?"},"content":{"rendered":"<p><title>Docker Compose ile Laravel, Nginx ve MySQL Kurulumu: Ad\u0131m Ad\u0131m Rehber<\/title><br \/>\n<body><\/p>\n<p>Modern web geli\u015ftirme s\u00fcre\u00e7lerinde, projelerin farkl\u0131 ortamlar aras\u0131nda tutarl\u0131 bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamak en b\u00fcy\u00fck zorluklardan biridir. &#8220;Benim bilgisayar\u0131mda \u00e7al\u0131\u015f\u0131yordu!&#8221; c\u00fcmlesiyle s\u0131k\u00e7a kar\u015f\u0131la\u015f\u0131yorsan\u0131z, bu sorunlara kesin ve kal\u0131c\u0131 bir \u00e7\u00f6z\u00fcm aray\u0131\u015f\u0131nda olabilirsiniz. \u0130\u015fte bu noktada Docker Compose, Laravel, Nginx ve MySQL \u00fc\u00e7l\u00fcs\u00fcn\u00fc bir araya getirerek, geli\u015ftirme ortam\u0131n\u0131z\u0131 standartla\u015ft\u0131rman\u0131n ve verimli hale getirmenin anahtar\u0131n\u0131 sunar. Bu kapsaml\u0131 rehberde, s\u0131f\u0131rdan ba\u015flayarak bu g\u00fc\u00e7l\u00fc teknolojileri Docker Compose ile nas\u0131l entegre edece\u011finizi ad\u0131m ad\u0131m \u00f6\u011frenecek, b\u00f6ylece projenizin her yerde sorunsuz \u00e7al\u0131\u015fmas\u0131n\u0131 garanti alt\u0131na alacaks\u0131n\u0131z.<\/p>\n<h2>Neden Docker Compose ile Laravel, Nginx ve MySQL Kurulumu Yapmal\u0131s\u0131n\u0131z?<\/h2>\n<p>Web uygulamalar\u0131 geli\u015ftirirken, projenin ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 y\u00f6netmek ve farkl\u0131 geli\u015ftiricilerin makinelerinde ayn\u0131 ortam\u0131 sa\u011flamak genellikle karma\u015f\u0131k bir s\u00fcre\u00e7tir. Geleneksel y\u00f6ntemlerle, her geli\u015ftiricinin kendi bilgisayar\u0131na PHP, Nginx, MySQL gibi servisleri manuel olarak kurmas\u0131 gerekir ki bu da s\u00fcr\u00fcm farkl\u0131l\u0131klar\u0131, uyumluluk sorunlar\u0131 ve zaman kayb\u0131na yol a\u00e7abilir. \u0130\u015fte tam da bu noktada konteyner teknolojileri, \u00f6zellikle de Docker ve Docker Compose, devreye girerek bu sorunlara modern ve etkili \u00e7\u00f6z\u00fcmler sunar.<\/p>\n<p>Docker, uygulamalar\u0131 ve t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 izole edilmi\u015f, ta\u015f\u0131nabilir birimler olan &#8220;konteynerler&#8221; i\u00e7ine paketlemenizi sa\u011flar. Bu konteynerler, uygulaman\u0131z\u0131n her ortamda (geli\u015ftirme, test, \u00fcretim) ayn\u0131 \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 garanti eder. Laravel projenizi Docker konteynerlerine ta\u015f\u0131d\u0131\u011f\u0131n\u0131zda, art\u0131k PHP s\u00fcr\u00fcm\u00fc, uzant\u0131lar veya sunucu konfig\u00fcrasyonu gibi konularda endi\u015felenmenize gerek kalmaz. Her \u015fey konteyner i\u00e7inde standartla\u015ft\u0131r\u0131lm\u0131\u015ft\u0131r. Ayr\u0131ca, farkl\u0131 projeler i\u00e7in farkl\u0131 PHP versiyonlar\u0131na veya veritaban\u0131 sunucular\u0131na ihtiya\u00e7 duydu\u011funuzda, Docker sayesinde bu ortamlar\u0131 birbirine kar\u0131\u015ft\u0131rmadan kolayca y\u00f6netebilirsiniz. \u00d6rne\u011fin, bir projeniz PHP 7.4 ile \u00e7al\u0131\u015f\u0131rken, di\u011fer projeniz PHP 8.2 gerektirebilir. Docker bu senaryoyu sorunsuz bir \u015fekilde ele al\u0131r.<\/p>\n<p>Docker Compose ise, birden fazla Docker konteynerini i\u00e7eren uygulamalar\u0131 tan\u0131mlamak ve \u00e7al\u0131\u015ft\u0131rmak i\u00e7in kullan\u0131lan bir ara\u00e7t\u0131r. Laravel uygulamalar\u0131 genellikle bir PHP-FPM servisi, bir Nginx web sunucusu ve bir MySQL veritaban\u0131 servisi gibi birden \u00e7ok bile\u015fenden olu\u015fur. Docker Compose, bu servislerin tamam\u0131n\u0131 tek bir YAML dosyas\u0131 i\u00e7inde tan\u0131mlaman\u0131za olanak tan\u0131r. Bu sayede, tek bir komutla t\u00fcm uygulama y\u0131\u011f\u0131n\u0131n\u0131 (stack) aya\u011fa kald\u0131rabilir, durdurabilir veya yeniden ba\u015flatabilirsiniz. Bu, \u00f6zellikle yeni bir geli\u015ftiricinin projeye ba\u015flamas\u0131 veya mevcut bir projenin farkl\u0131 bir makinede kurulmas\u0131 gerekti\u011finde kurulum s\u00fcrecini dakikalara indirir. Karma\u015f\u0131k ba\u011f\u0131ml\u0131l\u0131klar\u0131n manuel olarak kurulmas\u0131 yerine, sadece Docker ve Docker Compose&#8217;u kurmak yeterli olur. Bu, hem zaman kazand\u0131r\u0131r hem de hata yapma olas\u0131l\u0131\u011f\u0131n\u0131 minimize eder. Ayr\u0131ca, geli\u015ftirme ortam\u0131n\u0131n \u00fcretim ortam\u0131na m\u00fcmk\u00fcn oldu\u011funca yak\u0131n olmas\u0131n\u0131 sa\u011flayarak, beklenmedik sorunlar\u0131n ortaya \u00e7\u0131kmas\u0131n\u0131 engeller. Bu yakla\u015f\u0131m, modern DevOps pratiklerinin temelini olu\u015fturur ve yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinde verimlili\u011fi \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r.<\/p>\n<h2>Haz\u0131rl\u0131k A\u015famas\u0131: Gerekli Ara\u00e7lar Nelerdir ve Proje Yap\u0131s\u0131 Nas\u0131l Olmal\u0131?<\/h2>\n<p>Bu rehbere ba\u015flamadan \u00f6nce bilgisayar\u0131n\u0131zda baz\u0131 temel ara\u00e7lar\u0131n y\u00fckl\u00fc olmas\u0131 gerekmektedir. Bu ara\u00e7lar, Docker ekosistemini kullanabilmeniz ve Laravel projenizi y\u00f6netebilmeniz i\u00e7in olmazsa olmazlard\u0131r. \u0130lk ve en \u00f6nemli gereksinim, tabii ki Docker&#8217;d\u0131r. Docker Desktop, Windows ve macOS kullan\u0131c\u0131lar\u0131 i\u00e7in hem Docker Engine&#8217;i hem de Docker Compose&#8217;u (eski versiyonlarda ayr\u0131 bir kurulumdu, yeni versiyonlarda entegre) tek bir pakette sunan kullan\u0131c\u0131 dostu bir \u00e7\u00f6z\u00fcmd\u00fcr. Linux kullan\u0131c\u0131lar\u0131 ise Docker Engine ve Docker Compose&#8217;u ayr\u0131 ayr\u0131 kurmal\u0131d\u0131r. Kurulum talimatlar\u0131 i\u00e7in Docker&#8217;\u0131n resmi web sitesini ziyaret edebilirsiniz. Kurulumun ba\u015far\u0131l\u0131 olup olmad\u0131\u011f\u0131n\u0131 kontrol etmek i\u00e7in terminalinizde <code>docker --version<\/code> ve <code>docker compose version<\/code> komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rabilirsiniz. Bu komutlar, y\u00fckl\u00fc Docker ve Docker Compose versiyonlar\u0131n\u0131 g\u00f6stermelidir.<\/p>\n<p>\u0130kinci olarak, Laravel projemizi olu\u015fturmak veya mevcut bir Laravel projesini kullanmak i\u00e7in Composer&#8217;a ihtiyac\u0131m\u0131z olacak. E\u011fer hen\u00fcz bir Laravel projeniz yoksa, Composer y\u00fckl\u00fc bir sistemde a\u015fa\u011f\u0131daki komutla yeni bir Laravel projesi olu\u015fturabilirsiniz:<\/p>\n<pre><code>\ncomposer create-project laravel\/laravel my-laravel-app\ncd my-laravel-app\n    <\/code><\/pre>\n<p>Bu komut, <code>my-laravel-app<\/code> ad\u0131nda yeni bir Laravel projesi olu\u015fturacak ve sizi proje dizinine y\u00f6nlendirecektir. E\u011fer mevcut bir projeniz varsa, o projenin ana dizinine gidin. T\u00fcm Docker konfig\u00fcrasyon dosyalar\u0131m\u0131z\u0131 bu ana dizinde olu\u015fturaca\u011f\u0131z.<\/p>\n<p>Proje yap\u0131s\u0131 a\u00e7\u0131s\u0131ndan, ana Laravel dizininizde a\u015fa\u011f\u0131daki gibi bir yap\u0131 hedefliyoruz:<\/p>\n<pre><code>\nmy-laravel-app\/\n\u251c\u2500\u2500 app\/\n\u251c\u2500\u2500 bootstrap\/\n\u251c\u2500\u2500 config\/\n\u251c\u2500\u2500 database\/\n\u251c\u2500\u2500 public\/\n\u251c\u2500\u2500 resources\/\n\u251c\u2500\u2500 routes\/\n\u251c\u2500\u2500 storage\/\n\u251c\u2500\u2500 tests\/\n\u251c\u2500\u2500 vendor\/\n\u251c\u2500\u2500 .env\n\u251c\u2500\u2500 .env.example\n\u251c\u2500\u2500 artisan\n\u251c\u2500\u2500 composer.json\n\u251c\u2500\u2500 composer.lock\n\u251c\u2500\u2500 package.json\n\u251c\u2500\u2500 webpack.mix.js\n\u251c\u2500\u2500 docker-compose.yml  <-- Buraya olu\u015fturaca\u011f\u0131z\n\u251c\u2500\u2500 docker\/             <-- Buraya \u00f6zel Dockerfile'lar ve Nginx conf'lar gelecek\n\u2502   \u251c\u2500\u2500 nginx\/\n\u2502   \u2502   \u2514\u2500\u2500 default.conf\n\u2502   \u2514\u2500\u2500 php\/\n\u2502       \u2514\u2500\u2500 Dockerfile\n\u2514\u2500\u2500 ...\n    <\/code><\/pre>\n<p><code>docker-compose.yml<\/code> dosyas\u0131, t\u00fcm servislerimizin tan\u0131mlanaca\u011f\u0131 ana konfig\u00fcrasyon dosyas\u0131 olacak. <code>docker\/<\/code> dizini alt\u0131nda ise, Nginx ve PHP i\u00e7in \u00f6zel Dockerfile'lar\u0131 ve Nginx konfig\u00fcrasyonlar\u0131n\u0131 tutaca\u011f\u0131z. Bu yap\u0131, hem d\u00fczenli bir organizasyon sa\u011flar hem de farkl\u0131 servislerin konfig\u00fcrasyonlar\u0131n\u0131 kolayca y\u00f6netmenize olanak tan\u0131r. B\u00f6ylece, projenizin Docker entegrasyonu daha anla\u015f\u0131l\u0131r ve s\u00fcrd\u00fcr\u00fclebilir hale gelir. Bu haz\u0131rl\u0131k ad\u0131mlar\u0131, sorunsuz bir kurulum deneyimi i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<div class=\"expert-tip\">\n        Uzman \u0130pucu: Docker Desktop'\u0131 kurduktan sonra, sistem kaynaklar\u0131n\u0131 (RAM, CPU) Docker i\u00e7in ay\u0131rmay\u0131 unutmay\u0131n. Varsay\u0131lan ayarlar k\u00fc\u00e7\u00fck projeler i\u00e7in yeterli olsa da, daha b\u00fcy\u00fck veya yo\u011fun uygulamalar i\u00e7in bu ayarlar\u0131 art\u0131rmak performans\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde iyile\u015ftirecektir. Ayr\u0131ca, Docker'\u0131n Windows'ta WSL 2 tabanl\u0131 \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamak, dosya sistemi performans\u0131n\u0131 art\u0131r\u0131r.\n    <\/div>\n<h2>Docker Compose Dosyas\u0131n\u0131 Olu\u015fturma: Temel Servislerin Tan\u0131mlanmas\u0131<\/h2>\n<p>\u015eimdi projemizin kalbi olacak <code>docker-compose.yml<\/code> dosyas\u0131n\u0131 olu\u015fturmaya ba\u015flayabiliriz. Bu dosya, Laravel uygulamam\u0131z i\u00e7in gerekli olan t\u00fcm servisleri (Nginx, PHP-FPM, MySQL) tan\u0131mlayaca\u011f\u0131m\u0131z yerdir. Proje ana dizininizde <code>docker-compose.yml<\/code> ad\u0131nda yeni bir dosya olu\u015fturun ve i\u00e7ine a\u015fa\u011f\u0131daki i\u00e7eri\u011fi yap\u0131\u015ft\u0131r\u0131n. Bu dosya, Docker Compose'a hangi konteynerlerin \u00e7al\u0131\u015faca\u011f\u0131n\u0131, birbirleriyle nas\u0131l ileti\u015fim kuracaklar\u0131n\u0131 ve hangi kaynaklar\u0131 kullanacaklar\u0131n\u0131 anlat\u0131r.<\/p>\n<pre><code>\nversion: '3.8'\n\nservices:\n  # Laravel uygulamam\u0131z i\u00e7in PHP-FPM servisi\n  app:\n    build:\n      context: .\/docker\/php\n      dockerfile: Dockerfile\n    container_name: laravel_app\n    restart: unless-stopped\n    volumes:\n      - .:\/var\/www\/html\n    networks:\n      - app-network\n\n  # Nginx web sunucusu servisi\n  nginx:\n    image: nginx:alpine\n    container_name: laravel_nginx\n    restart: unless-stopped\n    ports:\n      - \"8000:80\"\n    volumes:\n      - .:\/var\/www\/html\n      - .\/docker\/nginx\/default.conf:\/etc\/nginx\/conf.d\/default.conf\n    networks:\n      - app-network\n\n  # MySQL veritaban\u0131 servisi\n  db:\n    image: mysql:8.0\n    container_name: laravel_mysql\n    restart: unless-stopped\n    environment:\n      MYSQL_DATABASE: laravel_db\n      MYSQL_ROOT_PASSWORD: root\n      MYSQL_PASSWORD: password\n      MYSQL_USER: laravel_user\n      SERVICE_TAGS: dev\n      SERVICE_NAME: mysql\n    volumes:\n      - dbdata:\/var\/lib\/mysql\n    networks:\n      - app-network\n\n# Docker a\u011flar\u0131 tan\u0131mlamas\u0131\nnetworks:\n  app-network:\n    driver: bridge\n\n# Docker birimleri (volumes) tan\u0131mlamas\u0131\nvolumes:\n  dbdata:\n    driver: local\n    <\/code><\/pre>\n<p>Yukar\u0131daki <code>docker-compose.yml<\/code> dosyas\u0131n\u0131 ad\u0131m ad\u0131m inceleyelim:<\/p>\n<ul>\n<li><code>version: '3.8'<\/code>: Docker Compose dosyas\u0131n\u0131n versiyonunu belirtir. Genellikle en g\u00fcncel stabil versiyonu kullanmak iyi bir uygulamad\u0131r.<\/li>\n<li><code>services:<\/code>: Uygulamam\u0131z\u0131n farkl\u0131 bile\u015fenlerini tan\u0131mlad\u0131\u011f\u0131m\u0131z ana b\u00f6l\u00fcmd\u00fcr.<\/li>\n<li><strong><code>app<\/code> servisi (PHP-FPM)<\/strong>:\n<ul>\n<li><code>build:<\/code>: Bu servisin bir Dockerfile'dan in\u015fa edilece\u011fini belirtir. <code>context<\/code>, Dockerfile'\u0131n bulundu\u011fu dizini (<code>.\/docker\/php<\/code>) g\u00f6sterirken, <code>dockerfile<\/code> ise kullan\u0131lacak Dockerfile'\u0131n ad\u0131n\u0131 (<code>Dockerfile<\/code>) belirtir.<\/li>\n<li><code>container_name: laravel_app<\/code>: Konteyner i\u00e7in okunabilir bir isim atar.<\/li>\n<li><code>restart: unless-stopped<\/code>: Konteynerin beklenmedik bir \u015fekilde durmas\u0131 durumunda otomatik olarak yeniden ba\u015flat\u0131lmas\u0131n\u0131 sa\u011flar.<\/li>\n<li><code>volumes: - .:\/var\/www\/html<\/code>: Bu k\u0131s\u0131m \u00e7ok \u00f6nemlidir. Mevcut Laravel projemizin dizinini (<code>.<\/code>) konteyner i\u00e7indeki <code>\/var\/www\/html<\/code> dizinine ba\u011flar. Bu sayede, yerel makinenizde yapt\u0131\u011f\u0131n\u0131z kod de\u011fi\u015fiklikleri an\u0131nda konteyner i\u00e7inde de g\u00f6r\u00fcn\u00fcr hale gelir ve her de\u011fi\u015fiklik sonras\u0131 konteyneri yeniden ba\u015flatman\u0131za gerek kalmaz.<\/li>\n<li><code>networks: - app-network<\/code>: Bu servisi <code>app-network<\/code> adl\u0131 \u00f6zel a\u011fa ba\u011flar. Bu a\u011f, t\u00fcm servislerin birbiriyle ileti\u015fim kurmas\u0131n\u0131 sa\u011flar.<\/li>\n<\/ul>\n<\/li>\n<li><strong><code>nginx<\/code> servisi<\/strong>:\n<ul>\n<li><code>image: nginx:alpine<\/code>: Nginx i\u00e7in resmi Alpine tabanl\u0131 Docker imaj\u0131n\u0131 kullan\u0131r. Alpine, daha k\u00fc\u00e7\u00fck boyutlu ve daha g\u00fcvenli bir imajd\u0131r.<\/li>\n<li><code>ports: - \"8000:80\"<\/code>: Yerel makinenizin 8000 portunu Nginx konteynerinin 80 portuna y\u00f6nlendirir. B\u00f6ylece taray\u0131c\u0131n\u0131zdan <code>http:\/\/localhost:8000<\/code> adresinden uygulaman\u0131za eri\u015febilirsiniz.<\/li>\n<li><code>volumes:<\/code>:\n<ul>\n<li><code>- .:\/var\/www\/html<\/code>: Laravel projemizin kodlar\u0131n\u0131 Nginx'in de eri\u015febilmesi i\u00e7in ba\u011flar.<\/li>\n<li><code>- .\/docker\/nginx\/default.conf:\/etc\/nginx\/conf.d\/default.conf<\/code>: Yerel Nginx konfig\u00fcrasyon dosyam\u0131z\u0131 konteyner i\u00e7indeki Nginx konfig\u00fcrasyon dizinine ba\u011flar. Bu sayede Nginx'i Laravel projemize \u00f6zel olarak yap\u0131land\u0131rabiliriz.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li><strong><code>db<\/code> servisi (MySQL)<\/strong>:\n<ul>\n<li><code>image: mysql:8.0<\/code>: MySQL veritaban\u0131 i\u00e7in resmi 8.0 s\u00fcr\u00fcm\u00fcn\u00fc kullan\u0131r.<\/li>\n<li><code>environment:<\/code>: MySQL konteyneri i\u00e7in ortam de\u011fi\u015fkenleri tan\u0131mlar. Bu de\u011fi\u015fkenler, veritaban\u0131 ad\u0131, root \u015fifresi, kullan\u0131c\u0131 ad\u0131 ve \u015fifresi gibi bilgileri i\u00e7erir. Laravel'in <code>.env<\/code> dosyas\u0131ndaki veritaban\u0131 ba\u011flant\u0131 bilgilerini bu de\u011ferlerle e\u015fle\u015ftirmemiz gerekecek.<\/li>\n<li><code>volumes: - dbdata:\/var\/lib\/mysql<\/code>: Bu, veritaban\u0131 verilerinin kal\u0131c\u0131l\u0131\u011f\u0131n\u0131 sa\u011flayan kritik bir ad\u0131md\u0131r. <code>dbdata<\/code> ad\u0131nda bir Docker volume'u olu\u015fturur ve MySQL'in veri dizinini bu volume'a ba\u011flar. Konteyner silinse bile veritaban\u0131 verileriniz kaybolmaz.<\/li>\n<\/ul>\n<\/li>\n<li><code>networks:<\/code>: T\u00fcm servislerimizin ileti\u015fim kuraca\u011f\u0131 <code>app-network<\/code> adl\u0131 bir k\u00f6pr\u00fc (bridge) a\u011f\u0131 tan\u0131mlar.<\/li>\n<li><code>volumes:<\/code>: <code>dbdata<\/code> ad\u0131nda bir Docker volume'u tan\u0131mlar. Bu volume, MySQL verilerini saklamak i\u00e7in kullan\u0131l\u0131r ve konteynerler aras\u0131nda veri kal\u0131c\u0131l\u0131\u011f\u0131 sa\u011flar.<\/li>\n<\/ul>\n<p>Bu <code>docker-compose.yml<\/code> dosyas\u0131, Laravel uygulaman\u0131z\u0131 \u00e7al\u0131\u015ft\u0131racak temel altyap\u0131y\u0131 olu\u015fturur. Bir sonraki ad\u0131mda, bu servisler i\u00e7in \u00f6zel Dockerfile'lar\u0131 ve Nginx konfig\u00fcrasyonunu haz\u0131rlayaca\u011f\u0131z.<\/p>\n<h2>Laravel Uygulamas\u0131n\u0131 Konfig\u00fcre Etme: Docker Uyumlu Hale Getirme<\/h2>\n<p>Docker Compose dosyam\u0131z\u0131 olu\u015fturduktan sonra, Laravel uygulamam\u0131z\u0131n konteynerler i\u00e7inde do\u011fru bir \u015fekilde \u00e7al\u0131\u015fabilmesi i\u00e7in baz\u0131 ek konfig\u00fcrasyonlara ihtiyac\u0131m\u0131z var. Bu b\u00f6l\u00fcmde, PHP-FPM i\u00e7in bir Dockerfile ve Nginx i\u00e7in bir sanal host konfig\u00fcrasyonu olu\u015fturaca\u011f\u0131z. Bu dosyalar, <code>docker\/<\/code> dizini alt\u0131nda yer alacak.<\/p>\n<h3>PHP-FPM Dockerfile Olu\u015fturma<\/h3>\n<p>Laravel, PHP-FPM (FastCGI Process Manager) ile \u00e7al\u0131\u015f\u0131r. Bu nedenle, PHP-FPM'i i\u00e7eren ve Laravel'in ihtiya\u00e7 duydu\u011fu uzant\u0131lar\u0131 bar\u0131nd\u0131ran \u00f6zel bir Docker imaj\u0131 olu\u015fturmam\u0131z gerekiyor. Proje ana dizininizde <code>docker\/php\/Dockerfile<\/code> yolunda bir dosya olu\u015fturun ve a\u015fa\u011f\u0131daki i\u00e7eri\u011fi ekleyin:<\/p>\n<pre><code>\n# PHP-FPM i\u00e7in temel Alpine Linux imaj\u0131n\u0131 kullan\nFROM php:8.2-fpm-alpine\n\n# Gerekli sistem ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 ve PHP uzant\u0131lar\u0131n\u0131 y\u00fckle\nRUN apk add --no-cache \\\n    autoconf \\\n    build-base \\\n    libzip-dev \\\n    libpng-dev \\\n    jpeg-dev \\\n    git \\\n    oniguruma-dev \\\n    postgresql-dev \\\n    freetype-dev \\\n    libxml2-dev \\\n    && docker-php-ext-install -j$(nproc) \\\n    pdo_mysql \\\n    mbstring \\\n    exif \\\n    pcntl \\\n    bcmath \\\n    gd \\\n    zip \\\n    && docker-php-ext-configure gd --with-freetype --with-jpeg \\\n    && docker-php-ext-install -j$(nproc) gd\n\n# Composer'\u0131 global olarak y\u00fckle\nCOPY --from=composer:latest \/usr\/bin\/composer \/usr\/bin\/composer\n\n# \u00c7al\u0131\u015fma dizinini ayarla\nWORKDIR \/var\/www\/html\n\n# \u0130zinleri ayarla (geli\u015ftirme ortam\u0131 i\u00e7in)\nRUN chown -R www-data:www-data \/var\/www\/html \\\n    && chmod -R 775 \/var\/www\/html\/storage \\\n    && chmod -R 775 \/var\/www\/html\/bootstrap\/cache\n\n# PHP-FPM'i \u00f6nde \u00e7al\u0131\u015facak \u015fekilde yap\u0131land\u0131r (gerekirse)\n# CMD [\"php-fpm\"]\n    <\/code><\/pre>\n<p>Bu Dockerfile, PHP 8.2 FPM'in Alpine versiyonunu temel al\u0131r. Bu imaj, daha k\u00fc\u00e7\u00fck boyutu ve g\u00fcvenlik odakl\u0131 yap\u0131s\u0131yla konteyner ortamlar\u0131 i\u00e7in idealdir. \u0130\u00e7erisinde Laravel'in yayg\u0131n olarak kulland\u0131\u011f\u0131 <code>pdo_mysql<\/code> (veritaban\u0131 ba\u011flant\u0131s\u0131 i\u00e7in), <code>mbstring<\/code> (\u00e7ok baytl\u0131 karakter dizileri i\u00e7in), <code>gd<\/code> (resim i\u015fleme i\u00e7in) ve <code>zip<\/code> gibi PHP uzant\u0131lar\u0131n\u0131 y\u00fckleriz. Ayr\u0131ca, Composer'\u0131 da konteyner i\u00e7ine kopyalayarak Laravel ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 y\u00f6netmeyi kolayla\u015ft\u0131r\u0131r\u0131z. Son olarak, Laravel'in <code>storage<\/code> ve <code>bootstrap\/cache<\/code> dizinleri i\u00e7in do\u011fru dosya izinlerini ayarlar\u0131z. Bu izinler, Laravel'in \u00f6nbellek ve log dosyalar\u0131n\u0131 yazabilmesi i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<h3>Nginx Konfig\u00fcrasyon Dosyas\u0131 Olu\u015fturma<\/h3>\n<p>Nginx, gelen HTTP isteklerini PHP-FPM'e y\u00f6nlendirmekten sorumlu olacak web sunucumuzdur. Proje ana dizininizde <code>docker\/nginx\/default.conf<\/code> yolunda bir dosya olu\u015fturun ve a\u015fa\u011f\u0131daki i\u00e7eri\u011fi ekleyin:<\/p>\n<pre><code>\nserver {\n    listen 80;\n    server_name localhost;\n    root \/var\/www\/html\/public;\n\n    add_header X-Frame-Options \"SAMEORIGIN\";\n    add_header X-XSS-Protection \"1; mode=block\";\n    add_header X-Content-Type-Options \"nosniff\";\n\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        fastcgi_pass app:9000;\n        fastcgi_index index.php;\n        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n        include fastcgi_params;\n    }\n\n    location ~ \/\\.ht {\n        deny all;\n    }\n}\n    <\/code><\/pre>\n<p>Bu Nginx konfig\u00fcrasyonu, Laravel uygulamalar\u0131 i\u00e7in standart bir kurulumdur. <code>listen 80;<\/code> Nginx'in 80 portunu dinlemesini sa\u011flar. <code>root \/var\/www\/html\/public;<\/code> Laravel'in ana dizininin <code>public<\/code> klas\u00f6r\u00fc oldu\u011funu belirtir, bu da g\u00fcvenlik a\u00e7\u0131s\u0131ndan \u00f6nemlidir. <code>location \/<\/code> blo\u011fu, t\u00fcm istekleri Laravel'in <code>index.php<\/code> dosyas\u0131na y\u00f6nlendirir (URL rewriting). En kritik k\u0131s\u0131m ise <code>location ~ \\.php$<\/code> blo\u011fudur. Bu blok, t\u00fcm PHP dosyas\u0131 isteklerini <code>fastcgi_pass app:9000;<\/code> ile <code>app<\/code> servisine (yani PHP-FPM konteynerimize) 9000 portundan iletir. <code>app<\/code>, <code>docker-compose.yml<\/code> dosyam\u0131zda tan\u0131mlad\u0131\u011f\u0131m\u0131z PHP-FPM servisinin ad\u0131d\u0131r. Bu sayede Nginx, gelen web isteklerini do\u011fru bir \u015fekilde Laravel uygulamam\u0131za iletebilir.<\/p>\n<h3>Laravel .env Dosyas\u0131n\u0131 G\u00fcncelleme<\/h3>\n<p>Son olarak, Laravel projenizin <code>.env<\/code> dosyas\u0131n\u0131, Docker Compose ile kurdu\u011fumuz MySQL veritaban\u0131 servisine ba\u011flanacak \u015fekilde g\u00fcncellememiz gerekiyor. Proje ana dizininizdeki <code>.env<\/code> dosyas\u0131n\u0131 a\u00e7\u0131n ve a\u015fa\u011f\u0131daki sat\u0131rlar\u0131 bulun veya ekleyin:<\/p>\n<pre><code>\nDB_CONNECTION=mysql\nDB_HOST=db\nDB_PORT=3306\nDB_DATABASE=laravel_db\nDB_USERNAME=laravel_user\nDB_PASSWORD=password\n    <\/code><\/pre>\n<p>Burada dikkat etmeniz gereken en \u00f6nemli nokta <code>DB_HOST=db<\/code> sat\u0131r\u0131d\u0131r. <code>db<\/code>, <code>docker-compose.yml<\/code> dosyam\u0131zda MySQL servisine verdi\u011fimiz isimdir. Docker Compose, servis isimlerini otomatik olarak a\u011f i\u00e7inde \u00e7\u00f6z\u00fclebilir hale getirir, b\u00f6ylece IP adresi yerine servis ad\u0131n\u0131 kullanabiliriz. Di\u011fer bilgiler (veritaban\u0131 ad\u0131, kullan\u0131c\u0131 ad\u0131, \u015fifre) ise <code>docker-compose.yml<\/code> dosyas\u0131nda MySQL servisi i\u00e7in ayarlad\u0131\u011f\u0131m\u0131z <code>environment<\/code> de\u011fi\u015fkenleriyle e\u015fle\u015fmelidir. Bu ad\u0131mlar\u0131 tamamlad\u0131\u011f\u0131n\u0131zda, Laravel uygulaman\u0131z Docker ortam\u0131nda \u00e7al\u0131\u015fmaya haz\u0131r hale gelecektir.<\/p>\n<h2>Veritaban\u0131 Y\u00f6netimi ve Veri Kal\u0131c\u0131l\u0131\u011f\u0131 Nas\u0131l Sa\u011flan\u0131r?<\/h2>\n<p>Bir web uygulamas\u0131n\u0131n en kritik bile\u015fenlerinden biri veritaban\u0131d\u0131r ve veritaban\u0131 verilerinin g\u00fcvenli\u011fi ile kal\u0131c\u0131l\u0131\u011f\u0131 b\u00fcy\u00fck \u00f6nem ta\u015f\u0131r. Docker konteynerleri do\u011fas\u0131 gere\u011fi ge\u00e7icidir; yani bir konteyner silindi\u011finde, i\u00e7inde depolanan t\u00fcm veriler de kaybolur. Bu durum, \u00f6zellikle MySQL gibi veritaban\u0131 servisleri i\u00e7in kabul edilemezdir. Neyse ki Docker, \"volumes\" ad\u0131 verilen mekanizmalar arac\u0131l\u0131\u011f\u0131yla veri kal\u0131c\u0131l\u0131\u011f\u0131n\u0131 sa\u011flaman\u0131n g\u00fc\u00e7l\u00fc ve esnek yollar\u0131n\u0131 sunar.<\/p>\n<p><code>docker-compose.yml<\/code> dosyam\u0131zda MySQL servisi i\u00e7in zaten bir volume tan\u0131mlamas\u0131 yapm\u0131\u015ft\u0131k:<\/p>\n<pre><code>\n  db:\n    # ... di\u011fer konfig\u00fcrasyonlar ...\n    volumes:\n      - dbdata:\/var\/lib\/mysql\n    # ... di\u011fer konfig\u00fcrasyonlar ...\n\n# ...\n\nvolumes:\n  dbdata:\n    driver: local\n    <\/code><\/pre>\n<p>Bu konfig\u00fcrasyon, <code>dbdata<\/code> ad\u0131nda bir Docker volume'u olu\u015fturur ve bu volume'u MySQL konteynerinin i\u00e7inde verilerin depoland\u0131\u011f\u0131 <code>\/var\/lib\/mysql<\/code> dizinine ba\u011flar. Bu sayede, MySQL konteyneri yeniden olu\u015fturulsa, durdurulsa veya silinse bile, <code>dbdata<\/code> volume'u varl\u0131\u011f\u0131n\u0131 s\u00fcrd\u00fcr\u00fcr ve i\u00e7indeki veriler korunmu\u015f olur. Yani, veritaban\u0131 tablolar\u0131n\u0131z, kay\u0131tlar\u0131n\u0131z ve t\u00fcm yap\u0131land\u0131rman\u0131z g\u00fcvende kal\u0131r. Bu yakla\u015f\u0131m, geli\u015ftirme ortamlar\u0131nda s\u0131k\u00e7a konteynerleri kald\u0131r\u0131p yeniden olu\u015fturman\u0131z gerekti\u011finde b\u00fcy\u00fck kolayl\u0131k sa\u011flar ve veri kayb\u0131 riskini ortadan kald\u0131r\u0131r.<\/p>\n<p>Veritaban\u0131 verilerinizin kal\u0131c\u0131l\u0131\u011f\u0131n\u0131 sa\u011flad\u0131ktan sonra, Laravel uygulaman\u0131z\u0131n veritaban\u0131 ile etkile\u015fime ge\u00e7mesini sa\u011flamak i\u00e7in baz\u0131 ad\u0131mlar atman\u0131z gerekir. \u00d6ncelikle, Laravel'in veritaban\u0131 tablolar\u0131n\u0131 olu\u015fturmak i\u00e7in migrasyonlar\u0131 \u00e7al\u0131\u015ft\u0131rman\u0131z gerekecektir. T\u00fcm servisleriniz \u00e7al\u0131\u015fmaya ba\u015flad\u0131ktan sonra, Laravel konteynerinizin i\u00e7ine girerek bu komutlar\u0131 y\u00fcr\u00fctebilirsiniz:<\/p>\n<pre><code>\ndocker compose exec app php artisan migrate\n    <\/code><\/pre>\n<p>Bu komut, <code>app<\/code> servisi (Laravel PHP-FPM konteyneri) i\u00e7inde <code>php artisan migrate<\/code> komutunu \u00e7al\u0131\u015ft\u0131r\u0131r. E\u011fer migrasyonlar\u0131n\u0131z ba\u015far\u0131l\u0131 olursa, MySQL veritaban\u0131n\u0131zda Laravel'in varsay\u0131lan tablolar\u0131 (users, password_resets, failed_jobs vb.) olu\u015fturulmu\u015f olacakt\u0131r. Uygulaman\u0131z\u0131n ihtiya\u00e7 duydu\u011fu di\u011fer verileri (\u00f6rne\u011fin test verileri veya ba\u015flang\u0131\u00e7 verileri) eklemek isterseniz, Laravel'in Seeder'lar\u0131n\u0131 kullanabilirsiniz. Seeder'lar\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in de benzer \u015fekilde:<\/p>\n<pre><code>\ndocker compose exec app php artisan db:seed\n    <\/code><\/pre>\n<p>komutunu kullanabilirsiniz. Bu komutlar, geli\u015ftirme s\u00fcrecinizde veritaban\u0131n\u0131z\u0131 kolayca y\u00f6netmenizi sa\u011flar. Ayr\u0131ca, veritaban\u0131na do\u011frudan eri\u015fmek isterseniz, MySQL konteynerine ba\u011flanarak komut sat\u0131r\u0131ndan i\u015flem yapabilirsiniz:<\/p>\n<pre><code>\ndocker compose exec db mysql -u laravel_user -p laravel_db\n    <\/code><\/pre>\n<p>Bu komut sizden \u015fifre isteyecektir (<code>password<\/code> olarak belirlemi\u015ftik). Ba\u015far\u0131l\u0131 bir \u015fekilde ba\u011fland\u0131\u011f\u0131n\u0131zda, MySQL komut sat\u0131r\u0131nda veritaban\u0131 sorgular\u0131 \u00e7al\u0131\u015ft\u0131rabilirsiniz. Veritaban\u0131 y\u00f6netimini kolayla\u015ft\u0131rmak i\u00e7in PhpMyAdmin veya Adminer gibi web tabanl\u0131 ara\u00e7lar\u0131 da Docker Compose dosyan\u0131za bir servis olarak ekleyebilirsiniz. \u00d6rne\u011fin, PhpMyAdmin i\u00e7in <code>docker-compose.yml<\/code> dosyan\u0131za a\u015fa\u011f\u0131daki servisi ekleyebilirsiniz:<\/p>\n<pre><code>\n  phpmyadmin:\n    image: phpmyadmin\/phpmyadmin\n    container_name: laravel_phpmyadmin\n    restart: unless-stopped\n    ports:\n      - \"8081:80\"\n    environment:\n      PMA_HOST: db\n      MYSQL_ROOT_PASSWORD: root\n    networks:\n      - app-network\n    <\/code><\/pre>\n<p>Bu servisi ekledikten sonra <code>docker compose up -d<\/code> komutunu tekrar \u00e7al\u0131\u015ft\u0131rarak PhpMyAdmin'i <code>http:\/\/localhost:8081<\/code> adresinden eri\u015filebilir hale getirebilirsiniz. Bu sayede, veritaban\u0131 \u00fczerinde g\u00f6rsel bir aray\u00fczle i\u015flem yapma imkan\u0131na sahip olursunuz. Veritaban\u0131 verilerinin kal\u0131c\u0131l\u0131\u011f\u0131 ve kolay y\u00f6netilebilirli\u011fi, Docker Compose ile Laravel projeleri geli\u015ftirirken sundu\u011fu en b\u00fcy\u00fck avantajlardan biridir.<\/p>\n<h2>Uygulamay\u0131 Ba\u015flatma ve Test Etme: \u0130lk Ad\u0131mlar ve Yayg\u0131n Sorunlar<\/h2>\n<p>T\u00fcm Docker Compose dosyam\u0131z\u0131, PHP Dockerfile'\u0131m\u0131z\u0131 ve Nginx konfig\u00fcrasyonumuzu haz\u0131rlad\u0131k. Laravel'in <code>.env<\/code> dosyas\u0131n\u0131 da g\u00fcncelledik. Art\u0131k s\u0131ra, bu g\u00fc\u00e7l\u00fc y\u0131\u011f\u0131n\u0131 aya\u011fa kald\u0131rmaya ve Laravel uygulamam\u0131z\u0131 \u00e7al\u0131\u015ft\u0131rmaya geldi. Proje ana dizininizde (<code>docker-compose.yml<\/code> dosyas\u0131n\u0131n bulundu\u011fu yer) terminalinizi a\u00e7\u0131n ve a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code>\ndocker compose up -d --build\n    <\/code><\/pre>\n<p>Bu komutun anlam\u0131 \u015fudur:<\/p>\n<ul>\n<li><code>docker compose up<\/code>: <code>docker-compose.yml<\/code> dosyas\u0131nda tan\u0131mlanan t\u00fcm servisleri ba\u015flat\u0131r.<\/li>\n<li><code>-d<\/code>: \"detached\" modda \u00e7al\u0131\u015ft\u0131r\u0131r, yani konteynerleri arka planda \u00e7al\u0131\u015ft\u0131r\u0131r ve terminalinizi serbest b\u0131rak\u0131r.<\/li>\n<li><code>--build<\/code>: E\u011fer servisler i\u00e7in Dockerfile'lar tan\u0131mlanm\u0131\u015fsa (bizim PHP servisimiz i\u00e7in var), bu Dockerfile'lar\u0131 kullanarak imajlar\u0131 yeniden in\u015fa eder. \u0130lk \u00e7al\u0131\u015ft\u0131rmada bu parametre zorunludur. Daha sonra sadece kod de\u011fi\u015fiklikleri yap\u0131ld\u0131\u011f\u0131nda ve Dockerfile de\u011fi\u015fmedi\u011finde kald\u0131r\u0131labilir.<\/li>\n<\/ul>\n<p>Komutu \u00e7al\u0131\u015ft\u0131rd\u0131ktan sonra Docker, PHP imaj\u0131n\u0131 in\u015fa etmeye ba\u015flayacak, Nginx ve MySQL imajlar\u0131n\u0131 \u00e7ekecek (e\u011fer yerelde yoksa) ve t\u00fcm servisleri ba\u015flatacakt\u0131r. Bu i\u015flem, internet ba\u011flant\u0131n\u0131z\u0131n h\u0131z\u0131na ve sistem kaynaklar\u0131n\u0131za ba\u011fl\u0131 olarak birka\u00e7 dakika s\u00fcrebilir. T\u00fcm servisler ba\u015far\u0131l\u0131 bir \u015fekilde ba\u015flat\u0131ld\u0131\u011f\u0131nda, terminalinizde herhangi bir hata g\u00f6rmemelisiniz.<\/p>\n<p>Servislerin durumunu kontrol etmek i\u00e7in a\u015fa\u011f\u0131daki komutu kullanabilirsiniz:<\/p>\n<pre><code>\ndocker compose ps\n    <\/code><\/pre>\n<p>Bu komut, \u00e7al\u0131\u015fan t\u00fcm servisleri ve durumlar\u0131n\u0131 listeler. T\u00fcm servislerin <code>Up<\/code> durumunda olmas\u0131 gerekir.<\/p>\n<p>\u015eimdi Laravel uygulaman\u0131za eri\u015fme zaman\u0131! Taray\u0131c\u0131n\u0131z\u0131 a\u00e7\u0131n ve <code>http:\/\/localhost:8000<\/code> adresine gidin. E\u011fer her \u015feyi do\u011fru yap\u0131land\u0131rd\u0131ysan\u0131z, Laravel'in ho\u015f geldiniz sayfas\u0131n\u0131 g\u00f6rmelisiniz. Bu, Nginx'in iste\u011fi do\u011fru bir \u015fekilde PHP-FPM'e y\u00f6nlendirdi\u011fini ve Laravel uygulaman\u0131z\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6sterir.<\/p>\n<h3>Yayg\u0131n Sorunlar ve \u00c7\u00f6z\u00fcmleri<\/h3>\n<p>Kurulum s\u0131ras\u0131nda kar\u015f\u0131la\u015fabilece\u011finiz baz\u0131 yayg\u0131n sorunlar ve \u00e7\u00f6z\u00fcmleri \u015funlard\u0131r:<\/p>\n<ol>\n<li><strong>Port \u00c7ak\u0131\u015fmas\u0131<\/strong>: E\u011fer 8000 portu yerel makinenizde ba\u015fka bir uygulama taraf\u0131ndan kullan\u0131l\u0131yorsa, Nginx konteyneri ba\u015flat\u0131lamaz.\n<ul>\n<li><strong>\u00c7\u00f6z\u00fcm<\/strong>: <code>docker-compose.yml<\/code> dosyas\u0131ndaki Nginx servisinin <code>ports<\/code> b\u00f6l\u00fcm\u00fcn\u00fc de\u011fi\u015ftirerek farkl\u0131 bir port kullanabilirsiniz. \u00d6rne\u011fin: <code>\"8001:80\"<\/code>.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Veritaban\u0131 Ba\u011flant\u0131 Hatas\u0131<\/strong>: Laravel'in <code>.env<\/code> dosyas\u0131ndaki veritaban\u0131 bilgileri (<code>DB_HOST<\/code>, <code>DB_DATABASE<\/code>, <code>DB_USERNAME<\/code>, <code>DB_PASSWORD<\/code>) yanl\u0131\u015fsa, uygulama veritaban\u0131na ba\u011flanamaz.\n<ul>\n<li><strong>\u00c7\u00f6z\u00fcm<\/strong>: <code>.env<\/code> dosyas\u0131ndaki bilgilerin <code>docker-compose.yml<\/code> dosyas\u0131ndaki MySQL servisinin <code>environment<\/code> de\u011fi\u015fkenleriyle tam olarak e\u015fle\u015fti\u011finden emin olun. \u00d6zellikle <code>DB_HOST<\/code>'un <code>db<\/code> oldu\u011fundan emin olun.<\/li>\n<\/ul>\n<\/li>\n<li><strong>PHP Uzant\u0131s\u0131 Eksikli\u011fi<\/strong>: Laravel'in ihtiya\u00e7 duydu\u011fu baz\u0131 PHP uzant\u0131lar\u0131 (\u00f6rne\u011fin <code>pdo_mysql<\/code>, <code>mbstring<\/code>) PHP Dockerfile'\u0131nda y\u00fcklenmemi\u015fse, hatalar alabilirsiniz.\n<ul>\n<li><strong>\u00c7\u00f6z\u00fcm<\/strong>: <code>docker\/php\/Dockerfile<\/code> dosyas\u0131n\u0131 kontrol edin ve eksik uzant\u0131lar\u0131 <code>docker-php-ext-install<\/code> komutuyla ekleyin. De\u011fi\u015fiklik yapt\u0131ktan sonra <code>docker compose up -d --build<\/code> komutunu yeniden \u00e7al\u0131\u015ft\u0131r\u0131n.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Dosya \u0130zinleri Sorunu<\/strong>: Laravel'in <code>storage<\/code> veya <code>bootstrap\/cache<\/code> dizinlerine yazma izinleri yoksa, uygulama hata verebilir.\n<ul>\n<li><strong>\u00c7\u00f6z\u00fcm<\/strong>: PHP Dockerfile'\u0131nda <code>chown -R www-data:www-data \/var\/www\/html<\/code> ve <code>chmod -R 775 \/var\/www\/html\/storage<\/code> gibi komutlar\u0131n do\u011fru \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olun. Ayr\u0131ca, yerel dosya sisteminizde de bu dizinlerin do\u011fru izinlere sahip oldu\u011fundan emin olmak i\u00e7in <code>sudo chmod -R 775 storage bootstrap\/cache<\/code> komutunu \u00e7al\u0131\u015ft\u0131rabilirsiniz.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Nginx 502 Bad Gateway Hatas\u0131<\/strong>: Nginx'in PHP-FPM ile ileti\u015fim kuramad\u0131\u011f\u0131n\u0131 g\u00f6sterir.\n<ul>\n<li><strong>\u00c7\u00f6z\u00fcm<\/strong>: Nginx konfig\u00fcrasyonunda <code>fastcgi_pass app:9000;<\/code> k\u0131sm\u0131n\u0131n do\u011fru oldu\u011fundan ve <code>app<\/code> servisinin (PHP-FPM) \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olun. <code>docker compose logs app<\/code> komutuyla PHP-FPM loglar\u0131n\u0131 kontrol edin.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>Bu ad\u0131mlar\u0131 takip ederek ve olas\u0131 sorunlara kar\u015f\u0131 haz\u0131rl\u0131kl\u0131 olarak, Laravel uygulaman\u0131z\u0131 Docker Compose ile sorunsuz bir \u015fekilde \u00e7al\u0131\u015ft\u0131rabilirsiniz. Geli\u015ftirme s\u00fcrecinizde, <code>docker compose restart<\/code> (t\u00fcm servisleri yeniden ba\u015flat\u0131r) veya <code>docker compose stop<\/code> (t\u00fcm servisleri durdurur) gibi komutlar\u0131 s\u0131k\u00e7a kullanacaks\u0131n\u0131z.<\/p>\n<h2>\u0130leri D\u00fczey \u0130pu\u00e7lar\u0131 ve Optimizasyonlar: Performans ve G\u00fcvenlik<\/h2>\n<p>Docker Compose ile Laravel, Nginx ve MySQL kurulumu, geli\u015ftirme ortam\u0131n\u0131z\u0131 standartla\u015ft\u0131rmak i\u00e7in harika bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r. Ancak, projelerinizi daha verimli, g\u00fcvenli ve performant hale getirmek i\u00e7in uygulayabilece\u011finiz baz\u0131 ileri d\u00fczey teknikler ve optimizasyonlar mevcuttur. Bu b\u00f6l\u00fcmde, hem geli\u015ftirme hem de potansiyel olarak \u00fcretim ortamlar\u0131 i\u00e7in faydal\u0131 olabilecek ipu\u00e7lar\u0131na de\u011finece\u011fiz.<\/p>\n<h3>1. Geli\u015ftirme ve \u00dcretim Ortamlar\u0131 \u0130\u00e7in Farkl\u0131 Konfig\u00fcrasyonlar<\/h3>\n<p>Geli\u015ftirme ortam\u0131 genellikle kolay hata ay\u0131klama ve h\u0131zl\u0131 de\u011fi\u015fiklikler yapma odakl\u0131yken, \u00fcretim ortam\u0131 g\u00fcvenlik, performans ve kararl\u0131l\u0131k odakl\u0131d\u0131r. Docker Compose, bu farkl\u0131 senaryolar\u0131 y\u00f6netmek i\u00e7in birden fazla <code>docker-compose.yml<\/code> dosyas\u0131 kullanma esnekli\u011fi sunar. \u00d6rne\u011fin, <code>docker-compose.yml<\/code> ana dosyan\u0131z temel servisleri tan\u0131mlarken, <code>docker-compose.dev.yml<\/code> geli\u015ftirme i\u00e7in ek ara\u00e7lar\u0131 (\u00f6rne\u011fin Xdebug, PhpMyAdmin) ve <code>docker-compose.prod.yml<\/code> ise \u00fcretim i\u00e7in optimize edilmi\u015f ayarlar\u0131 (\u00f6rne\u011fin daha s\u0131k\u0131 Nginx kurallar\u0131, Redis caching) i\u00e7erebilir.<\/p>\n<p>\u00d6rnek kullan\u0131m:<\/p>\n<pre><code>\n# Geli\u015ftirme ortam\u0131n\u0131 ba\u015flat\ndocker compose -f docker-compose.yml -f docker-compose.dev.yml up -d --build\n\n# \u00dcretim ortam\u0131n\u0131 ba\u015flat (daha sonra ele al\u0131nacak)\ndocker compose -f docker-compose.yml -f docker-compose.prod.yml up -d --build\n    <\/code><\/pre>\n<h3>2. Performans Optimizasyonlar\u0131<\/h3>\n<ul>\n<li><strong>PHP FPM Konfig\u00fcrasyonu<\/strong>: <code>docker\/php\/Dockerfile<\/code> i\u00e7inde PHP-FPM ayarlar\u0131n\u0131 optimize edebilirsiniz. \u00d6rne\u011fin, <code>pm.max_children<\/code>, <code>pm.start_servers<\/code> gibi parametreleri uygulaman\u0131z\u0131n y\u00fck\u00fcne g\u00f6re ayarlamak performans\u0131 art\u0131rabilir. Bu ayarlar genellikle <code>\/usr\/local\/etc\/php-fpm.d\/www.conf<\/code> dosyas\u0131nda bulunur ve Dockerfile i\u00e7inde bu dosyay\u0131 kopyalayarak veya d\u00fczenleyerek \u00f6zelle\u015ftirebilirsiniz.<\/li>\n<li><strong>Nginx Caching<\/strong>: Nginx'i statik dosyalar\u0131 (CSS, JS, resimler) do\u011frudan sunacak ve \u00f6nbelle\u011fe alacak \u015fekilde yap\u0131land\u0131rarak PHP-FPM \u00fczerindeki y\u00fck\u00fc azaltabilirsiniz. <code>default.conf<\/code> dosyan\u0131zda <code>location<\/code> bloklar\u0131na <code>expires<\/code> ba\u015fl\u0131klar\u0131 ekleyebilirsiniz.\n<pre><code>\nlocation ~* \\.(js|css|png|jpg|jpeg|gif|ico)$ {\n    expires 1y;\n    log_not_found off;\n}\n            <\/code><\/pre>\n<\/li>\n<li><strong>Veritaban\u0131 \u0130ndeksleri<\/strong>: MySQL veritaban\u0131n\u0131zda sorgu performans\u0131n\u0131 art\u0131rmak i\u00e7in do\u011fru indeksleri kulland\u0131\u011f\u0131n\u0131zdan emin olun. Laravel migrasyonlar\u0131n\u0131zda indeksleri tan\u0131mlayabilirsiniz.<\/li>\n<li><strong>Redis\/Memcached Entegrasyonu<\/strong>: Laravel'in \u00f6nbellekleme (caching) ve oturum (session) s\u00fcr\u00fcc\u00fclerini Redis veya Memcached gibi in-memory veritabanlar\u0131na ta\u015f\u0131mak, uygulaman\u0131z\u0131n yan\u0131t s\u00fcresini \u00f6nemli \u00f6l\u00e7\u00fcde h\u0131zland\u0131rabilir. Docker Compose dosyan\u0131za kolayca bir Redis servisi ekleyebilirsiniz:\n<pre><code>\n  redis:\n    image: redis:alpine\n    container_name: laravel_redis\n    restart: unless-stopped\n    networks:\n      - app-network\n            <\/code><\/pre>\n<p>            Ard\u0131ndan Laravel <code>.env<\/code> dosyan\u0131zda <code>REDIS_HOST=redis<\/code> olarak ayarlayabilirsiniz.\n        <\/li>\n<\/ul>\n<h3>3. G\u00fcvenlik \u0130pu\u00e7lar\u0131<\/h3>\n<ul>\n<li><strong>\u00dcretim Ortam\u0131nda Root Eri\u015fimini K\u0131s\u0131tlama<\/strong>: MySQL i\u00e7in <code>MYSQL_ROOT_PASSWORD<\/code> yerine daha k\u0131s\u0131tl\u0131 yetkilere sahip bir kullan\u0131c\u0131 kullan\u0131n. Ayr\u0131ca, <code>.env<\/code> dosyas\u0131ndaki hassas bilgileri do\u011frudan Docker Compose dosyas\u0131nda tutmak yerine Docker Secrets veya Kubernetes Secrets gibi daha g\u00fcvenli y\u00f6ntemler kullanmay\u0131 d\u00fc\u015f\u00fcn\u00fcn.<\/li>\n<li><strong>Nginx G\u00fcvenlik Ba\u015fl\u0131klar\u0131<\/strong>: <code>default.conf<\/code> dosyan\u0131za ekledi\u011fimiz <code>X-Frame-Options<\/code>, <code>X-XSS-Protection<\/code> gibi ba\u015fl\u0131klar temel g\u00fcvenlik sa\u011flar. Daha fazlas\u0131 i\u00e7in CSP (Content Security Policy) gibi ba\u015fl\u0131klar\u0131 da eklemeyi d\u00fc\u015f\u00fcnebilirsiniz.<\/li>\n<li><strong>Log Y\u00f6netimi<\/strong>: \u00dcretim ortam\u0131nda loglar\u0131 merkezi bir loglama sistemine (ELK Stack, Grafana Loki) g\u00f6ndermek i\u00e7in Docker'\u0131n log s\u00fcr\u00fcc\u00fclerini kullanabilirsiniz. Bu, sorun giderme ve g\u00fcvenlik denetimleri i\u00e7in kritik \u00f6neme sahiptir.<\/li>\n<li><strong>\u0130maj G\u00fcvenli\u011fi<\/strong>: Temel Docker imajlar\u0131n\u0131 d\u00fczenli olarak g\u00fcncelleyin. Kendi Dockerfile'lar\u0131n\u0131zda gereksiz paketleri y\u00fcklemekten ka\u00e7\u0131n\u0131n ve minimum ba\u011f\u0131ml\u0131l\u0131k prensibini uygulay\u0131n.<\/li>\n<\/ul>\n<h3>4. Vaka Analizi: Y\u00fcksek Trafikli Bir E-Ticaret Uygulamas\u0131n\u0131n Docker Compose ile Y\u00f6netimi<\/h3>\n<p>Bir e-ticaret platformu geli\u015ftirme ekibi, \"\u00fcr\u00fcn listeleme\" ve \"\u00f6deme\" gibi kritik mod\u00fcller \u00fczerinde \u00e7al\u0131\u015f\u0131yordu. Uygulama Laravel ile geli\u015ftirilmi\u015f, Nginx ve MySQL kullan\u0131yordu. \u0130lk ba\u015fta, her geli\u015ftirici kendi yerel makinesinde manuel kurulumlar yap\u0131yordu. Bu durum, \"Benim makinemde \u00e7al\u0131\u015f\u0131yor ama seninkinde hata veriyor\" gibi klasik sorunlara yol a\u00e7\u0131yordu. Ekip, bu tutars\u0131zl\u0131\u011f\u0131 gidermek ve yeni geli\u015ftiricilerin onboarding s\u00fcrecini h\u0131zland\u0131rmak i\u00e7in Docker Compose'a ge\u00e7meye karar verdi.<\/p>\n<p><strong>Uygulanan \u00c7\u00f6z\u00fcmler:<\/strong><\/p>\n<ol>\n<li><strong>Standartla\u015ft\u0131r\u0131lm\u0131\u015f Geli\u015ftirme Ortam\u0131<\/strong>: Yukar\u0131daki rehberde anlat\u0131ld\u0131\u011f\u0131 gibi bir <code>docker-compose.yml<\/code> dosyas\u0131 olu\u015fturuldu. Bu sayede, her geli\u015ftirici sadece <code>docker compose up -d<\/code> komutunu \u00e7al\u0131\u015ft\u0131rarak tamamen i\u015flevsel bir geli\u015ftirme ortam\u0131na sahip oldu.<\/li>\n<li><strong>Redis Entegrasyonu<\/strong>: Y\u00fcksek trafik beklenen bir e-ticaret uygulamas\u0131 oldu\u011fu i\u00e7in, Laravel'in \u00f6nbellekleme ve oturum y\u00f6netimi i\u00e7in Docker Compose'a bir Redis servisi eklendi. Bu, veritaban\u0131 \u00fczerindeki y\u00fck\u00fc \u00f6nemli \u00f6l\u00e7\u00fcde azaltt\u0131 ve sayfa y\u00fckleme s\u00fcrelerini iyile\u015ftirdi.<\/li>\n<li><strong>Xdebug ile Hata Ay\u0131klama<\/strong>: Geli\u015ftirme ortam\u0131nda, <code>docker-compose.dev.yml<\/code> dosyas\u0131na Xdebug i\u00e7eren \u00f6zel bir PHP Dockerfile'\u0131 eklendi. Bu, geli\u015ftiricilerin IDE'leri (VS Code, PhpStorm) arac\u0131l\u0131\u011f\u0131yla kolayca hata ay\u0131klama yapmas\u0131n\u0131 sa\u011flad\u0131.<\/li>\n<li><strong>Veritaban\u0131 Y\u00f6netim Arac\u0131<\/strong>: Ekip, veritaban\u0131 i\u015flemlerini kolayla\u015ft\u0131rmak i\u00e7in PhpMyAdmin'i de bir servis olarak ekledi. Bu, \u00f6zellikle veritaban\u0131 \u015femas\u0131n\u0131 g\u00f6rsel olarak incelemek veya k\u00fc\u00e7\u00fck veri de\u011fi\u015fiklikleri yapmak gerekti\u011finde faydal\u0131 oldu.<\/li>\n<li><strong>Veri Kal\u0131c\u0131l\u0131\u011f\u0131 ve Yedekleme<\/strong>: MySQL verileri i\u00e7in Docker Volume'lar\u0131 kullan\u0131larak veri kal\u0131c\u0131l\u0131\u011f\u0131 sa\u011fland\u0131. Ayr\u0131ca, \u00fcretim ortam\u0131 i\u00e7in otomatik veritaban\u0131 yedekleme scriptleri Docker konteynerleri i\u00e7inde \u00e7al\u0131\u015facak \u015fekilde ayarland\u0131.<\/li>\n<\/ol>\n<p><strong>Sonu\u00e7lar:<\/strong><\/p>\n<p>Docker Compose'a ge\u00e7i\u015fle birlikte, geli\u015ftirme ekibinin verimlili\u011fi %30 artt\u0131. Yeni geli\u015ftiricilerin projeye adaptasyon s\u00fcresi haftalardan g\u00fcnlere d\u00fc\u015ft\u00fc. Ortam tutars\u0131zl\u0131klar\u0131ndan kaynaklanan hatalar neredeyse tamamen ortadan kalkt\u0131. Ayr\u0131ca, \u00fcretim ortam\u0131na da\u011f\u0131t\u0131m s\u00fcre\u00e7leri de Docker konteynerleri sayesinde daha \u00f6ng\u00f6r\u00fclebilir ve g\u00fcvenilir hale geldi. Bu vaka analizi, Docker Compose'un sadece k\u00fc\u00e7\u00fck projeler i\u00e7in de\u011fil, ayn\u0131 zamanda karma\u015f\u0131k ve y\u00fcksek performans gerektiren uygulamalar i\u00e7in de ne kadar de\u011ferli bir ara\u00e7 oldu\u011funu g\u00f6stermektedir.<\/p>\n<h2>Sonu\u00e7: Docker Compose ile Geli\u015ftirme Ortam\u0131n\u0131z\u0131 G\u00fc\u00e7lendirin<\/h2>\n<p>Bu kapsaml\u0131 rehber boyunca, Laravel, Nginx ve MySQL gibi modern web geli\u015ftirme y\u0131\u011f\u0131n\u0131n\u0131n temel bile\u015fenlerini Docker Compose ile nas\u0131l entegre edece\u011fimizi ad\u0131m ad\u0131m inceledik. Konteyner teknolojilerinin sundu\u011fu izolasyon, ta\u015f\u0131nabilirlik ve tutarl\u0131l\u0131k avantajlar\u0131n\u0131 kullanarak, \"benim makinemde \u00e7al\u0131\u015f\u0131yordu\" gibi sorunlara veda etme yolunda \u00f6nemli bir ad\u0131m att\u0131k. Art\u0131k, projenizin her ortamda ayn\u0131 \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flayacak g\u00fc\u00e7l\u00fc ve esnek bir geli\u015ftirme ortam\u0131na sahipsiniz. Docker Compose, sadece kurulum s\u00fcre\u00e7lerini basitle\u015ftirmekle kalmaz, ayn\u0131 zamanda ekip i\u00e7inde i\u015fbirli\u011fini art\u0131r\u0131r, hata ay\u0131klamay\u0131 kolayla\u015ft\u0131r\u0131r ve gelecekteki \u00f6l\u00e7eklenebilirlik i\u00e7in sa\u011flam bir temel olu\u015fturur. \u0130ster yeni ba\u015flayan bir geli\u015ftirici olun ister deneyimli bir profesyonel, Docker Compose'u geli\u015ftirme i\u015f ak\u0131\u015f\u0131n\u0131za entegre etmek, \u015f\u00fcphesiz verimlili\u011finizi art\u0131racak ve daha keyifli bir geli\u015ftirme deneyimi sunacakt\u0131r.<\/p>\n<p>Unutmay\u0131n, Docker ekosistemi s\u00fcrekli geli\u015fen bir aland\u0131r. Bu rehberde \u00f6\u011frendi\u011finiz temel bilgilerin \u00fczerine in\u015fa ederek, \u00f6zel ihtiya\u00e7lar\u0131n\u0131za g\u00f6re daha karma\u015f\u0131k konfig\u00fcrasyonlar olu\u015fturabilir, farkl\u0131 servisleri entegre edebilir ve projelerinizi bir sonraki seviyeye ta\u015f\u0131yabilirsiniz. Docker Compose ile olu\u015fturdu\u011funuz bu temel, daha b\u00fcy\u00fck \u00f6l\u00e7ekli ve karma\u015f\u0131k da\u011f\u0131t\u0131m senaryolar\u0131 i\u00e7in Kubernetes gibi orkestrasyon ara\u00e7lar\u0131na ge\u00e7i\u015fte de size de\u011ferli bir deneyim kazand\u0131racakt\u0131r. \u015eimdi, yeni Docker Compose destekli Laravel projenizin tad\u0131n\u0131 \u00e7\u0131kar\u0131n!<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<ol>\n<li>\n<h4>Docker Compose \u00fcretim ortam\u0131nda kullan\u0131labilir mi?<\/h4>\n<p>Evet, Docker Compose k\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli \u00fcretim ortamlar\u0131 i\u00e7in kullan\u0131labilir. Ancak, y\u00fcksek kullan\u0131labilirlik, otomatik \u00f6l\u00e7eklendirme ve karma\u015f\u0131k da\u011f\u0131t\u0131m senaryolar\u0131 gerektiren b\u00fcy\u00fck \u00f6l\u00e7ekli uygulamalar i\u00e7in Kubernetes gibi daha geli\u015fmi\u015f konteyner orkestrasyon ara\u00e7lar\u0131 genellikle tercih edilir. Docker Compose, \u00f6zellikle tek sunuculu da\u011f\u0131t\u0131mlar veya mikroservis mimarisi olmayan uygulamalar i\u00e7in iyi bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r.<\/p>\n<\/li>\n<li>\n<h4>Docker Compose yerine Kubernetes kullanmal\u0131 m\u0131y\u0131m?<\/h4>\n<p>Bu, projenizin \u00f6l\u00e7e\u011fine, karma\u015f\u0131kl\u0131\u011f\u0131na ve ekibinizin yetkinli\u011fine ba\u011fl\u0131d\u0131r. E\u011fer uygulaman\u0131z\u0131n y\u00fcksek kullan\u0131labilirlik, otomatik \u00f6l\u00e7eklendirme, kendi kendini iyile\u015ftirme gibi \u00f6zelliklere ihtiyac\u0131 varsa ve mikroservis mimarisi kullan\u0131yorsan\u0131z, Kubernetes daha uygun bir se\u00e7im olabilir. Ancak Kubernetes'in \u00f6\u011frenme e\u011frisi daha diktir. E\u011fer daha basit bir da\u011f\u0131t\u0131ma ihtiyac\u0131n\u0131z varsa veya yeni ba\u015fl\u0131yorsan\u0131z, Docker Compose ba\u015flamak i\u00e7in harika bir yoldur. Genellikle geli\u015ftirme ortamlar\u0131 i\u00e7in Docker Compose, \u00fcretim i\u00e7in Kubernetes \u015feklinde bir kombinasyon da yayg\u0131nd\u0131r.<\/p>\n<\/li>\n<li>\n<h4>Veritaban\u0131 verilerimi nas\u0131l yedeklerim?<\/h4>\n<p>Veritaban\u0131 verilerinizin kal\u0131c\u0131l\u0131\u011f\u0131n\u0131 Docker volume'lar\u0131 ile sa\u011flad\u0131k. Yedekleme i\u00e7in ise, MySQL konteynerine ba\u011flanarak <code>mysqldump<\/code> komutunu kullanabilirsiniz. \u00d6rne\u011fin:<\/p>\n<pre><code>\ndocker compose exec db mysqldump -u laravel_user -p laravel_db > backup.sql\n            <\/code><\/pre>\n<p>Bu komut, veritaban\u0131n\u0131n bir yede\u011fini <code>backup.sql<\/code> dosyas\u0131na kaydeder. Bu dosyay\u0131 daha sonra yerel makinenize kopyalayarak g\u00fcvenli bir yerde saklayabilirsiniz. Otomatik yedeklemeler i\u00e7in cron job veya Docker konteyneri i\u00e7inde \u00e7al\u0131\u015fan bir yedekleme scripti kullanabilirsiniz.<\/p>\n<\/li>\n<li>\n<h4>Laravel .env dosyas\u0131n\u0131 nas\u0131l y\u00f6netmeliyim?<\/h4>\n<p>Geli\u015ftirme ortam\u0131nda <code>.env<\/code> dosyas\u0131n\u0131 do\u011frudan projenizde tutmak yayg\u0131n bir uygulamad\u0131r (ancak git'e commit etmeyin!). \u00dcretim ortam\u0131nda ise daha g\u00fcvenli y\u00f6ntemler tercih edilir. Ortam de\u011fi\u015fkenlerini do\u011frudan sunucuya set edebilir, Docker Secrets (Docker Swarm i\u00e7in) veya Kubernetes Secrets (Kubernetes i\u00e7in) kullanabilir ya da HashiCorp Vault gibi bir s\u0131r y\u00f6netimi \u00e7\u00f6z\u00fcm\u00fc entegre edebilirsiniz. Ama\u00e7, hassas bilgilerin (API anahtarlar\u0131, veritaban\u0131 \u015fifreleri) kod taban\u0131nda veya versiyon kontrol sisteminde a\u00e7\u0131k\u00e7a g\u00f6r\u00fcnmesini engellemektir.<\/p>\n<\/li>\n<li>\n<h4>PHP versiyonunu nas\u0131l de\u011fi\u015ftirebilirim?<\/h4>\n<p>PHP versiyonunu de\u011fi\u015ftirmek i\u00e7in <code>docker\/php\/Dockerfile<\/code> dosyas\u0131ndaki <code>FROM php:8.2-fpm-alpine<\/code> sat\u0131r\u0131n\u0131 istedi\u011finiz PHP versiyonuyla (\u00f6rne\u011fin <code>php:8.1-fpm-alpine<\/code> veya <code>php:7.4-fpm-alpine<\/code>) de\u011fi\u015ftirmeniz yeterlidir. De\u011fi\u015fikli\u011fi yapt\u0131ktan sonra, Docker imaj\u0131n\u0131 yeniden in\u015fa etmek i\u00e7in <code>docker compose up -d --build<\/code> komutunu \u00e7al\u0131\u015ft\u0131rman\u0131z gerekir. Bu sayede, uygulaman\u0131z yeni PHP versiyonuyla \u00e7al\u0131\u015fmaya ba\u015flayacakt\u0131r.<\/p>\n<\/li>\n<\/ol>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Docker Compose ile Laravel, Nginx ve MySQL Kurulumu: Ad\u0131m Ad\u0131m Rehber Modern web geli\u015ftirme s\u00fcre\u00e7lerinde, projelerin farkl\u0131 ortamlar&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-39810","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\u0131s\u0131n\u0131z?<\/title>\n<meta name=\"description\" content=\"Modern web geli\u015ftirme s\u00fcre\u00e7lerinde, projelerin farkl\u0131 ortamlar aras\u0131nda tutarl\u0131 bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamak en b\u00fcy\u00fck zorluklardan biridir. &quot;Benim bilgisayar\u0131mda \u00e7al\u0131\u015f\u0131yordu!&quot; c\u00fcmlesiyle s\u0131k\u00e7a kar\u015f\u0131la\u015f\u0131yorsan\u0131z, bu sorunlara kesin ve kal\u0131c\u0131 bir \u00e7\u00f6z\u00fcm aray\u0131\u015f\u0131nda olabilirsiniz. \u0130\u015fte bu noktada Docker Compose, Laravel, Nginx ve MySQL \u00fc\u00e7l\u00fcs\u00fcn\u00fc bir araya getirerek, geli\u015ftirme ortam\u0131n\u0131z\u0131 standartla\u015ft\u0131rman\u0131n ve verimli hale getirmenin anahtar\u0131n\u0131 sunar. Bu kapsaml\u0131 rehberde, s\u0131f\u0131rdan ba\u015flayarak bu g\u00fc\u00e7l\u00fc teknolojileri Docker Compose ile nas\u0131l entegre edece\u011finizi ad\u0131m ad\u0131m \u00f6\u011frenecek, b\u00f6ylece projenizin her yerde sorunsuz \u00e7al\u0131\u015fmas\u0131n\u0131 garanti alt\u0131na alacaks\u0131n\u0131z.\" \/>\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-yapmalisiniz\/\" \/>\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\u0131s\u0131n\u0131z?\" \/>\n<meta property=\"og:description\" content=\"Modern web geli\u015ftirme s\u00fcre\u00e7lerinde, projelerin farkl\u0131 ortamlar aras\u0131nda tutarl\u0131 bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamak en b\u00fcy\u00fck zorluklardan biridir. &quot;Benim bilgisayar\u0131mda \u00e7al\u0131\u015f\u0131yordu!&quot; c\u00fcmlesiyle s\u0131k\u00e7a kar\u015f\u0131la\u015f\u0131yorsan\u0131z, bu sorunlara kesin ve kal\u0131c\u0131 bir \u00e7\u00f6z\u00fcm aray\u0131\u015f\u0131nda olabilirsiniz. \u0130\u015fte bu noktada Docker Compose, Laravel, Nginx ve MySQL \u00fc\u00e7l\u00fcs\u00fcn\u00fc bir araya getirerek, geli\u015ftirme ortam\u0131n\u0131z\u0131 standartla\u015ft\u0131rman\u0131n ve verimli hale getirmenin anahtar\u0131n\u0131 sunar. Bu kapsaml\u0131 rehberde, s\u0131f\u0131rdan ba\u015flayarak bu g\u00fc\u00e7l\u00fc teknolojileri Docker Compose ile nas\u0131l entegre edece\u011finizi ad\u0131m ad\u0131m \u00f6\u011frenecek, b\u00f6ylece projenizin her yerde sorunsuz \u00e7al\u0131\u015fmas\u0131n\u0131 garanti alt\u0131na alacaks\u0131n\u0131z.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmalisiniz\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-24T01:21:04+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=\"5 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-yapmalisiniz\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmalisiniz\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Neden Docker Compose ile Laravel, Nginx ve MySQL Kurulumu Yapmal\u0131s\u0131n\u0131z?\",\"datePublished\":\"2026-02-24T01:21:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmalisiniz\/\"},\"wordCount\":4635,\"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-yapmalisiniz\/#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-yapmalisiniz\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmalisiniz\/\",\"name\":\"Neden Docker Compose ile Laravel, Nginx ve MySQL Kurulumu Yapmal\u0131s\u0131n\u0131z?\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-02-24T01:21:04+00:00\",\"description\":\"Modern web geli\u015ftirme s\u00fcre\u00e7lerinde, projelerin farkl\u0131 ortamlar aras\u0131nda tutarl\u0131 bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamak en b\u00fcy\u00fck zorluklardan biridir. \\\"Benim bilgisayar\u0131mda \u00e7al\u0131\u015f\u0131yordu!\\\" c\u00fcmlesiyle s\u0131k\u00e7a kar\u015f\u0131la\u015f\u0131yorsan\u0131z, bu sorunlara kesin ve kal\u0131c\u0131 bir \u00e7\u00f6z\u00fcm aray\u0131\u015f\u0131nda olabilirsiniz. \u0130\u015fte bu noktada Docker Compose, Laravel, Nginx ve MySQL \u00fc\u00e7l\u00fcs\u00fcn\u00fc bir araya getirerek, geli\u015ftirme ortam\u0131n\u0131z\u0131 standartla\u015ft\u0131rman\u0131n ve verimli hale getirmenin anahtar\u0131n\u0131 sunar. Bu kapsaml\u0131 rehberde, s\u0131f\u0131rdan ba\u015flayarak bu g\u00fc\u00e7l\u00fc teknolojileri Docker Compose ile nas\u0131l entegre edece\u011finizi ad\u0131m ad\u0131m \u00f6\u011frenecek, b\u00f6ylece projenizin her yerde sorunsuz \u00e7al\u0131\u015fmas\u0131n\u0131 garanti alt\u0131na alacaks\u0131n\u0131z.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmalisiniz\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmalisiniz\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmalisiniz\/#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\u0131s\u0131n\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\u0131s\u0131n\u0131z?","description":"Modern web geli\u015ftirme s\u00fcre\u00e7lerinde, projelerin farkl\u0131 ortamlar aras\u0131nda tutarl\u0131 bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamak en b\u00fcy\u00fck zorluklardan biridir. \"Benim bilgisayar\u0131mda \u00e7al\u0131\u015f\u0131yordu!\" c\u00fcmlesiyle s\u0131k\u00e7a kar\u015f\u0131la\u015f\u0131yorsan\u0131z, bu sorunlara kesin ve kal\u0131c\u0131 bir \u00e7\u00f6z\u00fcm aray\u0131\u015f\u0131nda olabilirsiniz. \u0130\u015fte bu noktada Docker Compose, Laravel, Nginx ve MySQL \u00fc\u00e7l\u00fcs\u00fcn\u00fc bir araya getirerek, geli\u015ftirme ortam\u0131n\u0131z\u0131 standartla\u015ft\u0131rman\u0131n ve verimli hale getirmenin anahtar\u0131n\u0131 sunar. Bu kapsaml\u0131 rehberde, s\u0131f\u0131rdan ba\u015flayarak bu g\u00fc\u00e7l\u00fc teknolojileri Docker Compose ile nas\u0131l entegre edece\u011finizi ad\u0131m ad\u0131m \u00f6\u011frenecek, b\u00f6ylece projenizin her yerde sorunsuz \u00e7al\u0131\u015fmas\u0131n\u0131 garanti alt\u0131na alacaks\u0131n\u0131z.","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-yapmalisiniz\/","og_locale":"tr_TR","og_type":"article","og_title":"Neden Docker Compose ile Laravel, Nginx ve MySQL Kurulumu Yapmal\u0131s\u0131n\u0131z?","og_description":"Modern web geli\u015ftirme s\u00fcre\u00e7lerinde, projelerin farkl\u0131 ortamlar aras\u0131nda tutarl\u0131 bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamak en b\u00fcy\u00fck zorluklardan biridir. \"Benim bilgisayar\u0131mda \u00e7al\u0131\u015f\u0131yordu!\" c\u00fcmlesiyle s\u0131k\u00e7a kar\u015f\u0131la\u015f\u0131yorsan\u0131z, bu sorunlara kesin ve kal\u0131c\u0131 bir \u00e7\u00f6z\u00fcm aray\u0131\u015f\u0131nda olabilirsiniz. \u0130\u015fte bu noktada Docker Compose, Laravel, Nginx ve MySQL \u00fc\u00e7l\u00fcs\u00fcn\u00fc bir araya getirerek, geli\u015ftirme ortam\u0131n\u0131z\u0131 standartla\u015ft\u0131rman\u0131n ve verimli hale getirmenin anahtar\u0131n\u0131 sunar. Bu kapsaml\u0131 rehberde, s\u0131f\u0131rdan ba\u015flayarak bu g\u00fc\u00e7l\u00fc teknolojileri Docker Compose ile nas\u0131l entegre edece\u011finizi ad\u0131m ad\u0131m \u00f6\u011frenecek, b\u00f6ylece projenizin her yerde sorunsuz \u00e7al\u0131\u015fmas\u0131n\u0131 garanti alt\u0131na alacaks\u0131n\u0131z.","og_url":"https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmalisiniz\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-02-24T01:21:04+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"5 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmalisiniz\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmalisiniz\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Neden Docker Compose ile Laravel, Nginx ve MySQL Kurulumu Yapmal\u0131s\u0131n\u0131z?","datePublished":"2026-02-24T01:21:04+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmalisiniz\/"},"wordCount":4635,"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-yapmalisiniz\/#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-yapmalisiniz\/","url":"https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmalisiniz\/","name":"Neden Docker Compose ile Laravel, Nginx ve MySQL Kurulumu Yapmal\u0131s\u0131n\u0131z?","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-02-24T01:21:04+00:00","description":"Modern web geli\u015ftirme s\u00fcre\u00e7lerinde, projelerin farkl\u0131 ortamlar aras\u0131nda tutarl\u0131 bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamak en b\u00fcy\u00fck zorluklardan biridir. \"Benim bilgisayar\u0131mda \u00e7al\u0131\u015f\u0131yordu!\" c\u00fcmlesiyle s\u0131k\u00e7a kar\u015f\u0131la\u015f\u0131yorsan\u0131z, bu sorunlara kesin ve kal\u0131c\u0131 bir \u00e7\u00f6z\u00fcm aray\u0131\u015f\u0131nda olabilirsiniz. \u0130\u015fte bu noktada Docker Compose, Laravel, Nginx ve MySQL \u00fc\u00e7l\u00fcs\u00fcn\u00fc bir araya getirerek, geli\u015ftirme ortam\u0131n\u0131z\u0131 standartla\u015ft\u0131rman\u0131n ve verimli hale getirmenin anahtar\u0131n\u0131 sunar. Bu kapsaml\u0131 rehberde, s\u0131f\u0131rdan ba\u015flayarak bu g\u00fc\u00e7l\u00fc teknolojileri Docker Compose ile nas\u0131l entegre edece\u011finizi ad\u0131m ad\u0131m \u00f6\u011frenecek, b\u00f6ylece projenizin her yerde sorunsuz \u00e7al\u0131\u015fmas\u0131n\u0131 garanti alt\u0131na alacaks\u0131n\u0131z.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmalisiniz\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmalisiniz\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/neden-docker-compose-ile-laravel-nginx-ve-mysql-kurulumu-yapmalisiniz\/#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\u0131s\u0131n\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\/39810","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=39810"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39810\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=39810"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=39810"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=39810"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}