{"id":37615,"date":"2026-01-10T17:40:56","date_gmt":"2026-01-10T14:40:56","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=37615"},"modified":"2026-01-10T17:40:56","modified_gmt":"2026-01-10T14:40:56","slug":"kucuk-bir-web-uygulamasini-cakephp-ile-bir-vps-uzerinde-olusturma-bolum-1","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/kucuk-bir-web-uygulamasini-cakephp-ile-bir-vps-uzerinde-olusturma-bolum-1\/","title":{"rendered":"K\u00fc\u00e7\u00fck Bir Web Uygulamas\u0131n\u0131 CakePHP ile Bir VPS \u00dczerinde Olu\u015fturma (B\u00f6l\u00fcm 1)"},"content":{"rendered":"<p><body><\/p>\n<h2>K\u00fc\u00e7\u00fck Bir Web Uygulamas\u0131n\u0131 CakePHP ile Bir VPS \u00dczerinde Olu\u015fturma (B\u00f6l\u00fcm 1)<\/h2>\n<p>Web geli\u015ftirme d\u00fcnyas\u0131nda, dinamik ve etkile\u015fimli uygulamalar olu\u015fturmak her zamankinden daha \u00f6nemli hale gelmi\u015ftir. Bu uygulamalar\u0131 hayata ge\u00e7irmek i\u00e7in sa\u011flam bir altyap\u0131 ve verimli bir geli\u015ftirme \u00e7at\u0131s\u0131 (framework) se\u00e7imi kritik rol oynar. Bu makalede, h\u0131zl\u0131 ve d\u00fczenli web uygulamalar\u0131 geli\u015ftirmek i\u00e7in pop\u00fcler bir PHP framework&#8217;\u00fc olan CakePHP&#8217;yi, tam kontrol ve esneklik sunan bir Sanal \u00d6zel Sunucu (VPS) \u00fczerinde nas\u0131l kuraca\u011f\u0131m\u0131z\u0131 ve basit bir uygulama geli\u015ftirmeye nas\u0131l ba\u015flayaca\u011f\u0131m\u0131z\u0131 ad\u0131m ad\u0131m inceleyece\u011fiz. Bu, serinin ilk b\u00f6l\u00fcm\u00fcd\u00fcr ve temel kurulumdan basit bir uygulaman\u0131n listeleme k\u0131sm\u0131na kadar olan s\u00fcreci kapsayacakt\u0131r.<\/p>\n<h3>Giri\u015f: CakePHP ve VPS D\u00fcnyas\u0131na Ho\u015f Geldiniz<\/h3>\n<p>Modern web uygulamalar\u0131, kullan\u0131c\u0131 deneyimini zenginle\u015ftiren, veri odakl\u0131 ve \u00f6l\u00e7eklenebilir yap\u0131lar gerektirir. Bu ihtiya\u00e7lar\u0131 kar\u015f\u0131lamak i\u00e7in geli\u015ftiriciler, MVC (Model-View-Controller) mimarisine dayal\u0131 framework&#8217;leri tercih etmektedir. CakePHP, bu framework&#8217;lerden biridir ve &#8220;convention over configuration&#8221; (yap\u0131land\u0131rma yerine kural) felsefesiyle h\u0131zl\u0131 geli\u015ftirme imkan\u0131 sunar. Temiz kod yap\u0131s\u0131, g\u00fc\u00e7l\u00fc ORM (Object-Relational Mapping) yetenekleri ve kapsaml\u0131 k\u00fct\u00fcphaneleri ile CakePHP, hem yeni ba\u015flayanlar hem de deneyimli geli\u015ftiriciler i\u00e7in cazip bir se\u00e7enektir.<\/p>\n<p>Di\u011fer yandan, bir web uygulamas\u0131n\u0131 bar\u0131nd\u0131rmak i\u00e7in bir\u00e7ok se\u00e7enek mevcuttur. Payla\u015f\u0131ml\u0131 hosting, y\u00f6netilen hosting ve bulut sunucular gibi alternatifler aras\u0131nda VPS, geli\u015ftiricilere m\u00fckemmel bir denge sunar. VPS, fiziksel bir sunucunun sanal olarak birden \u00e7ok izole b\u00f6l\u00fcme ayr\u0131lmas\u0131yla olu\u015fur. Her bir VPS, kendi i\u015fletim sistemine, kaynaklar\u0131na ve root eri\u015fimine sahiptir. Bu, size sunucunuz \u00fczerinde tam kontrol sa\u011flar, istedi\u011finiz yaz\u0131l\u0131mlar\u0131 kurman\u0131za, g\u00fcvenlik ayarlar\u0131n\u0131 yapman\u0131za ve performans\u0131n\u0131 optimize etmenize olanak tan\u0131r. Payla\u015f\u0131ml\u0131 hosting&#8217;in k\u0131s\u0131tlamalar\u0131ndan kurtulurken, tam bir fiziksel sunucunun karma\u015f\u0131kl\u0131\u011f\u0131 ve maliyetinden ka\u00e7\u0131nm\u0131\u015f olursunuz.<\/p>\n<p>Bu makalenin amac\u0131, CakePHP&#8217;nin sundu\u011fu kolayl\u0131klar\u0131 bir VPS&#8217;in esnekli\u011fi ile birle\u015ftirerek, kendi web uygulaman\u0131z\u0131 nas\u0131l hayata ge\u00e7irece\u011finizi g\u00f6stermektir. B\u00f6l\u00fcm 1&#8217;de, bir VPS&#8217;i nas\u0131l haz\u0131rlayaca\u011f\u0131m\u0131z\u0131, gerekli yaz\u0131l\u0131mlar\u0131 (web sunucusu, PHP, veritaban\u0131) nas\u0131l kuraca\u011f\u0131m\u0131z\u0131, Composer&#8217;\u0131 nas\u0131l y\u00fckleyece\u011fimizi ve basit bir CakePHP projesi olu\u015fturup, ilk veritaban\u0131 ba\u011flant\u0131s\u0131n\u0131 ve temel bir liste g\u00f6r\u00fcn\u00fcm\u00fcn\u00fc nas\u0131l yap\u0131land\u0131raca\u011f\u0131m\u0131z\u0131 \u00f6\u011freneceksiniz.<\/p>\n<h3>Neden CakePHP ve Neden Bir VPS?<\/h3>\n<p>Bir projeye ba\u015flarken teknoloji y\u0131\u011f\u0131n\u0131 se\u00e7imi \u00e7ok \u00f6nemlidir. CakePHP ve VPS kombinasyonunun size neden avantaj sa\u011flayaca\u011f\u0131n\u0131 daha yak\u0131ndan inceleyelim.<\/p>\n<h4>Neden CakePHP?<\/h4>\n<p>*   <strong>MVC Mimarisi:<\/strong> CakePHP, uygulaman\u0131z\u0131 Model (veri), View (g\u00f6r\u00fcn\u00fcm) ve Controller (i\u015f mant\u0131\u011f\u0131) katmanlar\u0131na ay\u0131rarak kodunuzu d\u00fczenli ve y\u00f6netilebilir k\u0131lar. Bu, b\u00fcy\u00fck projelerde geli\u015ftirme s\u00fcrecini kolayla\u015ft\u0131r\u0131r ve ekip \u00e7al\u0131\u015fmas\u0131n\u0131 destekler.<br \/>\n*   <strong>H\u0131zl\u0131 Geli\u015ftirme:<\/strong> &#8220;Convention over configuration&#8221; prensibi sayesinde, bir\u00e7ok ayar ve yap\u0131land\u0131rma \u00f6nceden belirlenmi\u015ftir. Bu, geli\u015ftiricilerin tekrar eden g\u00f6revlerle u\u011fra\u015fmak yerine do\u011frudan i\u015f mant\u0131\u011f\u0131na odaklanmas\u0131n\u0131 sa\u011flar. H\u0131zl\u0131 prototipleme ve MVP (Minimum Viable Product) geli\u015ftirmek i\u00e7in idealdir.<br \/>\n*   <strong>ORM (Object-Relational Mapping):<\/strong> CakePHP&#8217;nin g\u00fc\u00e7l\u00fc ORM&#8217;si, veritaban\u0131 tablolar\u0131n\u0131zla nesneler arac\u0131l\u0131\u011f\u0131yla etkile\u015fim kurman\u0131z\u0131 sa\u011flar. SQL sorgular\u0131 yazmak yerine PHP nesneleriyle \u00e7al\u0131\u015farak kodunuzu daha okunabilir ve g\u00fcvenli hale getirirsiniz.<br \/>\n*   <strong>G\u00fcvenlik \u00d6zellikleri:<\/strong> CSRF korumas\u0131, SQL enjeksiyonu \u00f6nleme, XSS filtreleme gibi yerle\u015fik g\u00fcvenlik \u00f6zellikleri sayesinde uygulaman\u0131z\u0131n temel g\u00fcvenlik ihtiya\u00e7lar\u0131 kar\u015f\u0131lan\u0131r.<br \/>\n*   <strong>Kapsaml\u0131 K\u00fct\u00fcphaneler ve Bile\u015fenler:<\/strong> Kimlik do\u011frulama, form do\u011frulama, e-posta g\u00f6nderme, oturum y\u00f6netimi gibi bir\u00e7ok yayg\u0131n g\u00f6rev i\u00e7in haz\u0131r bile\u015fenler ve yard\u0131mc\u0131lar sunar.<br \/>\n*   <strong>B\u00fcy\u00fck ve Aktif Topluluk:<\/strong> Kar\u015f\u0131la\u015ft\u0131\u011f\u0131n\u0131z sorunlar i\u00e7in kolayca yard\u0131m bulabilece\u011finiz geni\u015f bir geli\u015ftirici toplulu\u011fu ve iyi belgelenmi\u015f bir yap\u0131ya sahiptir.<\/p>\n<h4>Neden Bir VPS?<\/h4>\n<p>*   <strong>Tam Kontrol ve Root Eri\u015fimi:<\/strong> VPS, sunucunuzun i\u015fletim sistemi \u00fczerinde tam root eri\u015fimi sa\u011flar. Bu, istedi\u011finiz yaz\u0131l\u0131m\u0131 kurman\u0131za, \u00f6zel yap\u0131land\u0131rmalar yapman\u0131za ve sistem kaynaklar\u0131n\u0131 diledi\u011finiz gibi y\u00f6netmenize olanak tan\u0131r.<br \/>\n*   <strong>Esneklik ve \u00d6zelle\u015ftirme:<\/strong> Uygulaman\u0131z\u0131n \u00f6zel gereksinimlerine g\u00f6re sunucu ortam\u0131n\u0131z\u0131 (web sunucusu, PHP s\u00fcr\u00fcm\u00fc, veritaban\u0131 sistemi vb.) tamamen \u00f6zelle\u015ftirebilirsiniz. Payla\u015f\u0131ml\u0131 hosting&#8217;in getirdi\u011fi k\u0131s\u0131tlamalardan kurtulursunuz.<br \/>\n*   <strong>\u00d6l\u00e7eklenebilirlik:<\/strong> Uygulaman\u0131z b\u00fcy\u00fcd\u00fck\u00e7e, VPS kaynaklar\u0131n\u0131 (CPU, RAM, depolama) kolayca art\u0131rabilirsiniz. Bu, uygulaman\u0131z\u0131n performans\u0131n\u0131 ve kullan\u0131labilirli\u011fini koruman\u0131za yard\u0131mc\u0131 olur.<br \/>\n*   <strong>\u0130zole Ortam:<\/strong> VPS&#8217;iniz tamamen izole bir ortamda \u00e7al\u0131\u015f\u0131r. Di\u011fer kullan\u0131c\u0131lar\u0131n kaynak kullan\u0131m\u0131 veya g\u00fcvenlik sorunlar\u0131 sizin uygulaman\u0131z\u0131 etkilemez. Bu, daha y\u00fcksek performans ve g\u00fcvenlik anlam\u0131na gelir.<br \/>\n*   <strong>Maliyet Etkinli\u011fi:<\/strong> Ba\u015flang\u0131\u00e7ta payla\u015f\u0131ml\u0131 hosting&#8217;e g\u00f6re biraz daha pahal\u0131 g\u00f6r\u00fcnse de, uzun vadede sa\u011flad\u0131\u011f\u0131 esneklik, kontrol ve performans avantajlar\u0131 d\u00fc\u015f\u00fcn\u00fcld\u00fc\u011f\u00fcnde, orta ve b\u00fcy\u00fck \u00f6l\u00e7ekli projeler i\u00e7in daha maliyet etkin bir \u00e7\u00f6z\u00fcmd\u00fcr.<br \/>\n*   <strong>Geli\u015ftirici Dostu:<\/strong> Geli\u015ftiriciler i\u00e7in, bir VPS \u00fczerinde \u00e7al\u0131\u015fmak, da\u011f\u0131t\u0131m s\u00fcre\u00e7lerini \u00f6\u011frenmek, sunucu y\u00f6netimi becerilerini geli\u015ftirmek ve ger\u00e7ek d\u00fcnya ortamlar\u0131nda deneyim kazanmak i\u00e7in harika bir f\u0131rsatt\u0131r.<\/p>\n<h3>\u00d6n Gereksinimler<\/h3>\n<p>Bu makaledeki ad\u0131mlar\u0131 takip edebilmek i\u00e7in a\u015fa\u011f\u0131daki \u00f6n gereksinimlere sahip olman\u0131z \u00f6nerilir:<\/p>\n<p>*   <strong>Temel Linux Komut Bilgisi:<\/strong> SSH \u00fczerinden sunucuya ba\u011flanma, dizinler aras\u0131nda gezinme, dosya olu\u015fturma\/d\u00fczenleme ve temel paket y\u00f6netimi (<code>apt<\/code>) komutlar\u0131na a\u015final\u0131k.<br \/>\n*   <strong>SSH \u0130stemcisi:<\/strong> Windows i\u00e7in PuTTY veya WSL (Windows Subsystem for Linux), macOS\/Linux i\u00e7in yerle\u015fik Terminal.<br \/>\n*   <strong>Metin D\u00fczenleyici:<\/strong> Yerel bilgisayar\u0131n\u0131zda bir kod d\u00fczenleyici (VS Code, Sublime Text vb.).<br \/>\n*   <strong>Alan Ad\u0131 (\u0130ste\u011fe Ba\u011fl\u0131 ama \u00d6nerilir):<\/strong> Uygulaman\u0131za kolayca eri\u015fmek i\u00e7in bir alan ad\u0131 kullanmak daha profesyonel bir deneyim sunar. Yoksa IP adresi ile de devam edebilirsiniz.<br \/>\n*   <strong>Temel PHP ve MySQL Bilgisi:<\/strong> CakePHP&#8217;nin alt\u0131nda yatan teknolojilere dair temel bir anlay\u0131\u015f.<\/p>\n<h3>VPS Haz\u0131rl\u0131\u011f\u0131 ve Temel Kurulumlar<\/h3>\n<p>Bu b\u00f6l\u00fcmde, se\u00e7ti\u011finiz VPS sa\u011flay\u0131c\u0131s\u0131nda bir sunucu olu\u015fturmaktan, temel g\u00fcvenlik ayarlar\u0131n\u0131 yapmaya ve web sunucusu ile veritaban\u0131 sistemini kurmaya kadar olan ad\u0131mlar\u0131 ele alaca\u011f\u0131z.<\/p>\n<h4>VPS Se\u00e7imi ve \u0130lk Ad\u0131mlar<\/h4>\n<p>Piyasada DigitalOcean, Vultr, Linode, AWS EC2, Google Cloud gibi bir\u00e7ok pop\u00fcler VPS sa\u011flay\u0131c\u0131s\u0131 bulunmaktad\u0131r. Bu sa\u011flay\u0131c\u0131lar\u0131n hepsi benzer hizmetler sunar; se\u00e7im size ve b\u00fct\u00e7enize kalm\u0131\u015ft\u0131r. Bu makalede, yayg\u0131n olarak kullan\u0131lan <strong>Ubuntu 22.04 LTS<\/strong> i\u015fletim sistemini temel alaca\u011f\u0131z.<\/p>\n<p>1.  <strong>VPS Olu\u015fturma:<\/strong> Se\u00e7ti\u011finiz sa\u011flay\u0131c\u0131n\u0131n kontrol panelinden yeni bir VPS (veya &#8220;Droplet&#8221;, &#8220;Instance&#8221;) olu\u015fturun. \u0130\u015fletim sistemi olarak <strong>Ubuntu 22.04 LTS<\/strong>&#8216;i se\u00e7in. CPU, RAM ve depolama alan\u0131 ihtiya\u00e7lar\u0131n\u0131za g\u00f6re belirleyin; ba\u015flang\u0131\u00e7 i\u00e7in 1 CPU, 1GB RAM ve 25GB depolama \u00e7o\u011fu k\u00fc\u00e7\u00fck uygulama i\u00e7in yeterli olacakt\u0131r.<br \/>\n2.  <strong>SSH ile Ba\u011flant\u0131:<\/strong> VPS&#8217;iniz olu\u015fturulduktan sonra, sa\u011flay\u0131c\u0131n\u0131z size sunucunun IP adresini ve root parolas\u0131n\u0131 (veya SSH anahtar\u0131n\u0131) sa\u011flayacakt\u0131r. SSH istemcinizi kullanarak sunucuya ba\u011flan\u0131n:<\/p>\n<pre><code class=\"language-bash\">ssh root@SUNUCU_IP_ADRESINIZ<\/code><\/pre>\n<p>    \u0130lk ba\u011flant\u0131da parolan\u0131z\u0131 girmeniz istenecektir.<\/p>\n<h4>Temel G\u00fcvenlik Ayarlar\u0131<\/h4>\n<p>Sunucunuzu g\u00fcvenli hale getirmek, herhangi bir web uygulamas\u0131n\u0131 yay\u0131nlamadan \u00f6nce at\u0131lmas\u0131 gereken en \u00f6nemli ad\u0131mlardan biridir.<\/p>\n<p>1.  <strong>Yeni Bir <code>sudo<\/code> Kullan\u0131c\u0131s\u0131 Olu\u015fturma:<\/strong> <code>root<\/code> kullan\u0131c\u0131s\u0131 ile s\u00fcrekli \u00e7al\u0131\u015fmak risklidir. Yeni bir kullan\u0131c\u0131 olu\u015fturup ona <code>sudo<\/code> yetkisi verelim:<\/p>\n<pre><code class=\"language-bash\">adduser kullanici_adiniz\n    usermod -aG sudo kullanici_adiniz<\/code><\/pre>\n<p>    \u015eimdi bu yeni kullan\u0131c\u0131 ile giri\u015f yapabilir ve <code>sudo<\/code> komutunu kullanarak root yetkisi gerektiren i\u015flemleri ger\u00e7ekle\u015ftirebilirsiniz. <code>exit<\/code> komutu ile root oturumundan \u00e7\u0131k\u0131n ve yeni kullan\u0131c\u0131 ile tekrar ba\u011flan\u0131n:<\/p>\n<pre><code class=\"language-bash\">ssh kullanici_adiniz@SUNUCU_IP_ADRESINIZ<\/code><\/pre>\n<p>2.  <strong>SSH Anahtar Tabanl\u0131 Kimlik Do\u011frulama (\u00d6nerilir):<\/strong> Parola ile giri\u015f yerine SSH anahtarlar\u0131 kullanmak \u00e7ok daha g\u00fcvenlidir.<br \/>\n    *   Yerel makinenizde bir SSH anahtar \u00e7ifti olu\u015fturun (e\u011fer yoksa): <code>ssh-keygen -t rsa -b 4096<\/code><br \/>\n    *   Genel anahtar\u0131n\u0131z\u0131 (<code>~\/.ssh\/id_rsa.pub<\/code>) sunucunuza kopyalay\u0131n:<\/p>\n<pre><code class=\"language-bash\">ssh-copy-id kullanici_adiniz@SUNUCU_IP_ADRESINIZ<\/code><\/pre>\n<p>    *   Sunucuda SSH yap\u0131land\u0131rma dosyas\u0131n\u0131 d\u00fczenleyin (<code>\/etc\/ssh\/sshd_config<\/code>) ve parola ile giri\u015fi devre d\u0131\u015f\u0131 b\u0131rak\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo nano \/etc\/ssh\/sshd_config<\/code><\/pre>\n<p>        <code>PasswordAuthentication yes<\/code> sat\u0131r\u0131n\u0131 bulun ve <code>PasswordAuthentication no<\/code> olarak de\u011fi\u015ftirin. Ayr\u0131ca <code>PermitRootLogin yes<\/code> sat\u0131r\u0131n\u0131 <code>PermitRootLogin no<\/code> olarak de\u011fi\u015ftirerek root kullan\u0131c\u0131s\u0131n\u0131n do\u011frudan SSH ile ba\u011flanmas\u0131n\u0131 engelleyin.<br \/>\n    *   SSH servisini yeniden ba\u015flat\u0131n: <code>sudo systemctl restart sshd<\/code><br \/>\n    *   Yeni bir terminalden anahtar\u0131n\u0131zla ba\u011flanmay\u0131 deneyin. Ba\u015far\u0131l\u0131 olursa, eski terminal oturumunu kapatabilirsiniz.<br \/>\n3.  <strong>G\u00fcvenlik Duvar\u0131 (UFW) Kurulumu:<\/strong> UFW (Uncomplicated Firewall), Ubuntu&#8217;da g\u00fcvenlik duvar\u0131n\u0131 y\u00f6netmeyi kolayla\u015ft\u0131r\u0131r.<\/p>\n<pre><code class=\"language-bash\">sudo apt update\n    sudo apt install ufw\n    sudo ufw allow OpenSSH         # SSH ba\u011flant\u0131s\u0131na izin ver\n    sudo ufw allow 'Nginx HTTP'    # Nginx HTTP (80) portuna izin ver (Nginx kurduktan sonra)\n    # sudo ufw allow 'Nginx HTTPS' # Nginx HTTPS (443) portuna izin ver (SSL kurduktan sonra)\n    sudo ufw enable                # G\u00fcvenlik duvar\u0131n\u0131 etkinle\u015ftir\n    sudo ufw status                # Durumu kontrol et<\/code><\/pre>\n<h4>Web Sunucusu, PHP ve Veritaban\u0131 Kurulumu (LEMP Stack)<\/h4>\n<p>Bu makalede, pop\u00fcler ve performansl\u0131 bir web y\u0131\u011f\u0131n\u0131 olan LEMP (Linux, Nginx, MySQL\/MariaDB, PHP) stack&#8217;ini kullanaca\u011f\u0131z.<\/p>\n<p>1.  <strong>Nginx Kurulumu:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo apt update\n    sudo apt install nginx\n    sudo systemctl enable nginx\n    sudo systemctl start nginx<\/code><\/pre>\n<p>    Taray\u0131c\u0131n\u0131zdan sunucunuzun IP adresine gitti\u011finizde &#8220;Welcome to Nginx!&#8221; sayfas\u0131n\u0131 g\u00f6rmelisiniz.<br \/>\n2.  <strong>MySQL\/MariaDB Kurulumu:<\/strong> MariaDB, MySQL&#8217;in topluluk taraf\u0131ndan geli\u015ftirilen bir fork&#8217;udur ve tamamen uyumludur.<\/p>\n<pre><code class=\"language-bash\">sudo apt install mariadb-server mariadb-client\n    sudo systemctl enable mariadb\n    sudo systemctl start mariadb<\/code><\/pre>\n<p>    G\u00fcvenli kurulum beti\u011fini \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo mysql_secure_installation<\/code><\/pre>\n<p>    Bu betik sizden root parolas\u0131 belirlemenizi, anonim kullan\u0131c\u0131lar\u0131 kald\u0131rman\u0131z\u0131, root&#8217;un uzaktan giri\u015fini engellemenizi ve test veritaban\u0131n\u0131 kald\u0131rman\u0131z\u0131 isteyecektir. G\u00fcvenli\u011fi art\u0131rmak i\u00e7in t\u00fcm sorulara <code>Y<\/code> (Yes) ile yan\u0131t vermeniz \u00f6nerilir.<br \/>\n3.  <strong>PHP ve PHP-FPM Kurulumu:<\/strong> CakePHP bir PHP framework&#8217;\u00fc oldu\u011fu i\u00e7in PHP&#8217;ye ihtiyac\u0131m\u0131z var. Nginx ile birlikte PHP-FPM (FastCGI Process Manager) kullanaca\u011f\u0131z.<\/p>\n<pre><code class=\"language-bash\">sudo apt install php-fpm php-mysql php-cli php-mbstring php-xml php-zip php-gd php-curl\n    sudo systemctl enable php8.1-fpm # Ubuntu 22.04 varsay\u0131lan\u0131 PHP 8.1'dir\n    sudo systemctl start php8.1-fpm<\/code><\/pre>\n<p>    Gerekirse <code>php.ini<\/code> dosyas\u0131nda baz\u0131 ayarlar\u0131 d\u00fczenleyebilirsiniz. \u00d6zellikle <code>upload_max_filesize<\/code> ve <code>post_max_size<\/code> gibi de\u011ferleri ihtiyac\u0131n\u0131za g\u00f6re art\u0131rabilirsiniz.<\/p>\n<pre><code class=\"language-bash\">sudo nano \/etc\/php\/8.1\/fpm\/php.ini<\/code><\/pre>\n<p>    De\u011fi\u015fiklik yapt\u0131ktan sonra PHP-FPM&#8217;i yeniden ba\u015flat\u0131n: <code>sudo systemctl restart php8.1-fpm<\/code>.<\/p>\n<h4>Nginx Konfig\u00fcrasyonu<\/h4>\n<p>\u015eimdi CakePHP projemizi bar\u0131nd\u0131racak bir Nginx sanal host (server block) olu\u015ftural\u0131m.<\/p>\n<p>1.  <strong>Site Dizini Olu\u015fturma:<\/strong> CakePHP projemizi bar\u0131nd\u0131rmak i\u00e7in bir dizin olu\u015ftural\u0131m. <code>alanadiniz.com<\/code> yerine kendi alan ad\u0131n\u0131z\u0131 veya projenizin ad\u0131n\u0131 kullan\u0131n.<\/p>\n<pre><code class=\"language-bash\">sudo mkdir -p \/var\/www\/alanadiniz.com\/public_html\n    sudo chown -R $USER:$USER \/var\/www\/alanadiniz.com\/public_html\n    sudo chmod -R 755 \/var\/www\/alanadiniz.com<\/code><\/pre>\n<p>2.  <strong>Nginx Server Block Olu\u015fturma:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo nano \/etc\/nginx\/sites-available\/alanadiniz.com<\/code><\/pre>\n<p>    A\u015fa\u011f\u0131daki i\u00e7eri\u011fi yap\u0131\u015ft\u0131r\u0131n ve <code>alanadiniz.com<\/code> k\u0131s\u0131mlar\u0131n\u0131 kendi alan ad\u0131n\u0131zla de\u011fi\u015ftirin:<\/p>\n<pre><code class=\"language-nginx\">server {\n        listen 80;\n        server_name alanadiniz.com www.alanadiniz.com; # Alan ad\u0131n\u0131z\u0131 buraya yaz\u0131n\n\n        root \/var\/www\/alanadiniz.com\/public_html\/webroot; # CakePHP webroot dizini\n\n        index index.php index.html index.htm;\n\n        charset utf-8;\n\n        location \/ {\n            try_files $uri $uri\/ \/index.php?$args;\n        }\n\n        location ~ \\.php$ {\n            include snippets\/fastcgi-php.conf;\n            fastcgi_pass unix:\/run\/php\/php8.1-fpm.sock; # PHP s\u00fcr\u00fcm\u00fcn\u00fcze g\u00f6re kontrol edin\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        # Cache static files\n        location ~* \\.(jpg|jpeg|gif|png|css|js|ico|xml)$ {\n            expires 5d;\n        }\n    }<\/code><\/pre>\n<p>3.  <strong>Server Block&#8217;u Etkinle\u015ftirme:<\/strong> Olu\u015fturdu\u011funuz yap\u0131land\u0131rma dosyas\u0131n\u0131 <code>sites-enabled<\/code> dizinine sembolik link ile ba\u011flay\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo ln -s \/etc\/nginx\/sites-available\/alanadiniz.com \/etc\/nginx\/sites-enabled\/<\/code><\/pre>\n<p>4.  <strong>Nginx Yap\u0131land\u0131rmas\u0131n\u0131 Test Etme ve Yeniden Ba\u015flatma:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo nginx -t\n    sudo systemctl restart nginx<\/code><\/pre>\n<p>    <code>nginx -t<\/code> komutu yap\u0131land\u0131rma dosyan\u0131zda hata olup olmad\u0131\u011f\u0131n\u0131 kontrol eder. E\u011fer &#8220;test is successful&#8221; mesaj\u0131n\u0131 g\u00f6r\u00fcrseniz, Nginx&#8217;i yeniden ba\u015flatabilirsiniz.<\/p>\n<h3>Composer Kurulumu<\/h3>\n<p>Composer, PHP i\u00e7in bir ba\u011f\u0131ml\u0131l\u0131k y\u00f6neticisidir. CakePHP gibi modern PHP framework&#8217;leri, ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 y\u00f6netmek i\u00e7in Composer&#8217;\u0131 kullan\u0131r.<\/p>\n<p>1.  <strong>Composer&#8217;\u0131 \u0130ndirme ve Kurma:<\/strong><\/p>\n<pre><code class=\"language-bash\">cd ~\n    curl -sS https:\/\/getcomposer.org\/installer -o composer-setup.php\n    sudo php composer-setup.php --install-dir=\/usr\/local\/bin --filename=composer\n    rm composer-setup.php<\/code><\/pre>\n<p>    Bu komutlar Composer&#8217;\u0131 indirir, <code>\/usr\/local\/bin<\/code> dizinine <code>composer<\/code> ad\u0131yla kurar ve indirdi\u011fimiz kurulum dosyas\u0131n\u0131 siler. Art\u0131k <code>composer<\/code> komutunu global olarak kullanabilirsiniz.<br \/>\n2.  <strong>Composer&#8217;\u0131n \u00c7al\u0131\u015ft\u0131\u011f\u0131n\u0131 Do\u011frulama:<\/strong><\/p>\n<pre><code class=\"language-bash\">composer --version<\/code><\/pre>\n<p>    Composer&#8217;\u0131n s\u00fcr\u00fcm numaras\u0131n\u0131 g\u00f6rmelisiniz.<\/p>\n<h3>CakePHP Projesi Olu\u015fturma<\/h3>\n<p>\u015eimdi s\u0131ra geldi CakePHP projemizi olu\u015fturmaya. Bunu, az \u00f6nce Nginx i\u00e7in yap\u0131land\u0131rd\u0131\u011f\u0131m\u0131z dizinin i\u00e7ine yapaca\u011f\u0131z.<\/p>\n<p>1.  <strong>Proje Dizine Gitme:<\/strong><\/p>\n<pre><code class=\"language-bash\">cd \/var\/www\/alanadiniz.com\/public_html<\/code><\/pre>\n<p>2.  <strong>Yeni Bir CakePHP Projesi Olu\u015fturma:<\/strong><\/p>\n<pre><code class=\"language-bash\">composer create-project --prefer-dist cakephp\/app:^4.0 .<\/code><\/pre>\n<p>    Bu komut, mevcut dizine (<code>.<\/code>) CakePHP 4.x s\u00fcr\u00fcm\u00fcn\u00fcn en son stabil versiyonunu kuracakt\u0131r. Kurulum biraz zaman alabilir.<br \/>\n3.  <strong>Dizin \u0130zinlerini Ayarlama:<\/strong> CakePHP&#8217;nin <code>tmp<\/code> ve <code>logs<\/code> dizinlerine yazma izni olmas\u0131 gerekir. Nginx&#8217;in \u00e7al\u0131\u015ft\u0131\u011f\u0131 kullan\u0131c\u0131ya (genellikle <code>www-data<\/code>) bu izinleri verelim.<\/p>\n<pre><code class=\"language-bash\">sudo chown -R www-data:www-data \/var\/www\/alanadiniz.com\/public_html\/tmp\n    sudo chown -R www-data:www-data \/var\/www\/alanadiniz.com\/public_html\/logs\n    sudo chmod -R 775 \/var\/www\/alanadiniz.com\/public_html\/tmp\n    sudo chmod -R 775 \/var\/www\/alanadiniz.com\/public_html\/logs<\/code><\/pre>\n<p>    Ayr\u0131ca <code>config<\/code> dizini i\u00e7inde <code>app_local.php<\/code> dosyas\u0131n\u0131n da do\u011fru izinlere sahip oldu\u011fundan emin olun.<br \/>\n4.  <strong>Uygulamay\u0131 Test Etme:<\/strong> Taray\u0131c\u0131n\u0131zdan <code>http:\/\/alanadiniz.com<\/code> adresine gitti\u011finizde CakePHP&#8217;nin varsay\u0131lan ho\u015f geldiniz sayfas\u0131n\u0131 g\u00f6rmelisiniz. E\u011fer bir hata ile kar\u015f\u0131la\u015f\u0131rsan\u0131z (\u00f6rne\u011fin izin hatas\u0131), yukar\u0131daki izin ad\u0131mlar\u0131n\u0131 kontrol edin. Sayfan\u0131n alt\u0131nda &#8220;Database is not connected&#8221; gibi bir uyar\u0131 g\u00f6rmeniz normaldir, \u00e7\u00fcnk\u00fc hen\u00fcz veritaban\u0131 ba\u011flant\u0131s\u0131n\u0131 yap\u0131land\u0131rmad\u0131k.<\/p>\n<h3>CakePHP Proje Yap\u0131s\u0131 (K\u0131sa Bak\u0131\u015f)<\/h3>\n<p>CakePHP projesini kurduktan sonra, dizin yap\u0131s\u0131na k\u0131saca g\u00f6z atal\u0131m:<\/p>\n<p>*   <strong><code>bin\/<\/code><\/strong>: CakePHP komut sat\u0131r\u0131 ara\u00e7lar\u0131n\u0131 i\u00e7erir (\u00f6rne\u011fin <code>bin\/cake<\/code>).<br \/>\n*   <strong><code>config\/<\/code><\/strong>: Uygulaman\u0131n yap\u0131land\u0131rma dosyalar\u0131n\u0131 bar\u0131nd\u0131r\u0131r (veritaban\u0131, rota tan\u0131mlar\u0131 vb.). \u00d6zellikle <code>app.php<\/code> ve <code>app_local.php<\/code> \u00f6nemlidir.<br \/>\n*   <strong><code>plugins\/<\/code><\/strong>: Uygulaman\u0131za ekledi\u011finiz eklentiler burada bulunur.<br \/>\n*   <strong><code>src\/<\/code><\/strong>: Uygulaman\u0131z\u0131n ana kodunu i\u00e7erir. Model, View, Controller dosyalar\u0131 buradad\u0131r.<br \/>\n    *   <code>src\/Controller\/<\/code>: Kontrolc\u00fc s\u0131n\u0131flar\u0131.<br \/>\n    *   <code>src\/Model\/<\/code>: Model s\u0131n\u0131flar\u0131 (tablo ve varl\u0131k s\u0131n\u0131flar\u0131).<br \/>\n    *   <code>src\/View\/<\/code>: G\u00f6r\u00fcn\u00fcm s\u0131n\u0131flar\u0131 (art\u0131k \u00e7ok kullan\u0131lmaz, do\u011frudan \u015fablonlar tercih edilir).<br \/>\n*   <strong><code>templates\/<\/code><\/strong>: Uygulaman\u0131z\u0131n g\u00f6r\u00fcn\u00fcm \u015fablonlar\u0131 (<code>.php<\/code> dosyalar\u0131) burada bulunur.<br \/>\n*   <strong><code>tmp\/<\/code><\/strong>: CakePHP taraf\u0131ndan ge\u00e7ici dosyalar\u0131n (cache, oturumlar) sakland\u0131\u011f\u0131 dizin. Yazma izinleri \u00f6nemlidir.<br \/>\n*   <strong><code>logs\/<\/code><\/strong>: Uygulama loglar\u0131 burada tutulur. Yazma izinleri \u00f6nemlidir.<br \/>\n*   <strong><code>vendor\/<\/code><\/strong>: Composer taraf\u0131ndan y\u00f6netilen t\u00fcm \u00fc\u00e7\u00fcnc\u00fc taraf k\u00fct\u00fcphaneler burada bulunur.<br \/>\n*   <strong><code>webroot\/<\/code><\/strong>: Uygulaman\u0131z\u0131n genel eri\u015fime a\u00e7\u0131k olan tek dizinidir. T\u00fcm statik dosyalar (CSS, JS, resimler) ve <code>index.php<\/code> buradad\u0131r. Nginx yap\u0131land\u0131rmam\u0131zda <code>root<\/code> dizinini buraya i\u015faret etmi\u015ftik.<\/p>\n<h3>Veritaban\u0131 Yap\u0131land\u0131rmas\u0131<\/h3>\n<p>CakePHP&#8217;nin veritaban\u0131 ile etkile\u015fim kurabilmesi i\u00e7in ba\u011flant\u0131 bilgilerini yap\u0131land\u0131rmam\u0131z gerekiyor.<\/p>\n<h4>MySQL\/MariaDB&#8217;de Veritaban\u0131 Olu\u015fturma<\/h4>\n<p>\u00d6ncelikle sunucunuzda CakePHP uygulamam\u0131z i\u00e7in bir veritaban\u0131 ve kullan\u0131c\u0131 olu\u015ftural\u0131m.<\/p>\n<p>1.  <strong>MySQL\/MariaDB Konsoluna Giri\u015f:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo mysql -u root -p<\/code><\/pre>\n<p>    <code>mysql_secure_installation<\/code> s\u0131ras\u0131nda belirledi\u011finiz root parolas\u0131n\u0131 girin.<br \/>\n2.  <strong>Veritaban\u0131 ve Kullan\u0131c\u0131 Olu\u015fturma:<\/strong><\/p>\n<pre><code class=\"language-sql\">CREATE DATABASE my_cake_app_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\n    CREATE USER 'cake_user'@'localhost' IDENTIFIED BY 'GUCLU_PAROLA';\n    GRANT ALL PRIVILEGES ON my_cake_app_db.* TO 'cake_user'@'localhost';\n    FLUSH PRIVILEGES;\n    EXIT;<\/code><\/pre>\n<p>    *   <code>my_cake_app_db<\/code>: Veritaban\u0131n\u0131z\u0131n ad\u0131.<br \/>\n    *   <code>cake_user<\/code>: Veritaban\u0131 kullan\u0131c\u0131n\u0131z\u0131n ad\u0131.<br \/>\n    *   <code>GUCLU_PAROLA<\/code>: Bu kullan\u0131c\u0131 i\u00e7in g\u00fc\u00e7l\u00fc bir parola belirleyin.<\/p>\n<h4>CakePHP&#8217;de Veritaban\u0131 Ba\u011flant\u0131s\u0131<\/h4>\n<p>CakePHP&#8217;nin veritaban\u0131 yap\u0131land\u0131rmas\u0131 <code>config\/app.php<\/code> dosyas\u0131nda bulunur. Ancak, yerel ayarlara \u00f6zel de\u011fi\u015fiklikleri <code>config\/app_local.php<\/code> dosyas\u0131na yapman\u0131z \u00f6nerilir. Bu dosya, <code>app.php<\/code>&#8216;deki varsay\u0131lanlar\u0131 ge\u00e7ersiz k\u0131lar ve versiyon kontrol sistemine (Git gibi) eklenmemesi gereken hassas bilgileri (veritaban\u0131 parolalar\u0131 gibi) saklamak i\u00e7in idealdir.<\/p>\n<p>1.  <strong><code>app_local.php<\/code> Dosyas\u0131n\u0131 D\u00fczenleme:<\/strong><\/p>\n<pre><code class=\"language-bash\">nano \/var\/www\/alanadiniz.com\/public_html\/config\/app_local.php<\/code><\/pre>\n<p>    <code>Datasources<\/code> b\u00f6l\u00fcm\u00fcn\u00fc bulun ve a\u015fa\u011f\u0131daki gibi d\u00fczenleyin (kendi veritaban\u0131 bilgilerinizle de\u011fi\u015ftirin):<\/p>\n<pre><code class=\"language-php\">'Datasources' => [\n        'default' => [\n            'className' => 'Cake\\Database\\Connection',\n            'driver' => 'Cake\\Database\\Driver\\Mysql',\n            'persistent' => false,\n            'host' => 'localhost',\n            'username' => 'cake_user', \/\/ Olu\u015fturdu\u011funuz kullan\u0131c\u0131 ad\u0131\n            'password' => 'GUCLU_PAROLA', \/\/ Olu\u015fturdu\u011funuz parola\n            'database' => 'my_cake_app_db', \/\/ Olu\u015fturdu\u011funuz veritaban\u0131 ad\u0131\n            'encoding' => 'utf8mb4',\n            'timezone' => 'UTC',\n            'flags' => [],\n            'cacheMetadata' => true,\n            'log' => false,\n\n            \/<em><\/em>\n             * Set spatial database type to <code>MySqlSpatial<\/code> to enable spatial queries.\n             *\n             * Note: spatial queries are not supported on Sqlite.\n             *\/\n            \/\/'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'],\n        ],\n\n        \/\/ ... di\u011fer ba\u011flant\u0131lar (test, vb.)\n    ],<\/code><\/pre>\n<p>    Dosyay\u0131 kaydedin ve kapat\u0131n (Ctrl+X, Y, Enter).<br \/>\n2.  <strong>Veritaban\u0131 Ba\u011flant\u0131s\u0131n\u0131 Kontrol Etme:<\/strong> Taray\u0131c\u0131n\u0131zdan tekrar CakePHP ho\u015f geldiniz sayfas\u0131na gidin. Art\u0131k &#8220;Database is not connected&#8221; uyar\u0131s\u0131n\u0131n kayboldu\u011funu g\u00f6rmelisiniz. Bu, CakePHP&#8217;nin veritaban\u0131na ba\u015far\u0131yla ba\u011fland\u0131\u011f\u0131 anlam\u0131na gelir.<\/p>\n<h3>Basit Bir Uygulama Geli\u015ftirme (G\u00f6rev Listesi \u00d6rne\u011fi &#8211; Listeleme K\u0131sm\u0131)<\/h3>\n<p>\u015eimdi CakePHP&#8217;nin MVC yap\u0131s\u0131n\u0131 kullanarak basit bir &#8220;G\u00f6rev Listesi&#8221; uygulamas\u0131n\u0131n listeleme k\u0131sm\u0131n\u0131 olu\u015ftural\u0131m.<\/p>\n<h4>Veritaban\u0131 Tablosu Olu\u015fturma<\/h4>\n<p>Uygulamam\u0131z i\u00e7in <code>tasks<\/code> ad\u0131nda bir tablo olu\u015ftural\u0131m.<\/p>\n<p>1.  <strong>MySQL\/MariaDB Konsoluna Giri\u015f:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo mysql -u cake_user -p my_cake_app_db<\/code><\/pre>\n<p>    <code>cake_user<\/code> i\u00e7in belirledi\u011finiz parolay\u0131 girin.<br \/>\n2.  <strong><code>tasks<\/code> Tablosunu Olu\u015fturma:<\/strong><\/p>\n<pre><code class=\"language-sql\">CREATE TABLE tasks (\n        id INT AUTO_INCREMENT PRIMARY KEY,\n        title VARCHAR(255) NOT NULL,\n        description TEXT,\n        status ENUM('pending', 'completed') DEFAULT 'pending',\n        created DATETIME DEFAULT CURRENT_TIMESTAMP,\n        modified DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP\n    );\n\n    INSERT INTO tasks (title, description, status) VALUES\n    ('CakePHP Kurulumu', 'VPS \u00fczerinde CakePHP kurulumunu tamamla.', 'completed'),\n    ('\u0130lk Uygulamay\u0131 Geli\u015ftir', 'G\u00f6rev listesi uygulamas\u0131n\u0131 olu\u015ftur.', 'pending');<\/code><\/pre>\n<p>    <code>EXIT;<\/code> ile konsoldan \u00e7\u0131k\u0131n.<\/p>\n<h4>CakePHP Model (Table) Olu\u015fturma<\/h4>\n<p>CakePHP&#8217;de her veritaban\u0131 tablosu i\u00e7in bir &#8220;Table&#8221; s\u0131n\u0131f\u0131 bulunur. Bu s\u0131n\u0131f, tabloyla etkile\u015fimi y\u00f6netir.<\/p>\n<p>1.  <strong>Table S\u0131n\u0131f\u0131n\u0131 Olu\u015fturma:<\/strong> CakePHP&#8217;nin <code>bake<\/code> komutu ile bunu kolayca yapabiliriz:<\/p>\n<pre><code class=\"language-bash\">cd \/var\/www\/alanadiniz.com\/public_html\n    bin\/cake bake model Tasks<\/code><\/pre>\n<p>    Bu komut, <code>src\/Model\/Table\/TasksTable.php<\/code> dosyas\u0131n\u0131 olu\u015fturacakt\u0131r.<br \/>\n    <strong><code>src\/Model\/Table\/TasksTable.php<\/code><\/strong> i\u00e7eri\u011fi (varsay\u0131lan olarak \u015f\u00f6yle olacakt\u0131r):<\/p>\n<pre><code class=\"language-php\"><?php\n    declare(strict_types=1);\n\n    namespace App\\Model\\Table;\n\n    use Cake\\ORM\\Query;\n    use Cake\\ORM\\RulesChecker;\n    use Cake\\ORM\\Table;\n    use Cake\\Validation\\Validator;\n\n    class TasksTable extends Table\n    {\n        public function initialize(array $config): void\n        {\n            parent::initialize($config);\n\n            $this->setTable('tasks');\n            $this->setDisplayField('title');\n            $this->setPrimaryKey('id');\n\n            $this->addBehavior('Timestamp'); \/\/ created ve modified alanlar\u0131n\u0131 otomatik y\u00f6netir\n        }\n\n        public function validationDefault(Validator $validator): Validator\n        {\n            $validator\n                ->integer('id')\n                ->allowEmptyString('id', null, 'create');\n\n            $validator\n                ->scalar('title')\n                ->maxLength('title', 255)\n                ->requirePresence('title', 'create')\n                ->notEmptyString('title');\n\n            $validator\n                ->scalar('description')\n                ->allowEmptyString('description');\n\n            $validator\n                ->scalar('status')\n                ->requirePresence('status', 'create')\n                ->notEmptyString('status');\n\n            return $validator;\n        }\n\n        public function buildRules(RulesChecker $rules): RulesChecker\n        {\n            \/\/ Add rules here if needed\n            return $rules;\n        }\n    }<\/code><\/pre>\n<p>    <code>initialize()<\/code> metodu, tablonun ad\u0131n\u0131, birincil anahtar\u0131n\u0131 ve <code>Timestamp<\/code> davran\u0131\u015f\u0131n\u0131 (created ve modified alanlar\u0131n\u0131 otomatik doldurmak i\u00e7in) ayarlar. <code>validationDefault()<\/code> ise veri do\u011frulama kurallar\u0131n\u0131 i\u00e7erir.<\/p>\n<h4>CakePHP Controller Olu\u015fturma<\/h4>\n<p>Controller, kullan\u0131c\u0131 isteklerini i\u015fler, model ile etkile\u015fime girer ve g\u00f6r\u00fcn\u00fcm\u00fcn hangi veriyi g\u00f6sterece\u011fini belirler.<\/p>\n<p>1.  <strong>Controller S\u0131n\u0131f\u0131n\u0131 Olu\u015fturma:<\/strong> Yine <code>bake<\/code> komutunu kullanabiliriz:<\/p>\n<pre><code class=\"language-bash\">bin\/cake bake controller Tasks<\/code><\/pre>\n<p>    Bu komut <code>src\/Controller\/TasksController.php<\/code> dosyas\u0131n\u0131 olu\u015fturacakt\u0131r.<br \/>\n2.  <strong><code>index()<\/code> Aksiyonunu D\u00fczenleme:<\/strong> <code>TasksController.php<\/code> dosyas\u0131n\u0131 a\u00e7\u0131n ve <code>index()<\/code> metodunu a\u015fa\u011f\u0131daki gibi d\u00fczenleyin:<br \/>\n    <strong><code>src\/Controller\/TasksController.php<\/code><\/strong><\/p>\n<pre><code class=\"language-php\"><?php\n    declare(strict_types=1);\n\n    namespace App\\Controller;\n\n    use Cake\\ORM\\TableRegistry; \/\/ TableRegistry'i kullanmak i\u00e7in\n\n    class TasksController extends AppController\n    {\n        \/<em><\/em>\n         * Index method\n         *\n         * @return \\Cake\\Http\\Response|null|void Renders view\n         *\/\n        public function index()\n        {\n            \/\/ TasksTable'a eri\u015fim\n            $tasksTable = TableRegistry::getTableLocator()->get('Tasks');\n\n            \/\/ T\u00fcm g\u00f6revleri veritaban\u0131ndan \u00e7ekme\n            $tasks = $tasksTable->find('all')->toArray();\n\n            \/\/ G\u00f6revleri g\u00f6r\u00fcn\u00fcm dosyas\u0131na g\u00f6nderme\n            $this->set(compact('tasks'));\n        }\n    }<\/code><\/pre>\n<p>    Burada, <code>TableRegistry::getTableLocator()->get('Tasks')<\/code> ile <code>TasksTable<\/code> modelimize eri\u015fiyoruz. Ard\u0131ndan <code>find('all')<\/code> metodu ile t\u00fcm g\u00f6revleri \u00e7ekip <code>$tasks<\/code> de\u011fi\u015fkenine at\u0131yoruz. Son olarak, <code>set(compact('tasks'))<\/code> ile bu veriyi g\u00f6r\u00fcn\u00fcm dosyas\u0131na iletiyoruz.<\/p>\n<h4>CakePHP View Olu\u015fturma<\/h4>\n<p>View, kullan\u0131c\u0131n\u0131n g\u00f6rd\u00fc\u011f\u00fc HTML \u00e7\u0131kt\u0131s\u0131n\u0131 \u00fcretir. Controller&#8217;dan gelen veriyi kullanarak dinamik i\u00e7erik olu\u015fturur.<\/p>\n<p>1.  <strong>View Dizini ve Dosyas\u0131 Olu\u015fturma:<\/strong> CakePHP, controller&#8217;\u0131n ad\u0131na g\u00f6re otomatik olarak bir dizin ve aksiyonun ad\u0131na g\u00f6re bir dosya bekler.<\/p>\n<pre><code class=\"language-bash\">mkdir -p \/var\/www\/alanadiniz.com\/public_html\/templates\/Tasks\n    nano \/var\/www\/alanadiniz.com\/public_html\/templates\/Tasks\/index.php<\/code><\/pre>\n<p>2.  <strong><code>index.php<\/code> \u0130\u00e7eri\u011fi:<\/strong> A\u015fa\u011f\u0131daki HTML ve PHP kodunu yap\u0131\u015ft\u0131r\u0131n:<br \/>\n    <strong><code>templates\/Tasks\/index.php<\/code><\/strong><\/p>\n<pre><code class=\"language-php\"><?php\n    \/<em><\/em>\n     * @var \\App\\View\\AppView $this\n     * @var \\App\\Model\\Entity\\Task[]|\\Cake\\Collection\\CollectionInterface $tasks\n     *\/\n    $this->assign('title', 'G\u00f6rev Listesi');\n    ?>\n    <div class=\"tasks index content\">\n        <h3><?= __('G\u00f6revler') ?><\/h3>\n        <div class=\"table-responsive\">\n            <table>\n                <thead>\n                    <tr>\n                        <th><?= $this->Paginator->sort('id') ?><\/th>\n                        <th><?= $this->Paginator->sort('title', __('Ba\u015fl\u0131k')) ?><\/th>\n                        <th><?= $this->Paginator->sort('status', __('Durum')) ?><\/th>\n                        <th><?= $this->Paginator->sort('created', __('Olu\u015fturulma')) ?><\/th>\n                        <th class=\"actions\"><?= __('Aksiyonlar') ?><\/th>\n                    <\/tr>\n                <\/thead>\n                <tbody>\n                    <?php foreach ($tasks as $task): ?>\n                    <tr>\n                        <td><?= $this->Number->format($task->id) ?><\/td>\n                        <td><?= h($task->title) ?><\/td>\n                        <td><?= h($task->status) ?><\/td>\n                        <td><?= h($task->created->format('Y-m-d H:i:s')) ?><\/td>\n                        <td class=\"actions\">\n                            <!-- \u015eimdilik bo\u015f, B\u00f6l\u00fcm 2'de detay ve d\u00fczenleme eklenecek -->\n                            <?= $this->Html->link(__('G\u00f6r\u00fcnt\u00fcle'), ['action' => 'view', $task->id]) ?>\n                        <\/td>\n                    <\/tr>\n                    <?php endforeach; ?>\n                <\/tbody>\n            <\/table>\n        <\/div>\n    <\/div><\/code><\/pre>\n<p>    Bu \u015fablon, controller&#8217;dan gelen <code>$tasks<\/code> dizisini d\u00f6ng\u00fcye sokar ve her bir g\u00f6revin ID&#8217;sini, ba\u015fl\u0131\u011f\u0131n\u0131, durumunu ve olu\u015fturulma tarihini bir HTML tablosunda g\u00f6sterir. <code>h()<\/code> fonksiyonu, XSS sald\u0131r\u0131lar\u0131n\u0131 \u00f6nlemek i\u00e7in metni HTML&#8217;den ka\u00e7\u0131r\u0131r. <code>Number<\/code> ve <code>Html<\/code> helper&#8217;lar\u0131 CakePHP taraf\u0131ndan sa\u011flanan kullan\u0131\u015fl\u0131 ara\u00e7lard\u0131r.<\/p>\n<h4>Uygulamay\u0131 Test Etme<\/h4>\n<p>\u015eimdi taray\u0131c\u0131n\u0131z\u0131 a\u00e7\u0131n ve a\u015fa\u011f\u0131daki adrese gidin:<br \/>\n<code>http:\/\/alanadiniz.com\/tasks<\/code><\/p>\n<p>E\u011fer her \u015feyi do\u011fru yap\u0131land\u0131rd\u0131ysan\u0131z, veritaban\u0131na ekledi\u011finiz g\u00f6revlerin listelendi\u011fi basit bir sayfa g\u00f6rmelisiniz.<\/p>\n<p>Olas\u0131 sorunlar ve \u00e7\u00f6z\u00fcmleri:<br \/>\n*   <strong>Sayfa bulunamad\u0131 (404):<\/strong> Nginx yap\u0131land\u0131rmas\u0131n\u0131, \u00f6zellikle <code>root<\/code> dizinini ve <code>try_files<\/code> sat\u0131r\u0131n\u0131 kontrol edin.<br \/>\n*   <strong>Veritaban\u0131 ba\u011flant\u0131 hatas\u0131:<\/strong> <code>config\/app_local.php<\/code> dosyas\u0131ndaki veritaban\u0131 bilgilerini ve MySQL\/MariaDB kullan\u0131c\u0131s\u0131n\u0131n yetkilerini kontrol edin.<br \/>\n*   <strong>\u0130zin hatas\u0131:<\/strong> <code>tmp<\/code> ve <code>logs<\/code> dizinlerinin <code>www-data<\/code> kullan\u0131c\u0131s\u0131 i\u00e7in yazma iznine sahip oldu\u011fundan emin olun.<br \/>\n*   <strong>Bo\u015f sayfa:<\/strong> PHP-FPM&#8217;in \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan ve Nginx yap\u0131land\u0131rmas\u0131nda PHP-FPM&#8217;e do\u011fru \u015fekilde y\u00f6nlendirildi\u011finden emin olun. PHP hata g\u00fcnl\u00fcklerini kontrol edin (<code>\/var\/log\/nginx\/error.log<\/code> veya <code>\/var\/log\/php8.1-fpm.log<\/code>).<\/p>\n<h3>Sonu\u00e7 ve B\u00f6l\u00fcm 2&#8217;ye Haz\u0131rl\u0131k<\/h3>\n<p>Bu makalenin ilk b\u00f6l\u00fcm\u00fcnde, k\u00fc\u00e7\u00fck bir web uygulamas\u0131n\u0131 CakePHP ile bir VPS \u00fczerinde olu\u015fturman\u0131n temellerini att\u0131k. Bir VPS&#8217;i nas\u0131l se\u00e7ece\u011fimizi ve ilk g\u00fcvenlik ad\u0131mlar\u0131n\u0131 nas\u0131l ataca\u011f\u0131m\u0131z\u0131 \u00f6\u011frendik. Ard\u0131ndan, Nginx, PHP-FPM ve MariaDB gibi temel web sunucusu bile\u015fenlerini kurduk ve yap\u0131land\u0131rd\u0131k. Composer&#8217;\u0131 y\u00fckleyerek CakePHP projemizi ba\u015flatt\u0131k ve veritaban\u0131 ba\u011flant\u0131m\u0131z\u0131 kurduk. Son olarak, CakePHP&#8217;nin MVC yap\u0131s\u0131n\u0131 kullanarak basit bir g\u00f6rev listesi uygulamas\u0131n\u0131n listeleme (index) g\u00f6r\u00fcn\u00fcm\u00fcn\u00fc olu\u015fturduk.<\/p>\n<p>Art\u0131k CakePHP uygulamam\u0131z bir VPS \u00fczerinde \u00e7al\u0131\u015f\u0131r durumda ve veritaban\u0131ndan veri \u00e7ekip g\u00f6sterebiliyor. Bu, herhangi bir dinamik web uygulamas\u0131n\u0131n temelini olu\u015fturur.<\/p>\n<p>Serinin bir sonraki b\u00f6l\u00fcm\u00fcnde (B\u00f6l\u00fcm 2), bu temel \u00fczerine in\u015fa etmeye devam edece\u011fiz. CakePHP&#8217;nin formlar\u0131n\u0131, veri do\u011frulamas\u0131n\u0131 ve CRUD (Create, Read, Update, Delete) i\u015flemlerini kullanarak g\u00f6rev ekleme, d\u00fczenleme ve silme i\u015flevlerini uygulamam\u0131za ekleyece\u011fiz. Ayr\u0131ca, kullan\u0131c\u0131 dostu mesajlar ve temel hata y\u00f6netimi gibi konulara da de\u011finebiliriz. Bu sayede, tam i\u015flevli ve etkile\u015fimli bir web uygulamas\u0131na do\u011fru \u00f6nemli ad\u0131mlar atm\u0131\u015f olaca\u011f\u0131z.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"K\u00fc\u00e7\u00fck Bir Web Uygulamas\u0131n\u0131 CakePHP ile Bir VPS \u00dczerinde Olu\u015fturma (B\u00f6l\u00fcm 1)\nWeb geli\u015ftirme d\u00fcnyas\u0131nda, dinamik ve etkile\u015fimli uygulamala","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":[133],"tags":[],"class_list":{"0":"post-37615","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-php","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>K\u00fc\u00e7\u00fck Bir Web Uygulamas\u0131n\u0131 CakePHP ile Bir VPS \u00dczerinde Olu\u015fturma (B\u00f6l\u00fcm 1) - 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\/kucuk-bir-web-uygulamasini-cakephp-ile-bir-vps-uzerinde-olusturma-bolum-1\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"K\u00fc\u00e7\u00fck Bir Web Uygulamas\u0131n\u0131 CakePHP ile Bir VPS \u00dczerinde Olu\u015fturma (B\u00f6l\u00fcm 1)\" \/>\n<meta property=\"og:description\" content=\"K\u00fc\u00e7\u00fck Bir Web Uygulamas\u0131n\u0131 CakePHP ile Bir VPS \u00dczerinde Olu\u015fturma (B\u00f6l\u00fcm 1) Web geli\u015ftirme d\u00fcnyas\u0131nda, dinamik ve etkile\u015fimli uygulamala\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/kucuk-bir-web-uygulamasini-cakephp-ile-bir-vps-uzerinde-olusturma-bolum-1\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-10T14:40:56+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kucuk-bir-web-uygulamasini-cakephp-ile-bir-vps-uzerinde-olusturma-bolum-1\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kucuk-bir-web-uygulamasini-cakephp-ile-bir-vps-uzerinde-olusturma-bolum-1\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"K\u00fc\u00e7\u00fck Bir Web Uygulamas\u0131n\u0131 CakePHP ile Bir VPS \u00dczerinde Olu\u015fturma (B\u00f6l\u00fcm 1)\",\"datePublished\":\"2026-01-10T14:40:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kucuk-bir-web-uygulamasini-cakephp-ile-bir-vps-uzerinde-olusturma-bolum-1\/\"},\"wordCount\":3134,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"PHP\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/kucuk-bir-web-uygulamasini-cakephp-ile-bir-vps-uzerinde-olusturma-bolum-1\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kucuk-bir-web-uygulamasini-cakephp-ile-bir-vps-uzerinde-olusturma-bolum-1\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/kucuk-bir-web-uygulamasini-cakephp-ile-bir-vps-uzerinde-olusturma-bolum-1\/\",\"name\":\"K\u00fc\u00e7\u00fck Bir Web Uygulamas\u0131n\u0131 CakePHP ile Bir VPS \u00dczerinde Olu\u015fturma (B\u00f6l\u00fcm 1) - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-01-10T14:40:56+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kucuk-bir-web-uygulamasini-cakephp-ile-bir-vps-uzerinde-olusturma-bolum-1\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/kucuk-bir-web-uygulamasini-cakephp-ile-bir-vps-uzerinde-olusturma-bolum-1\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kucuk-bir-web-uygulamasini-cakephp-ile-bir-vps-uzerinde-olusturma-bolum-1\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"K\u00fc\u00e7\u00fck Bir Web Uygulamas\u0131n\u0131 CakePHP ile Bir VPS \u00dczerinde Olu\u015fturma (B\u00f6l\u00fcm 1)\"}]},{\"@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":"K\u00fc\u00e7\u00fck Bir Web Uygulamas\u0131n\u0131 CakePHP ile Bir VPS \u00dczerinde Olu\u015fturma (B\u00f6l\u00fcm 1) - 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\/kucuk-bir-web-uygulamasini-cakephp-ile-bir-vps-uzerinde-olusturma-bolum-1\/","og_locale":"tr_TR","og_type":"article","og_title":"K\u00fc\u00e7\u00fck Bir Web Uygulamas\u0131n\u0131 CakePHP ile Bir VPS \u00dczerinde Olu\u015fturma (B\u00f6l\u00fcm 1)","og_description":"K\u00fc\u00e7\u00fck Bir Web Uygulamas\u0131n\u0131 CakePHP ile Bir VPS \u00dczerinde Olu\u015fturma (B\u00f6l\u00fcm 1) Web geli\u015ftirme d\u00fcnyas\u0131nda, dinamik ve etkile\u015fimli uygulamala","og_url":"https:\/\/fatihsoysal.com\/blog\/kucuk-bir-web-uygulamasini-cakephp-ile-bir-vps-uzerinde-olusturma-bolum-1\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-01-10T14:40:56+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"19 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/kucuk-bir-web-uygulamasini-cakephp-ile-bir-vps-uzerinde-olusturma-bolum-1\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/kucuk-bir-web-uygulamasini-cakephp-ile-bir-vps-uzerinde-olusturma-bolum-1\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"K\u00fc\u00e7\u00fck Bir Web Uygulamas\u0131n\u0131 CakePHP ile Bir VPS \u00dczerinde Olu\u015fturma (B\u00f6l\u00fcm 1)","datePublished":"2026-01-10T14:40:56+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/kucuk-bir-web-uygulamasini-cakephp-ile-bir-vps-uzerinde-olusturma-bolum-1\/"},"wordCount":3134,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["PHP"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/kucuk-bir-web-uygulamasini-cakephp-ile-bir-vps-uzerinde-olusturma-bolum-1\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/kucuk-bir-web-uygulamasini-cakephp-ile-bir-vps-uzerinde-olusturma-bolum-1\/","url":"https:\/\/fatihsoysal.com\/blog\/kucuk-bir-web-uygulamasini-cakephp-ile-bir-vps-uzerinde-olusturma-bolum-1\/","name":"K\u00fc\u00e7\u00fck Bir Web Uygulamas\u0131n\u0131 CakePHP ile Bir VPS \u00dczerinde Olu\u015fturma (B\u00f6l\u00fcm 1) - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-01-10T14:40:56+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/kucuk-bir-web-uygulamasini-cakephp-ile-bir-vps-uzerinde-olusturma-bolum-1\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/kucuk-bir-web-uygulamasini-cakephp-ile-bir-vps-uzerinde-olusturma-bolum-1\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/kucuk-bir-web-uygulamasini-cakephp-ile-bir-vps-uzerinde-olusturma-bolum-1\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"K\u00fc\u00e7\u00fck Bir Web Uygulamas\u0131n\u0131 CakePHP ile Bir VPS \u00dczerinde Olu\u015fturma (B\u00f6l\u00fcm 1)"}]},{"@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\/37615","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=37615"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37615\/revisions"}],"predecessor-version":[{"id":37616,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37615\/revisions\/37616"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=37615"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=37615"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=37615"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}