{"id":36734,"date":"2025-12-22T09:30:42","date_gmt":"2025-12-22T06:30:42","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/docker-ortaminda-composer-ile-yerel-paket-gelistirme-ipuclari\/"},"modified":"2025-12-22T09:30:42","modified_gmt":"2025-12-22T06:30:42","slug":"docker-ortaminda-composer-ile-yerel-paket-gelistirme-ipuclari","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/docker-ortaminda-composer-ile-yerel-paket-gelistirme-ipuclari\/","title":{"rendered":"Docker Ortam\u0131nda Composer ile Yerel Paket Geli\u015ftirme \u0130pu\u00e7lar\u0131"},"content":{"rendered":"<h2>Docker Ortam\u0131nda Composer ile Yerel Paket Geli\u015ftirme \u0130pu\u00e7lar\u0131<\/h2>\n<p>Modern PHP projelerinde Docker ve Composer, geli\u015ftirme ortam\u0131 tutarl\u0131l\u0131\u011f\u0131 ve ba\u011f\u0131ml\u0131l\u0131k y\u00f6netimi i\u00e7in vazge\u00e7ilmezdir. Ancak, ana proje i\u00e7inde yerel Composer paketi geli\u015ftirirken bu ikiliyi verimli kullanmak bazen zorlay\u0131c\u0131 olabilir. Bu makale, Docker ortam\u0131nda Composer ile yerel paket geli\u015ftirirken kar\u015f\u0131la\u015fabilece\u011finiz zorluklar\u0131 a\u015fman\u0131za yard\u0131mc\u0131 olacak pratik ipu\u00e7lar\u0131, en iyi uygulamalar ve detayl\u0131 yap\u0131land\u0131rma \u00f6rnekleri sunarak geli\u015ftirme s\u00fcrecinizi h\u0131zland\u0131rmay\u0131 hedeflemektedir.<\/p>\n<h3>Docker ve Composer Ortam\u0131n\u0131 Haz\u0131rlama<\/h3>\n<p>Yerel paket geli\u015ftirme s\u00fcrecine ba\u015flamadan \u00f6nce, projenizin ve geli\u015ftirilecek paketin ihtiya\u00e7 duydu\u011fu temel Docker ve Composer ortam\u0131n\u0131 do\u011fru bir \u015fekilde yap\u0131land\u0131rmak kritik \u00f6neme sahiptir. Bu ad\u0131m, ilerleyen s\u00fcre\u00e7lerde ya\u015fanabilecek uyumluluk ve ba\u011f\u0131ml\u0131l\u0131k sorunlar\u0131n\u0131n \u00f6n\u00fcne ge\u00e7er.<\/p>\n<h4><code>docker-compose.yml<\/code> Dosyas\u0131 Yap\u0131land\u0131rmas\u0131<\/h4>\n<p><code>docker-compose.yml<\/code> dosyas\u0131, uygulaman\u0131z\u0131n servislerini, a\u011flar\u0131n\u0131 ve depolama birimlerini tan\u0131mlad\u0131\u011f\u0131n\u0131z merkezi bir yap\u0131land\u0131rma dosyas\u0131d\u0131r. Yerel paket geli\u015ftirme i\u00e7in, hem ana projenizi hem de geli\u015ftirilecek paketinizi Docker konteynerleri i\u00e7inde eri\u015filebilir k\u0131lman\u0131z gerekir. \u00d6zellikle volume ba\u011flama (mounting) i\u015flemleri, yerel de\u011fi\u015fikliklerinizin an\u0131nda konteyner i\u00e7inde yans\u0131mas\u0131n\u0131 sa\u011flar.<\/p>\n<p>A\u015fa\u011f\u0131da temel bir PHP-FPM ve Nginx servislerini i\u00e7eren <code>docker-compose.yml<\/code> \u00f6rne\u011fi bulunmaktad\u0131r:<\/p>\n<pre><code class=\"language-yaml\">\nversion: '3.8'\nservices:\n  app:\n    build:\n      context: .\n      dockerfile: Dockerfile\n    volumes:\n      - .:\/var\/www\/html # Ana projenin ba\u011flanmas\u0131\n      - .\/packages\/my-local-package:\/var\/www\/html\/vendor\/my-vendor\/my-local-package # Yerel paketin ba\u011flanmas\u0131\n    working_dir: \/var\/www\/html\n    environment:\n      XDEBUG_MODE: develop,debug\n      XDEBUG_CONFIG: client_host=host.docker.internal\n  nginx:\n    image: nginx:stable-alpine\n    ports:\n      - \"80:80\"\n    volumes:\n      - .:\/var\/www\/html\n      - .\/docker\/nginx\/default.conf:\/etc\/nginx\/conf.d\/default.conf\n    depends_on:\n      - app\n<\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, <code>app<\/code> servisi alt\u0131nda hem ana projenin k\u00f6k dizini (<code>.:\/var\/www\/html<\/code>) hem de geli\u015ftirilmekte olan yerel paketin dizini (<code>.\/packages\/my-local-package:\/var\/www\/html\/vendor\/my-vendor\/my-local-package<\/code>) ba\u011flanm\u0131\u015ft\u0131r. Bu sayede, yerel pakette yapt\u0131\u011f\u0131n\u0131z her de\u011fi\u015fiklik an\u0131nda Docker konteyneri i\u00e7inde g\u00f6r\u00fcn\u00fcr olacakt\u0131r.<\/p>\n<h4>PHP Geli\u015ftirme Ortam\u0131 \u0130\u00e7in Dockerfile<\/h4>\n<p>PHP servisiniz i\u00e7in \u00f6zel bir Dockerfile olu\u015fturmak, gerekli PHP uzant\u0131lar\u0131n\u0131, Composer'\u0131 ve di\u011fer geli\u015ftirme ara\u00e7lar\u0131n\u0131 kurman\u0131z\u0131 sa\u011flar. Bu, ortam\u0131n\u0131z\u0131n \u00f6zelle\u015ftirilebilir ve tekrarlanabilir olmas\u0131n\u0131 garantiler.<\/p>\n<pre><code class=\"language-dockerfile\">\nFROM php:8.2-fpm-alpine\n\n# Gerekli ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00fckle\nRUN apk add --no-cache \\\n    git \\\n    zip \\\n    unzip \\\n    icu-dev \\\n    libpq-dev \\\n    # Di\u011fer ihtiyac\u0131n\u0131z olan paketler...\n    && docker-php-ext-install pdo pdo_pgsql intl opcache \\\n    # Xdebug kurulumu (iste\u011fe ba\u011fl\u0131)\n    && pecl install xdebug \\\n    && docker-php-ext-enable xdebug\n\n# Composer kurulumu\nCOPY --from=composer:latest \/usr\/bin\/composer \/usr\/local\/bin\/composer\n\nWORKDIR \/var\/www\/html\n\nCMD [\"php-fpm\"]\n<\/pre>\n<p><\/code><\/p>\n<p>Bu Dockerfile, PHP 8.2 FPM Alpine tabanl\u0131 bir imaj kullan\u0131r, gerekli sistem ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 ve PHP uzant\u0131lar\u0131n\u0131 kurar. Ayr\u0131ca, Composer'\u0131 ayr\u0131 bir Composer imaj\u0131ndan kopyalayarak en g\u00fcncel s\u00fcr\u00fcm\u00fcn\u00fc kullanman\u0131z\u0131 sa\u011flar. Xdebug kurulumu, hata ay\u0131klama i\u00e7in \u00f6nemlidir.<\/p>\n<h4>Composer Kurulumu ve Kullan\u0131m\u0131<\/h4>\n<p>Composer, PHP ba\u011f\u0131ml\u0131l\u0131k y\u00f6neticisidir. Docker konteyneri i\u00e7inde Composer'\u0131 kullanmak, ana projenizin ve yerel paketinizin ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 y\u00f6netmek i\u00e7in esast\u0131r. Dockerfile i\u00e7inde Composer'\u0131 kurduktan sonra, konteyner i\u00e7inden veya <code>docker-compose exec<\/code> komutu ile kolayca kullanabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">\n# Konteyner i\u00e7inden Composer \u00e7al\u0131\u015ft\u0131rma\ndocker-compose exec app composer install\n\n# Konteyner i\u00e7inden Composer update \u00e7al\u0131\u015ft\u0131rma\ndocker-compose exec app composer update\n<\/pre>\n<p><\/code><\/p>\n<h3>Yerel Paket Geli\u015ftirme \u0130\u015f Ak\u0131\u015f\u0131 ve Senaryolar\u0131<\/h3>\n<p>Yerel bir Composer paketi geli\u015ftirirken, ana projenizin bu paketi nas\u0131l tan\u0131yaca\u011f\u0131 ve kullanaca\u011f\u0131 \u00f6nemlidir. Composer'\u0131n <code>path<\/code> repository \u00f6zelli\u011fi ve sembolik ba\u011flant\u0131lar bu konuda en s\u0131k kullan\u0131lan y\u00f6ntemlerdir.<\/p>\n<h4><code>path<\/code> Repositories Kullan\u0131m\u0131<\/h4>\n<p>Composer'\u0131n <code>path<\/code> repository \u00f6zelli\u011fi, hen\u00fcz packagist.org gibi bir depoya y\u00fcklenmemi\u015f veya \u00fczerinde aktif olarak \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131z yerel paketleri ana projenize dahil etmenizi sa\u011flar. Bu, geli\u015ftirme a\u015famas\u0131nda paketinizi s\u00fcrekli olarak yay\u0131nlamak zorunda kalmadan test etmenize olanak tan\u0131r.<\/p>\n<p>Ana projenizin <code>composer.json<\/code> dosyas\u0131na a\u015fa\u011f\u0131daki gibi bir <code>repositories<\/code> b\u00f6l\u00fcm\u00fc eklemeniz gerekir:<\/p>\n<pre><code class=\"language-json\">\n{\n    \"name\": \"my-vendor\/main-project\",\n    \"description\": \"Ana projem\",\n    \"type\": \"project\",\n    \"require\": {\n        \"php\": \"^8.2\",\n        \"my-vendor\/my-local-package\": \"@dev\"\n    },\n    \"repositories\": [\n        {\n            \"type\": \"path\",\n            \"url\": \".\/packages\/my-local-package\",\n            \"options\": {\n                \"symlink\": true\n            }\n        }\n    ],\n    \"autoload\": {\n        \"psr-4\": {\n            \"App\\\\\": \"src\/\"\n        }\n    },\n    \"minimum-stability\": \"dev\",\n    \"prefer-stable\": true\n}\n<\/pre>\n<p><\/code><\/p>\n<p>Burada <code>type: \"path\"<\/code> ile Composer'a yerel bir dizini paket deposu olarak kullanmas\u0131n\u0131 s\u00f6yl\u00fcyoruz. <code>url<\/code> de\u011feri, ana projenizin k\u00f6k dizinine g\u00f6re paketin bulundu\u011fu yolu belirtir. <code>options.symlink: true<\/code> ise Composer'\u0131n paketi kopyalamak yerine sembolik bir ba\u011flant\u0131 olu\u015fturmas\u0131n\u0131 sa\u011flar, bu da de\u011fi\u015fikliklerinizin an\u0131nda yans\u0131mas\u0131n\u0131 garantiler.<\/p>\n<h4>Sembolik Ba\u011flant\u0131lar (Symlinks) ile \u00c7al\u0131\u015fma<\/h4>\n<p>Yukar\u0131daki <code>path<\/code> repository \u00f6rne\u011finde de g\u00f6r\u00fcld\u00fc\u011f\u00fc gibi, <code>symlink: true<\/code> se\u00e7ene\u011fi, Composer'\u0131n <code>vendor<\/code> dizini i\u00e7inde yerel paketinize bir sembolik ba\u011flant\u0131 olu\u015fturmas\u0131n\u0131 sa\u011flar. Bu, paketin kaynak kodunda yapt\u0131\u011f\u0131n\u0131z her de\u011fi\u015fikli\u011fin, ana projenin <code>vendor<\/code> dizinindeki ba\u011flant\u0131 arac\u0131l\u0131\u011f\u0131yla an\u0131nda eri\u015filebilir oldu\u011fu anlam\u0131na gelir. Bu y\u00f6ntem, geli\u015ftirme d\u00f6ng\u00fcs\u00fcn\u00fc inan\u0131lmaz derecede h\u0131zland\u0131r\u0131r.<\/p>\n<p><strong>Dikkat:<\/strong> Windows \u00fczerinde Docker Desktop kullan\u0131yorsan\u0131z ve WSL2 entegrasyonu yoksa, sembolik ba\u011flant\u0131lar bazen sorun \u00e7\u0131karabilir. Bu durumda <code>symlink: false<\/code> kullanman\u0131z gerekebilir, ancak bu paketin kopyalanmas\u0131na neden olaca\u011f\u0131 i\u00e7in her de\u011fi\u015fiklikte <code>composer update<\/code> \u00e7al\u0131\u015ft\u0131rman\u0131z gerekebilir. WSL2 kullanmak bu sorunu genellikle \u00e7\u00f6zer.<\/p>\n<h4>Paket G\u00fcncellemeleri ve Senkronizasyon<\/h4>\n<p>Yerel pakette bir de\u011fi\u015fiklik yapt\u0131\u011f\u0131n\u0131zda, e\u011fer <code>symlink: true<\/code> kullan\u0131yorsan\u0131z, ana projenin konteynerinde herhangi bir ek i\u015flem yapman\u0131za gerek kalmaz; de\u011fi\u015fiklikler an\u0131nda yans\u0131r. Ancak, paketin <code>composer.json<\/code> dosyas\u0131nda bir ba\u011f\u0131ml\u0131l\u0131k ekler veya de\u011fi\u015ftirirseniz, ana projenin <code>vendor<\/code> dizinini g\u00fcncellemek i\u00e7in <code>docker-compose exec app composer update my-vendor\/my-local-package<\/code> komutunu \u00e7al\u0131\u015ft\u0131rman\u0131z gerekebilir.<\/p>\n<h3>Ba\u011f\u0131ml\u0131l\u0131k Y\u00f6netimi ve Composer Ayarlar\u0131<\/h3>\n<p>Ana proje ile geli\u015ftirilen yerel paket aras\u0131ndaki ba\u011f\u0131ml\u0131l\u0131k ili\u015fkilerini do\u011fru y\u00f6netmek, karma\u015f\u0131kl\u0131\u011f\u0131 azalt\u0131r ve tutarl\u0131 bir geli\u015ftirme ortam\u0131 sa\u011flar.<\/p>\n<h4>Ana Proje ve Geli\u015ftirilen Paket Aras\u0131ndaki \u0130li\u015fki<\/h4>\n<p>Ana projeniz, geli\u015ftirilen yerel paketinize bir ba\u011f\u0131ml\u0131l\u0131k olarak ihtiya\u00e7 duyar. Bu ba\u011f\u0131ml\u0131l\u0131\u011f\u0131, ana projenin <code>composer.json<\/code> dosyas\u0131ndaki <code>require<\/code> b\u00f6l\u00fcm\u00fcnde belirtmelisiniz. Genellikle, geli\u015ftirme a\u015famas\u0131nda <code>\"@dev\"<\/code> veya belirli bir <code>dev<\/code> branch'i (<code>\"dev-main\"<\/code>) kullanmak yayg\u0131n bir yakla\u015f\u0131md\u0131r.<\/p>\n<pre><code class=\"language-json\">\n{\n    \"require\": {\n        \"my-vendor\/my-local-package\": \"@dev\"\n    }\n}\n<\/pre>\n<p><\/code><\/p>\n<p>Bu, Composer'a <code>my-vendor\/my-local-package<\/code> paketinin en g\u00fcncel geli\u015ftirme s\u00fcr\u00fcm\u00fcn\u00fc kullanmas\u0131n\u0131 s\u00f6yler.<\/p>\n<h4><code>composer.json<\/code> Dosyas\u0131nda Geli\u015ftirme Ba\u011f\u0131ml\u0131l\u0131klar\u0131<\/h4>\n<p>Yerel paketinizin de kendi ba\u011f\u0131ml\u0131l\u0131klar\u0131 olabilir. Bu ba\u011f\u0131ml\u0131l\u0131klar\u0131 paketin kendi <code>composer.json<\/code> dosyas\u0131nda tan\u0131mlamal\u0131s\u0131n\u0131z. E\u011fer bu ba\u011f\u0131ml\u0131l\u0131klar sadece geli\u015ftirme veya test a\u015famas\u0131nda kullan\u0131l\u0131yorsa, <code>require-dev<\/code> b\u00f6l\u00fcm\u00fcne eklenmelidir.<\/p>\n<pre><code class=\"language-json\">\n\/\/ packages\/my-local-package\/composer.json\n{\n    \"name\": \"my-vendor\/my-local-package\",\n    \"description\": \"Yerel olarak geli\u015ftirilen paketim\",\n    \"require\": {\n        \"php\": \"^8.2\",\n        \"monolog\/monolog\": \"^2.0\"\n    },\n    \"require-dev\": {\n        \"phpunit\/phpunit\": \"^9.5\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"MyVendor\\\\MyLocalPackage\\\\\": \"src\/\"\n        }\n    }\n}\n<\/pre>\n<p><\/code><\/p>\n<p>Ana projenizin <code>composer install<\/code> veya <code>composer update<\/code> komutunu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131nda, Composer \u00f6nce ana projenin ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 \u00e7\u00f6zer, ard\u0131ndan <code>path<\/code> repository \u00fczerinden yerel paketinizi bulur ve onun ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 da y\u00fckler.<\/p>\n<h4><code>composer install<\/code> ve <code>composer update<\/code> Stratejileri<\/h4>\n<p>*   <strong>\u0130lk Kurulum:<\/strong> Projeyi ilk kez kurarken veya <code>composer.lock<\/code> dosyas\u0131n\u0131 temel alarak ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00fcklerken <code>docker-compose exec app composer install<\/code> komutunu kullan\u0131n. Bu, <code>path<\/code> repository'nizi de do\u011fru \u015fekilde kuracakt\u0131r.<br \/>\n*   <strong>Ba\u011f\u0131ml\u0131l\u0131k G\u00fcncelleme:<\/strong> E\u011fer ana projenin veya yerel paketin <code>composer.json<\/code> dosyas\u0131nda bir ba\u011f\u0131ml\u0131l\u0131k eklediyseniz, de\u011fi\u015ftirdiyseniz veya kald\u0131rd\u0131ysan\u0131z, <code>docker-compose exec app composer update<\/code> komutunu \u00e7al\u0131\u015ft\u0131rman\u0131z gerekir. Belirli bir paketi g\u00fcncellemek i\u00e7in <code>docker-compose exec app composer update my-vendor\/my-local-package<\/code> kullanabilirsiniz.<\/p>\n<h3>Performans Optimizasyonu ve Geli\u015ftirme Deneyimi<\/h3>\n<p>Docker ile yerel geli\u015ftirme yaparken performans, \u00f6zellikle dosya sistemi i\u015flemleri ve PHP'nin \u00e7al\u0131\u015fma h\u0131z\u0131 a\u00e7\u0131s\u0131ndan \u00f6nemli bir konudur.<\/p>\n<h4>Docker Volume Performans\u0131<\/h4>\n<p>Docker'\u0131n varsay\u0131lan bind mount'lar\u0131 (yerel dosya sisteminizden konteynere dosya ba\u011flama), \u00f6zellikle macOS ve Windows'ta performans\u0131 d\u00fc\u015f\u00fcrebilir. Bunun nedeni, Docker'\u0131n dosya sistemi i\u015flemlerini sanal makine (VM) ve ana bilgisayar aras\u0131nda senkronize etme \u015feklidir.<\/p>\n<p>*   <strong>Linux:<\/strong> Genellikle iyi performans sunar.<br \/>\n*   <strong>macOS\/Windows (WSL2 olmadan):<\/strong> Performans sorunlar\u0131 ya\u015fanabilir. <code>cached<\/code> veya <code>delegated<\/code> mount se\u00e7eneklerini denemek faydal\u0131 olabilir, ancak bunlar dosya sistemi senkronizasyonunda gecikmelere neden olabilir.<br \/>\n*   <strong>Windows (WSL2 ile):<\/strong> WSL2, Linux \u00e7ekirde\u011fi kulland\u0131\u011f\u0131 i\u00e7in Linux'a yak\u0131n bir performans sunar ve genellikle en iyi deneyimi sa\u011flar. Projenizi WSL2 i\u00e7indeki bir Linux dosya sistemine yerle\u015ftirmek, performans\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r.<\/p>\n<pre><code class=\"language-yaml\">\n# docker-compose.yml i\u00e7inde volume ayar\u0131\nservices:\n  app:\n    volumes:\n      - .:\/var\/www\/html:cached # macOS\/Windows i\u00e7in performans art\u0131\u015f\u0131 sa\u011flayabilir\n<\/pre>\n<p><\/code><\/p>\n<h4>Caching Mekanizmalar\u0131<\/h4>\n<p>Composer'\u0131n kendi cache mekanizmas\u0131 vard\u0131r. Dockerfile'\u0131n\u0131zda veya <code>docker-compose.yml<\/code> dosyan\u0131zda Composer cache dizinini kal\u0131c\u0131 bir Docker volume'a ba\u011flamak, ba\u011f\u0131ml\u0131l\u0131klar\u0131n her yeniden olu\u015fturmada indirilmesini \u00f6nler ve <code>composer install<\/code>\/<code>update<\/code> s\u00fcrelerini k\u0131salt\u0131r.<\/p>\n<pre><code class=\"language-yaml\">\n# docker-compose.yml\nservices:\n  app:\n    volumes:\n      - .:\/var\/www\/html\n      - composer-cache:\/root\/.composer\/cache # Composer cache'i kal\u0131c\u0131 hale getir\n\nvolumes:\n  composer-cache:\n<\/pre>\n<p><\/code><\/p>\n<h4>Xdebug Entegrasyonu<\/h4>\n<p>Xdebug, PHP uygulamalar\u0131n\u0131zda hata ay\u0131klamak i\u00e7in vazge\u00e7ilmez bir ara\u00e7t\u0131r. Docker ortam\u0131nda Xdebug'\u0131 do\u011fru yap\u0131land\u0131rmak, geli\u015ftirme s\u00fcrecini b\u00fcy\u00fck \u00f6l\u00e7\u00fcde kolayla\u015ft\u0131r\u0131r.<\/p>\n<p>Dockerfile'\u0131n\u0131zda Xdebug'\u0131 kurduktan sonra (yukar\u0131daki Dockerfile \u00f6rne\u011finde g\u00f6sterildi\u011fi gibi), <code>docker-compose.yml<\/code> dosyan\u0131zda Xdebug'\u0131n do\u011fru \u00e7al\u0131\u015fmas\u0131 i\u00e7in ortam de\u011fi\u015fkenlerini ayarlaman\u0131z gerekir:<\/p>\n<pre><code class=\"language-yaml\">\n# docker-compose.yml\nservices:\n  app:\n    environment:\n      XDEBUG_MODE: develop,debug # Hata ay\u0131klama ve geli\u015ftirme modlar\u0131n\u0131 etkinle\u015ftir\n      XDEBUG_CONFIG: client_host=host.docker.internal # IDE'nizin \u00e7al\u0131\u015ft\u0131\u011f\u0131 ana bilgisayar\u0131n IP'si\n<\/pre>\n<p><\/code><\/p>\n<p><code>client_host=host.docker.internal<\/code> ifadesi, Docker Desktop'\u0131n ana bilgisayar\u0131 otomatik olarak tan\u0131mas\u0131n\u0131 sa\u011flar. E\u011fer Linux kullan\u0131yorsan\u0131z, ana bilgisayar\u0131n\u0131z\u0131n IP adresini manuel olarak bulup (<code>ip a<\/code> komutu ile) ayarlaman\u0131z gerekebilir. IDE'nizde (VS Code, PhpStorm vb.) Xdebug dinleyicisini etkinle\u015ftirmeyi unutmay\u0131n.<\/p>\n<h3>Hata Ay\u0131klama (Debugging) ve Sorun Giderme<\/h3>\n<p>Geli\u015ftirme s\u00fcrecinde hatalarla kar\u015f\u0131la\u015fmak ka\u00e7\u0131n\u0131lmazd\u0131r. Docker ortam\u0131nda bu hatalar\u0131 etkili bir \u015fekilde ay\u0131klamak, zaman kazand\u0131r\u0131r.<\/p>\n<h4>Docker Loglar\u0131n\u0131 \u0130zleme<\/h4>\n<p>Docker konteynerlerinizin loglar\u0131, uygulaman\u0131zda neler olup bitti\u011fini anlamak i\u00e7in ilk bakman\u0131z gereken yerdir. <code>docker-compose logs -f app<\/code> komutu, <code>app<\/code> servisinizin loglar\u0131n\u0131 ger\u00e7ek zamanl\u0131 olarak izlemenizi sa\u011flar. PHP hatalar\u0131, uyar\u0131lar\u0131 ve \u00f6zel olarak yazd\u0131\u011f\u0131n\u0131z log mesajlar\u0131 burada g\u00f6r\u00fcnecektir.<\/p>\n<h4>Xdebug ile Ad\u0131m Ad\u0131m Hata Ay\u0131klama<\/h4>\n<p>Yukar\u0131da belirtildi\u011fi gibi Xdebug'\u0131 kurup yap\u0131land\u0131rd\u0131ktan sonra, IDE'niz \u00fczerinden uygulaman\u0131z\u0131n kodunu ad\u0131m ad\u0131m \u00e7al\u0131\u015ft\u0131rabilir, de\u011fi\u015fken de\u011ferlerini inceleyebilir ve \u00e7a\u011fr\u0131 y\u0131\u011f\u0131n\u0131n\u0131 (call stack) takip edebilirsiniz. Bu, karma\u015f\u0131k hatalar\u0131 bulmak i\u00e7in en etkili y\u00f6ntemdir.<\/p>\n<p>1.  IDE'nizde bir breakpoint (kesme noktas\u0131) belirleyin.<br \/>\n2.  IDE'nizin Xdebug dinleyicisini ba\u015flat\u0131n.<br \/>\n3.  Web taray\u0131c\u0131n\u0131zdan veya bir API istemcisinden uygulaman\u0131za istek g\u00f6nderin.<br \/>\n4.  Xdebug, breakpoint'e ula\u015ft\u0131\u011f\u0131nda y\u00fcr\u00fctmeyi durduracak ve IDE'nizde hata ay\u0131klama oturumu ba\u015flayacakt\u0131r.<\/p>\n<h4>Ortak Sorunlar ve \u00c7\u00f6z\u00fcmleri<\/h4>\n<p>*   <strong>Paket Bulunam\u0131yor:<\/strong> <code>composer.json<\/code> dosyas\u0131ndaki <code>path<\/code> repository'nin <code>url<\/code> de\u011feri veya paketin <code>name<\/code> alan\u0131 yanl\u0131\u015f olabilir. <code>composer validate<\/code> komutunu kullanarak <code>composer.json<\/code> dosyan\u0131z\u0131n ge\u00e7erlili\u011fini kontrol edin.<br \/>\n*   <strong>Sembolik Ba\u011flant\u0131 Sorunlar\u0131:<\/strong> Windows'ta <code>symlink: true<\/code> ile sorun ya\u015f\u0131yorsan\u0131z, WSL2 kulland\u0131\u011f\u0131n\u0131zdan emin olun veya <code>symlink: false<\/code> deneyin.<br \/>\n*   <strong>Performans D\u00fc\u015f\u00fc\u015f\u00fc:<\/strong> \u00d6zellikle macOS ve Windows'ta dosya sistemi performans sorunlar\u0131 ya\u015f\u0131yorsan\u0131z, projenizi WSL2 i\u00e7ine ta\u015f\u0131y\u0131n veya <code>cached<\/code>\/<code>delegated<\/code> mount se\u00e7eneklerini deneyin.<br \/>\n*   <strong>Xdebug \u00c7al\u0131\u015fm\u0131yor:<\/strong> <code>XDEBUG_MODE<\/code> ve <code>XDEBUG_CONFIG<\/code> ortam de\u011fi\u015fkenlerinin do\u011fru ayarland\u0131\u011f\u0131ndan emin olun. <code>client_host<\/code> de\u011ferinin ana bilgisayar\u0131n\u0131z\u0131n IP'sini i\u015faret etti\u011finden ve IDE'nizin dinleyici modunda oldu\u011fundan emin olun.<br \/>\n*   <strong>Composer Memory Limit:<\/strong> B\u00fcy\u00fck projelerde <code>composer update<\/code> \u00e7al\u0131\u015ft\u0131r\u0131rken bellek hatas\u0131 alabilirsiniz. <code>docker-compose exec app php -d memory_limit=-1 \/usr\/local\/bin\/composer update<\/code> komutunu kullanarak bellek limitini kald\u0131rabilirsiniz.<\/p>\n<h3>En \u0130yi Uygulamalar ve \u0130pu\u00e7lar\u0131<\/h3>\n<p>Verimli ve s\u00fcrd\u00fcr\u00fclebilir bir yerel paket geli\u015ftirme s\u00fcreci i\u00e7in baz\u0131 en iyi uygulamalar\u0131 benimsemek \u00f6nemlidir.<\/p>\n<h4>Versiyon Kontrol\u00fc (Git) Entegrasyonu<\/h4>\n<p>Hem ana projenizi hem de yerel paketinizi ayr\u0131 Git depolar\u0131nda y\u00f6netin. Bu, paketinizi daha sonra ba\u011f\u0131ms\u0131z olarak yay\u0131nlaman\u0131za veya farkl\u0131 projelere dahil etmenize olanak tan\u0131r. Yerel pakette yapt\u0131\u011f\u0131n\u0131z de\u011fi\u015fiklikleri d\u00fczenli olarak commit edin ve push edin.<\/p>\n<h4>Otomatik Testler ve CI\/CD<\/h4>\n<p>Geli\u015ftirdi\u011finiz her yerel paket i\u00e7in birim (unit) ve entegrasyon (integration) testleri yaz\u0131n. Bu testleri Docker konteyneri i\u00e7inde \u00e7al\u0131\u015ft\u0131rmak, ortam ba\u011f\u0131ms\u0131zl\u0131\u011f\u0131n\u0131 sa\u011flar. Daha ileri seviyede, paketinizi bir CI\/CD (S\u00fcrekli Entegrasyon\/S\u00fcrekli Da\u011f\u0131t\u0131m) s\u00fcrecine dahil ederek her commit'te otomatik testlerin \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flayabilirsiniz.<\/p>\n<pre><code class=\"language-bash\">\n# Konteyner i\u00e7inde PHPUnit \u00e7al\u0131\u015ft\u0131rma\ndocker-compose exec app vendor\/bin\/phpunit packages\/my-local-package\/tests\n<\/pre>\n<p><\/code><\/p>\n<h4>Geli\u015ftirme Ortam\u0131n\u0131 Temiz Tutma<\/h4>\n<p>D\u00fczenli olarak kullan\u0131lmayan Docker imajlar\u0131n\u0131, konteynerlerini ve volume'lerini temizleyin. Bu, disk alan\u0131ndan tasarruf etmenizi ve olas\u0131 \u00e7ak\u0131\u015fmalar\u0131 \u00f6nlemenizi sa\u011flar.<\/p>\n<p>*   <code>docker system prune<\/code> (kullan\u0131lmayan t\u00fcm Docker kaynaklar\u0131n\u0131 temizler)<br \/>\n*   <code>docker-compose down --volumes --rmi all<\/code> (belirli bir projenin t\u00fcm servislerini durdurur, volume'lerini ve imajlar\u0131n\u0131 kald\u0131r\u0131r)<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Docker ortam\u0131nda Composer ile yerel paket geli\u015ftirmek, ba\u015flang\u0131\u00e7ta baz\u0131 zorluklar bar\u0131nd\u0131rsa da, do\u011fru yap\u0131land\u0131rma ve i\u015f ak\u0131\u015flar\u0131yla olduk\u00e7a verimli ve keyifli bir deneyime d\u00f6n\u00fc\u015febilir. <code>docker-compose.yml<\/code> ve Dockerfile'\u0131n\u0131z\u0131 titizlikle yap\u0131land\u0131rmak, <code>path<\/code> repositories ve sembolik ba\u011flant\u0131lar\u0131 etkin kullanmak, performans optimizasyonlar\u0131na dikkat etmek ve Xdebug ile etkili hata ay\u0131klama yapmak, bu s\u00fcrecin temel ta\u015flar\u0131d\u0131r. Bu makalede sunulan ipu\u00e7lar\u0131 ve \u00f6rnekler sayesinde, kendi yerel Composer paketlerinizi Docker'\u0131n g\u00fcc\u00fcyle sorunsuz bir \u015fekilde geli\u015ftirebilir, projelerinizi daha mod\u00fcler ve s\u00fcrd\u00fcr\u00fclebilir hale getirebilirsiniz.<\/p>\n<h3>SSS (S\u0131k Sorulan Sorular)<\/h3>\n<h4>1. Yerel paketimi neden <code>path<\/code> repository ile kullanmal\u0131y\u0131m?<\/h4>\n<p><code>path<\/code> repository, hen\u00fcz bir paket deposuna (Packagist gibi) yay\u0131nlamad\u0131\u011f\u0131n\u0131z veya aktif olarak \u00fczerinde \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131z bir paketi ana projenize kolayca dahil etmenizi sa\u011flar. Bu, her de\u011fi\u015fiklikte paketi yay\u0131nlamak zorunda kalmadan yerel test ve geli\u015ftirme yapman\u0131z\u0131 m\u00fcmk\u00fcn k\u0131lar.<\/p>\n<h4>2. <code>symlink: true<\/code> ve <code>symlink: false<\/code> aras\u0131ndaki fark nedir?<\/h4>\n<p><code>symlink: true<\/code> kullan\u0131ld\u0131\u011f\u0131nda, Composer yerel paketinize <code>vendor<\/code> dizini i\u00e7inde sembolik bir ba\u011flant\u0131 olu\u015fturur. Bu, paketin kaynak kodunda yapt\u0131\u011f\u0131n\u0131z de\u011fi\u015fikliklerin an\u0131nda ana projede g\u00f6r\u00fcnmesini sa\u011flar. <code>symlink: false<\/code> ise paketin bir kopyas\u0131n\u0131 <code>vendor<\/code> dizinine yerle\u015ftirir, bu durumda her de\u011fi\u015fiklikten sonra <code>composer update<\/code> \u00e7al\u0131\u015ft\u0131rman\u0131z gerekebilir.<\/p>\n<h4>3. Docker'da Composer cache'ini nas\u0131l kal\u0131c\u0131 hale getirebilirim?<\/h4>\n<p><code>docker-compose.yml<\/code> dosyan\u0131zda Composer cache dizinini (<code>\/root\/.composer\/cache<\/code> veya <code>\/home\/<user>\/.composer\/cache<\/code>) kal\u0131c\u0131 bir Docker volume'a ba\u011flayarak cache'i kal\u0131c\u0131 hale getirebilirsiniz. Bu, konteynerler yeniden olu\u015fturuldu\u011funda ba\u011f\u0131ml\u0131l\u0131klar\u0131n tekrar indirilmesini \u00f6nler.<\/p>\n<h4>4. Xdebug neden Docker konteynerimde \u00e7al\u0131\u015fm\u0131yor?<\/h4>\n<p>Xdebug'\u0131n \u00e7al\u0131\u015fmamas\u0131n\u0131n birka\u00e7 nedeni olabilir:<br \/>\n*   Dockerfile'\u0131n\u0131zda Xdebug do\u011fru kurulmam\u0131\u015f olabilir.<br \/>\n*   <code>docker-compose.yml<\/code> dosyan\u0131zda <code>XDEBUG_MODE<\/code> ve <code>XDEBUG_CONFIG<\/code> ortam de\u011fi\u015fkenleri yanl\u0131\u015f ayarlanm\u0131\u015f olabilir. \u00d6zellikle <code>client_host<\/code> de\u011feri, IDE'nizin \u00e7al\u0131\u015ft\u0131\u011f\u0131 ana bilgisayar\u0131n IP adresini veya <code>host.docker.internal<\/code>'\u0131 do\u011fru \u015fekilde g\u00f6stermelidir.<br \/>\n*   IDE'nizin Xdebug dinleyicisi etkinle\u015ftirilmemi\u015f olabilir.<\/p>\n<h4>5. Yerel paketimde bir de\u011fi\u015fiklik yapt\u0131\u011f\u0131mda ana projeyi yeniden derlemem (rebuild) gerekir mi?<\/h4>\n<p>E\u011fer <code>path<\/code> repository'nizde <code>symlink: true<\/code> kulland\u0131ysan\u0131z, genellikle ana projeyi yeniden derlemeniz veya <code>composer update<\/code> \u00e7al\u0131\u015ft\u0131rman\u0131z gerekmez. De\u011fi\u015fiklikler an\u0131nda yans\u0131r. Ancak, paketin <code>composer.json<\/code> dosyas\u0131ndaki ba\u011f\u0131ml\u0131l\u0131klar\u0131 de\u011fi\u015ftirdiyseniz, ana projenin <code>vendor<\/code> dizinini g\u00fcncellemek i\u00e7in <code>docker-compose exec app composer update my-vendor\/my-local-package<\/code> \u00e7al\u0131\u015ft\u0131rman\u0131z gerekebilir.<\/p>\n","protected":false},"excerpt":{"rendered":"Docker Ortam\u0131nda Composer ile Yerel Paket Geli\u015ftirme \u0130pu\u00e7lar\u0131\nModern PHP projelerinde Docker ve Composer, geli\u015ftirme ortam\u0131 tutarl\u0131l\u0131\u011f\u0131 ve ba\u011f\u0131&#8230;","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":[1407],"tags":[],"class_list":{"0":"post-36734","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-docker","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>Docker Ortam\u0131nda Composer ile Yerel Paket Geli\u015ftirme \u0130pu\u00e7lar\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/docker-ortaminda-composer-ile-yerel-paket-gelistirme-ipuclari\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Docker Ortam\u0131nda Composer ile Yerel Paket Geli\u015ftirme \u0130pu\u00e7lar\u0131\" \/>\n<meta property=\"og:description\" content=\"Docker Ortam\u0131nda Composer ile Yerel Paket Geli\u015ftirme \u0130pu\u00e7lar\u0131 Modern PHP projelerinde Docker ve Composer, geli\u015ftirme ortam\u0131 tutarl\u0131l\u0131\u011f\u0131 ve ba\u011f\u0131...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/docker-ortaminda-composer-ile-yerel-paket-gelistirme-ipuclari\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-22T06:30:42+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=\"14 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-ortaminda-composer-ile-yerel-paket-gelistirme-ipuclari\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-ortaminda-composer-ile-yerel-paket-gelistirme-ipuclari\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Docker Ortam\u0131nda Composer ile Yerel Paket Geli\u015ftirme \u0130pu\u00e7lar\u0131\",\"datePublished\":\"2025-12-22T06:30:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-ortaminda-composer-ile-yerel-paket-gelistirme-ipuclari\/\"},\"wordCount\":2276,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Docker\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/docker-ortaminda-composer-ile-yerel-paket-gelistirme-ipuclari\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-ortaminda-composer-ile-yerel-paket-gelistirme-ipuclari\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/docker-ortaminda-composer-ile-yerel-paket-gelistirme-ipuclari\/\",\"name\":\"Docker Ortam\u0131nda Composer ile Yerel Paket Geli\u015ftirme \u0130pu\u00e7lar\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-22T06:30:42+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-ortaminda-composer-ile-yerel-paket-gelistirme-ipuclari\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/docker-ortaminda-composer-ile-yerel-paket-gelistirme-ipuclari\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-ortaminda-composer-ile-yerel-paket-gelistirme-ipuclari\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Docker Ortam\u0131nda Composer ile Yerel Paket Geli\u015ftirme \u0130pu\u00e7lar\u0131\"}]},{\"@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":"Docker Ortam\u0131nda Composer ile Yerel Paket Geli\u015ftirme \u0130pu\u00e7lar\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/docker-ortaminda-composer-ile-yerel-paket-gelistirme-ipuclari\/","og_locale":"tr_TR","og_type":"article","og_title":"Docker Ortam\u0131nda Composer ile Yerel Paket Geli\u015ftirme \u0130pu\u00e7lar\u0131","og_description":"Docker Ortam\u0131nda Composer ile Yerel Paket Geli\u015ftirme \u0130pu\u00e7lar\u0131 Modern PHP projelerinde Docker ve Composer, geli\u015ftirme ortam\u0131 tutarl\u0131l\u0131\u011f\u0131 ve ba\u011f\u0131...","og_url":"https:\/\/fatihsoysal.com\/blog\/docker-ortaminda-composer-ile-yerel-paket-gelistirme-ipuclari\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-22T06:30:42+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"14 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/docker-ortaminda-composer-ile-yerel-paket-gelistirme-ipuclari\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/docker-ortaminda-composer-ile-yerel-paket-gelistirme-ipuclari\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Docker Ortam\u0131nda Composer ile Yerel Paket Geli\u015ftirme \u0130pu\u00e7lar\u0131","datePublished":"2025-12-22T06:30:42+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/docker-ortaminda-composer-ile-yerel-paket-gelistirme-ipuclari\/"},"wordCount":2276,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Docker"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/docker-ortaminda-composer-ile-yerel-paket-gelistirme-ipuclari\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/docker-ortaminda-composer-ile-yerel-paket-gelistirme-ipuclari\/","url":"https:\/\/fatihsoysal.com\/blog\/docker-ortaminda-composer-ile-yerel-paket-gelistirme-ipuclari\/","name":"Docker Ortam\u0131nda Composer ile Yerel Paket Geli\u015ftirme \u0130pu\u00e7lar\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-22T06:30:42+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/docker-ortaminda-composer-ile-yerel-paket-gelistirme-ipuclari\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/docker-ortaminda-composer-ile-yerel-paket-gelistirme-ipuclari\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/docker-ortaminda-composer-ile-yerel-paket-gelistirme-ipuclari\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Docker Ortam\u0131nda Composer ile Yerel Paket Geli\u015ftirme \u0130pu\u00e7lar\u0131"}]},{"@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\/36734","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=36734"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36734\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=36734"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=36734"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=36734"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}