{"id":37409,"date":"2026-01-03T17:41:00","date_gmt":"2026-01-03T14:41:00","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=37409"},"modified":"2026-01-03T17:41:00","modified_gmt":"2026-01-03T14:41:00","slug":"ansible-ile-ubuntu-18-04-uzerine-lamp-kurulumu-ve-yapilandirmasi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lamp-kurulumu-ve-yapilandirmasi\/","title":{"rendered":"Ansible ile Ubuntu 18.04 \u00dczerine LAMP Kurulumu ve Yap\u0131land\u0131rmas\u0131"},"content":{"rendered":"<p><body><\/p>\n<h2>Ansible ile Ubuntu 18.04 \u00dczerine LAMP Kurulumu ve Yap\u0131land\u0131rmas\u0131<\/h2>\n<h3>Giri\u015f<\/h3>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen teknoloji d\u00fcnyas\u0131nda, sunucu kurulumu ve yap\u0131land\u0131rmas\u0131 gibi g\u00f6revler, manuel olarak yap\u0131ld\u0131\u011f\u0131nda zaman al\u0131c\u0131, hataya a\u00e7\u0131k ve \u00f6l\u00e7eklendirilmesi zor s\u00fcre\u00e7ler haline gelebilmektedir. \u00d6zellikle web uygulamalar\u0131n\u0131n temelini olu\u015fturan LAMP (Linux, Apache, MySQL, PHP) y\u0131\u011f\u0131n\u0131, bir\u00e7ok proje i\u00e7in vazge\u00e7ilmez bir altyap\u0131d\u0131r. Bu y\u0131\u011f\u0131n\u0131n bir veya birden fazla sunucuya tutarl\u0131 ve tekrarlanabilir bir \u015fekilde kurulmas\u0131, otomasyon ara\u00e7lar\u0131n\u0131n \u00f6nemini ortaya koymaktad\u0131r.<\/p>\n<p>Ansible, bu t\u00fcr otomasyon ihtiya\u00e7lar\u0131 i\u00e7in geli\u015ftirilmi\u015f, agent&#8217;s\u0131z bir yap\u0131land\u0131rma y\u00f6netim arac\u0131d\u0131r. Basit, okunabilir YAML tabanl\u0131 syntax&#8217;\u0131 sayesinde karma\u015f\u0131k altyap\u0131 kurulumlar\u0131n\u0131 ve y\u00f6netimini kolayla\u015ft\u0131r\u0131r. Bu makalede, Ansible kullanarak Ubuntu 18.04 i\u015fletim sistemi \u00fczerine LAMP y\u0131\u011f\u0131n\u0131n\u0131n nas\u0131l kurulaca\u011f\u0131n\u0131 ve yap\u0131land\u0131r\u0131laca\u011f\u0131n\u0131 ad\u0131m ad\u0131m ele alaca\u011f\u0131z. Hedefimiz, bu s\u00fcreci tamamen otomatikle\u015ftirmek ve gelecekte benzer kurulumlar\u0131 saniyeler i\u00e7inde tekrarlayabilmektir.<\/p>\n<p>Makalenin sonunda, sadece LAMP y\u0131\u011f\u0131n\u0131n\u0131 kurmakla kalmayacak, ayn\u0131 zamanda Ansible&#8217;\u0131n g\u00fcc\u00fcn\u00fc kullanarak bu kurulumu nas\u0131l y\u00f6netebilece\u011finizi, de\u011fi\u015fkenleri nas\u0131l kullanaca\u011f\u0131n\u0131z\u0131 ve daha karma\u015f\u0131k senaryolara nas\u0131l adapte edebilece\u011finizi de anlam\u0131\u015f olacaks\u0131n\u0131z.<\/p>\n<h3>\u00d6n Gereksinimler<\/h3>\n<p>Ansible ile LAMP kurulumuna ba\u015flamadan \u00f6nce baz\u0131 temel gereksinimleri kar\u015f\u0131lam\u0131\u015f olman\u0131z gerekmektedir:<\/p>\n<h4>1. Ubuntu 18.04 Hedef Sunucu(lar)<\/h4>\n<p>*   <strong>\u0130\u015fletim Sistemi:<\/strong> En az bir adet temiz Ubuntu 18.04 sunucusu. Makale, Ubuntu 18.04 \u00fczerine odaklanacak olsa da, Ansible playbook&#8217;lar\u0131 k\u00fc\u00e7\u00fck de\u011fi\u015fikliklerle di\u011fer Ubuntu s\u00fcr\u00fcmlerine de uyarlanabilir.<br \/>\n*   <strong>SSH Eri\u015fimi:<\/strong> Ansible, hedef sunucularla SSH \u00fczerinden ileti\u015fim kurar. Bu nedenle, hedef sunucunuza SSH ile eri\u015febiliyor olman\u0131z gerekmektedir.<br \/>\n*   <strong>Sudo Yetkileri:<\/strong> Ansible&#8217;\u0131n kurulum ve yap\u0131land\u0131rma g\u00f6revlerini ger\u00e7ekle\u015ftirebilmesi i\u00e7in, SSH ile ba\u011flanaca\u011f\u0131n\u0131z kullan\u0131c\u0131n\u0131n <code>sudo<\/code> yetkilerine sahip olmas\u0131 \u00f6nemlidir.<br \/>\n*   <strong>G\u00fcncel Sistem:<\/strong> Hedef sunucunuzun paket listesinin ve kurulu paketlerinin g\u00fcncel olmas\u0131 iyi bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r. Kurulumdan \u00f6nce <code>sudo apt update && sudo apt upgrade -y<\/code> komutunu \u00e7al\u0131\u015ft\u0131rman\u0131z \u00f6nerilir.<\/p>\n<h4>2. Kontrol Makinesi (Ansible Controller)<\/h4>\n<p>*   <strong>\u0130\u015fletim Sistemi:<\/strong> Ansible&#8217;\u0131 \u00e7al\u0131\u015ft\u0131raca\u011f\u0131n\u0131z bir Linux (Ubuntu, Fedora, CentOS vb.) veya macOS i\u015fletim sistemine sahip bir makine. Bu makineye &#8220;kontrol makinesi&#8221; denir.<br \/>\n*   <strong>Ansible Kurulumu:<\/strong> Kontrol makinesinde Ansible&#8217;\u0131n kurulu olmas\u0131 gerekmektedir. Sonraki b\u00f6l\u00fcmde kurulum ad\u0131mlar\u0131n\u0131 detayl\u0131 olarak a\u00e7\u0131klayaca\u011f\u0131z.<br \/>\n*   <strong>SSH Anahtar \u00c7ifti:<\/strong> Ansible&#8217;\u0131n \u015fifre sormadan hedef sunuculara ba\u011flanabilmesi i\u00e7in SSH anahtar \u00e7ifti (public\/private key) kullanmak en g\u00fcvenli ve pratik y\u00f6ntemdir.<br \/>\n    *   E\u011fer bir anahtar \u00e7iftiniz yoksa, kontrol makinesinde <code>ssh-keygen -t rsa -b 4096<\/code> komutu ile olu\u015fturabilirsiniz.<br \/>\n    *   Olu\u015fturdu\u011funuz public key&#8217;i (<code>~\/.ssh\/id_rsa.pub<\/code>), hedef Ubuntu 18.04 sunucunuzdaki sudo yetkilerine sahip kullan\u0131c\u0131n\u0131n <code>~\/.ssh\/authorized_keys<\/code> dosyas\u0131na kopyalaman\u0131z gerekmektedir. Bunu <code>ssh-copy-id kullan\u0131c\u0131@hedef_ip_adresi<\/code> komutu ile kolayca yapabilirsiniz.<\/p>\n<h3>Ansible Kurulumu<\/h3>\n<p>Kontrol makinenizde Ansible kurulu de\u011filse, a\u015fa\u011f\u0131daki ad\u0131mlar\u0131 izleyerek kurabilirsiniz. Bu ad\u0131mlar Ubuntu tabanl\u0131 sistemler i\u00e7in ge\u00e7erlidir.<\/p>\n<pre><code class=\"language-bash\"># Sistem paket listesini g\u00fcncelleyin\nsudo apt update\n\n<h2>Gerekli ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00fckleyin<\/h2>\nsudo apt install software-properties-common -y\n\n<h2>Ansible PPA (Personal Package Archive) deposunu ekleyin<\/h2>\nsudo add-apt-repository --yes --update ppa:ansible\/ansible\n\n<h2>Ansible'\u0131 kurun<\/h2>\nsudo apt install ansible -y\n\n<h2>Kurulumu do\u011frulay\u0131n<\/h2>\nansible --version<\/code><\/pre>\n<p><code>ansible --version<\/code> komutunu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda, Ansible s\u00fcr\u00fcm\u00fcn\u00fc ve Python gibi ba\u011f\u0131ml\u0131l\u0131k bilgilerini g\u00f6rmelisiniz. Bu, Ansible&#8217;\u0131n ba\u015far\u0131yla kuruldu\u011funu g\u00f6sterir.<\/p>\n<h3>Proje Yap\u0131s\u0131 Olu\u015fturma<\/h3>\n<p>Ansible projeleri genellikle belirli bir dizin yap\u0131s\u0131 i\u00e7inde d\u00fczenlenir. Bu, playbook&#8217;lar\u0131n\u0131z\u0131n, envanterinizin ve rollerinizin daha d\u00fczenli ve y\u00f6netilebilir olmas\u0131n\u0131 sa\u011flar. Projeniz i\u00e7in bir ana dizin olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-bash\">mkdir lamp_ansible\ncd lamp_ansible<\/code><\/pre>\n<p>\u015eimdi, bu dizin alt\u0131nda temel Ansible proje yap\u0131s\u0131n\u0131 olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-bash\"># Envanter dosyas\u0131\ntouch inventory.ini\n\n<h2>Ansible yap\u0131land\u0131rma dosyas\u0131<\/h2>\ntouch ansible.cfg\n\n<h2>Playbook'lar i\u00e7in dizin<\/h2>\nmkdir playbooks\n\n<h2>Roller i\u00e7in dizin<\/h2>\nmkdir roles\n\n<h2>De\u011fi\u015fkenler i\u00e7in dizin (iste\u011fe ba\u011fl\u0131 ama iyi bir pratik)<\/h2>\nmkdir vars<\/code><\/pre>\n<p>Bu ad\u0131mlardan sonra <code>lamp_ansible<\/code> dizininizin yap\u0131s\u0131 \u015f\u00f6yle g\u00f6r\u00fcnmelidir:<\/p>\n<pre><code class=\"language-\">lamp_ansible\/\n\u251c\u2500\u2500 inventory.ini\n\u251c\u2500\u2500 ansible.cfg\n\u251c\u2500\u2500 playbooks\/\n\u251c\u2500\u2500 roles\/\n\u2514\u2500\u2500 vars\/<\/code><\/pre>\n<h4>Inventory Dosyas\u0131 (inventory.ini)<\/h4>\n<p><code>inventory.ini<\/code> dosyas\u0131, Ansible&#8217;\u0131n hangi sunucular \u00fczerinde i\u015flem yapaca\u011f\u0131n\u0131 belirten bir listedir. Hedef Ubuntu 18.04 sunucunuzun bilgilerini bu dosyaya ekleyelim.<\/p>\n<p><code>inventory.ini<\/code> dosyas\u0131n\u0131 a\u00e7\u0131n ve a\u015fa\u011f\u0131daki i\u00e7eri\u011fi ekleyin:<\/p>\n<pre><code class=\"language-ini\">[webservers]\n<h2>Hedef sunucunuzun IP adresi veya hostname'i<\/h2>\n<h2>birden fazla sunucunuz varsa alt alta ekleyebilirsiniz<\/h2>\nyour_server_ip_address ansible_user=your_ssh_user ansible_become=true<\/code><\/pre>\n<p>*   <code>[webservers]<\/code>: Bu, sunucular\u0131n\u0131z\u0131 gruplad\u0131\u011f\u0131n\u0131z bir isimdir. Playbook&#8217;lar\u0131n\u0131zda bu grup ad\u0131n\u0131 kullanarak belirli sunucu setleri \u00fczerinde i\u015flem yapabilirsiniz.<br \/>\n*   <code>your_server_ip_address<\/code>: Hedef Ubuntu sunucunuzun ger\u00e7ek IP adresi veya DNS ad\u0131 ile de\u011fi\u015ftirin.<br \/>\n*   <code>ansible_user=your_ssh_user<\/code>: Hedef sunucuya ba\u011flanmak i\u00e7in kullanaca\u011f\u0131n\u0131z SSH kullan\u0131c\u0131 ad\u0131n\u0131 belirtin. Bu kullan\u0131c\u0131 <code>sudo<\/code> yetkilerine sahip olmal\u0131d\u0131r.<br \/>\n*   <code>ansible_become=true<\/code>: Bu, Ansible&#8217;a g\u00f6revleri <code>sudo<\/code> kullanarak \u00e7al\u0131\u015ft\u0131rmas\u0131n\u0131 s\u00f6yler.<\/p>\n<p><strong>\u00d6rnek:<\/strong><\/p>\n<pre><code class=\"language-ini\">[webservers]\n192.168.1.100 ansible_user=ubuntu ansible_become=true<\/code><\/pre>\n<h4>Ansible Yap\u0131land\u0131rma Dosyas\u0131 (ansible.cfg)<\/h4>\n<p><code>ansible.cfg<\/code> dosyas\u0131, Ansible&#8217;\u0131n \u00e7al\u0131\u015fma zaman\u0131 davran\u0131\u015f\u0131n\u0131 kontrol eden global veya proje baz\u0131nda ayarlar\u0131 i\u00e7erir. Projeniz i\u00e7in \u00f6zel ayarlar\u0131 buraya eklemek, komut sat\u0131r\u0131nda her seferinde ayn\u0131 parametreleri yazmaktan kurtar\u0131r.<\/p>\n<p><code>ansible.cfg<\/code> dosyas\u0131n\u0131 a\u00e7\u0131n ve a\u015fa\u011f\u0131daki i\u00e7eri\u011fi ekleyin:<\/p>\n<pre><code class=\"language-ini\">[defaults]\ninventory = inventory.ini\nremote_user = your_ssh_user # inventory.ini'deki ansible_user ile ayn\u0131 olabilir\nask_pass = false\nhost_key_checking = false # Geli\u015ftirme ortam\u0131nda kolayl\u0131k sa\u011flar, \u00fcretimde 'true' olmas\u0131 \u00f6nerilir.\nroles_path = .\/roles\n\n[privilege_escalation]\nbecome = true\nbecome_method = sudo\nbecome_user = root\nbecome_ask_pass = false<\/code><\/pre>\n<p>*   <code>inventory = inventory.ini<\/code>: Ansible&#8217;a envanter dosyas\u0131n\u0131n nerede oldu\u011funu s\u00f6yler.<br \/>\n*   <code>remote_user = your_ssh_user<\/code>: Varsay\u0131lan SSH kullan\u0131c\u0131 ad\u0131n\u0131 belirler.<br \/>\n*   <code>ask_pass = false<\/code>: SSH ba\u011flant\u0131s\u0131 i\u00e7in \u015fifre sormamas\u0131n\u0131 sa\u011flar (SSH anahtar \u00e7ifti kulland\u0131\u011f\u0131n\u0131z varsay\u0131l\u0131r).<br \/>\n*   <code>host_key_checking = false<\/code>: \u0130lk ba\u011flant\u0131da host anahtar\u0131 kontrol\u00fcn\u00fc devre d\u0131\u015f\u0131 b\u0131rak\u0131r. G\u00fcvenlik a\u00e7\u0131s\u0131ndan \u00fcretim ortamlar\u0131nda <code>true<\/code> olmas\u0131 \u00f6nerilir. Geli\u015ftirme ve test ortamlar\u0131nda kolayl\u0131k sa\u011flar.<br \/>\n*   <code>roles_path = .\/roles<\/code>: Ansible&#8217;\u0131n rolleri nerede arayaca\u011f\u0131n\u0131 belirtir.<br \/>\n*   <code>[privilege_escalation]<\/code>: <code>sudo<\/code> gibi yetki y\u00fckseltme ayarlar\u0131n\u0131 i\u00e7erir.<br \/>\n    *   <code>become = true<\/code>: Yetki y\u00fckseltmeyi etkinle\u015ftirir.<br \/>\n    *   <code>become_method = sudo<\/code>: Yetki y\u00fckseltme y\u00f6ntemi olarak <code>sudo<\/code>&#8216;yu kullan\u0131r.<br \/>\n    *   <code>become_user = root<\/code>: Yetki y\u00fckseltildikten sonra hangi kullan\u0131c\u0131ya ge\u00e7ilece\u011fini belirtir (genellikle <code>root<\/code>).<br \/>\n    *   <code>become_ask_pass = false<\/code>: <code>sudo<\/code> \u015fifresi sormamas\u0131n\u0131 sa\u011flar (SSH anahtar\u0131n\u0131z\u0131n sudo yetkisi varsa veya hedef makinede <code>NOPASSWD<\/code> ayar\u0131 yap\u0131lm\u0131\u015fsa).<\/p>\n<h3>LAMP Kurulumu \u0130\u00e7in Ansible Rolleri<\/h3>\n<p>Ansible&#8217;da &#8220;rol&#8221; (role) kavram\u0131, belirli bir g\u00f6revi (\u00f6rne\u011fin Apache kurmak, MySQL yap\u0131land\u0131rmak) yerine getiren, yeniden kullan\u0131labilir ve d\u00fczenli bir g\u00f6revler, \u015fablonlar, dosyalar ve de\u011fi\u015fkenler koleksiyonudur. LAMP y\u0131\u011f\u0131n\u0131n\u0131 kurmak i\u00e7in her bir bile\u015fen (Apache, MySQL, PHP) i\u00e7in ayr\u0131 roller olu\u015fturmak, playbook&#8217;unuzu daha mod\u00fcler, okunabilir ve y\u00f6netilebilir hale getirecektir. Ayr\u0131ca, sistem g\u00fcncellemeleri ve temel paket kurulumlar\u0131 i\u00e7in bir <code>common<\/code> rol\u00fc de olu\u015fturaca\u011f\u0131z.<\/p>\n<p><code>roles<\/code> dizini i\u00e7inde a\u015fa\u011f\u0131daki rolleri olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-bash\">ansible-galaxy init common apache mysql php<\/code><\/pre>\n<p>Bu komut, <code>roles<\/code> dizini alt\u0131nda <code>common<\/code>, <code>apache<\/code>, <code>mysql<\/code> ve <code>php<\/code> ad\u0131nda d\u00f6rt yeni dizin olu\u015fturacak ve her birinin i\u00e7inde standart rol yap\u0131s\u0131n\u0131 (<code>tasks<\/code>, <code>handlers<\/code>, <code>templates<\/code>, <code>vars<\/code>, <code>defaults<\/code>, <code>meta<\/code>) bar\u0131nd\u0131racakt\u0131r.<\/p>\n<p>\u015eimdi her bir rol\u00fcn i\u00e7eri\u011fini ad\u0131m ad\u0131m doldural\u0131m.<\/p>\n<h4>1. Common Rol\u00fc<\/h4>\n<p>Bu rol, hedef sunucunun g\u00fcncel olmas\u0131n\u0131 sa\u011flar ve di\u011fer rollerin ihtiya\u00e7 duyabilece\u011fi temel paketleri kurar.<\/p>\n<p><strong><code>roles\/common\/tasks\/main.yml<\/code>:<\/strong><\/p>\n<pre><code class=\"language-yaml\">---\n- name: Sistem paket listesini g\u00fcncelleyin\n  apt:\n    update_cache: yes\n    force_apt_get: yes\n    cache_valid_time: 3600 # 1 saat boyunca \u00f6nbelle\u011fi ge\u00e7erli tut\n\n- name: T\u00fcm kurulu paketleri y\u00fckseltin\n  apt:\n    upgrade: dist\n    force_apt_get: yes\n\n- name: Gereksiz ba\u011f\u0131ml\u0131l\u0131klar\u0131 temizleyin\n  apt:\n    autoremove: yes\n\n- name: Python 3'\u00fcn kurulu oldu\u011fundan emin olun (Ansible i\u00e7in gerekli)\n  # Ubuntu 18.04'te 'python' genellikle python2'yi g\u00f6sterir. Ansible python3'e ihtiya\u00e7 duyar.\n  # Bu g\u00f6rev, e\u011fer python komutu python3'e linklenmemi\u015fse python-is-python3 paketini kurar.\n  raw: test -e \/usr\/bin\/python || (apt update && apt install -y python-is-python3)\n  args:\n    creates: \/usr\/bin\/python\n  changed_when: false # Bu komutun idempotence'\u0131 olmad\u0131\u011f\u0131 i\u00e7in\n  when: ansible_distribution == 'Ubuntu' and ansible_distribution_major_version == '18'\n\n- name: Gerekli temel paketleri kurun\n  apt:\n    name:\n      - curl\n      - wget\n      - unzip\n      - git\n      - python3-apt # apt mod\u00fcl\u00fc i\u00e7in gerekli\n    state: present<\/code><\/pre>\n<p><code>common<\/code> rol\u00fcn\u00fcn <code>handlers<\/code> dizini \u015fimdilik bo\u015f kalabilir.<\/p>\n<h4>2. Apache Rol\u00fc<\/h4>\n<p>Bu rol, Apache web sunucusunu kurar, yap\u0131land\u0131r\u0131r ve gerekli mod\u00fclleri etkinle\u015ftirir.<\/p>\n<p><strong><code>roles\/apache\/tasks\/main.yml<\/code>:<\/strong><\/p>\n<pre><code class=\"language-yaml\">---\n- name: Apache paketini kurun\n  apt:\n    name: apache2\n    state: present\n\n- name: Apache servisini ba\u015flat\u0131n ve etkinle\u015ftirin\n  service:\n    name: apache2\n    state: started\n    enabled: yes\n\n- name: UFW (G\u00fcvenlik Duvar\u0131) \u00fczerinde Apache Full profiline izin verin\n  community.general.ufw:\n    rule: allow\n    name: 'Apache Full'\n    state: enabled # UFW'nin etkin oldu\u011fundan emin olun\n\n- name: Varsay\u0131lan Apache sanal ana bilgisayar\u0131n\u0131 devre d\u0131\u015f\u0131 b\u0131rak\u0131n\n  command: a2dissite 000-default.conf\n  notify: Apache'yi yeniden ba\u015flat\n\n- name: Apache rewrite mod\u00fcl\u00fcn\u00fc etkinle\u015ftirin\n  community.general.apache2_module:\n    state: present\n    name: rewrite\n  notify: Apache'yi yeniden ba\u015flat\n\n- name: Uygulama i\u00e7in belge k\u00f6k dizinini olu\u015fturun\n  file:\n    path: \"{{ apache_document_root }}\"\n    state: directory\n    owner: www-data\n    group: www-data\n    mode: '0755'\n\n- name: Apache sanal ana bilgisayar yap\u0131land\u0131rmas\u0131n\u0131 kopyalay\u0131n\n  template:\n    src: example.conf.j2\n    dest: \/etc\/apache2\/sites-available\/{{ apache_servername }}.conf\n    owner: root\n    group: root\n    mode: '0644'\n  notify: Apache'yi yeniden ba\u015flat\n\n- name: Yeni Apache sanal ana bilgisayar\u0131n\u0131 etkinle\u015ftirin\n  command: a2ensite {{ apache_servername }}.conf\n  notify: Apache'yi yeniden ba\u015flat\n\n- name: Test PHP sayfas\u0131 olu\u015fturun\n  copy:\n    content: \"<?php phpinfo(); ?>\"\n    dest: \"{{ apache_document_root }}\/info.php\"\n    owner: www-data\n    group: www-data\n    mode: '0644'<\/code><\/pre>\n<p><strong><code>roles\/apache\/templates\/example.conf.j2<\/code>:<\/strong><br \/>\nBu \u015fablon, uygulaman\u0131z i\u00e7in bir Apache sanal ana bilgisayar yap\u0131land\u0131rmas\u0131 olu\u015fturacakt\u0131r.<\/p>\n<pre><code class=\"language-apache\"><VirtualHost *:80>\n    ServerAdmin webmaster@localhost\n    ServerName {{ apache_servername }}\n    DocumentRoot {{ apache_document_root }}\n\n    <Directory {{ apache_document_root }}>\n        Options Indexes FollowSymLinks\n        AllowOverride All\n        Require all granted\n    <\/Directory>\n\n    ErrorLog ${APACHE_LOG_DIR}\/{{ apache_servername }}_error.log\n    CustomLog ${APACHE_LOG_DIR}\/{{ apache_servername }}_access.log combined\n<\/VirtualHost><\/code><\/pre>\n<p><strong><code>roles\/apache\/handlers\/main.yml<\/code>:<\/strong><br \/>\nHandler&#8217;lar, belirli bir g\u00f6rev tetiklendi\u011finde (\u00f6rne\u011fin bir yap\u0131land\u0131rma dosyas\u0131 de\u011fi\u015fti\u011finde) \u00e7al\u0131\u015ft\u0131r\u0131lan g\u00f6revlerdir.<\/p>\n<pre><code class=\"language-yaml\">---\n- name: Apache'yi yeniden ba\u015flat\n  service:\n    name: apache2\n    state: restarted<\/code><\/pre>\n<p><strong><code>roles\/apache\/defaults\/main.yml<\/code>:<\/strong><br \/>\nBu dosyada, rol i\u00e7inde kullan\u0131lan varsay\u0131lan de\u011fi\u015fken de\u011ferlerini tan\u0131mlayabiliriz.<\/p>\n<pre><code class=\"language-yaml\">---\napache_servername: your_domain_or_ip # Kendi alan ad\u0131n\u0131z veya IP adresinizle de\u011fi\u015ftirin\napache_document_root: \/var\/www\/html\/mywebapp # Uygulaman\u0131z\u0131n k\u00f6k dizini<\/code><\/pre>\n<h4>3. MySQL Rol\u00fc<\/h4>\n<p>Bu rol, MySQL sunucusunu kurar, root \u015fifresini ayarlar ve iste\u011fe ba\u011fl\u0131 olarak bir veritaban\u0131 ve kullan\u0131c\u0131 olu\u015fturur.<\/p>\n<p><strong><code>roles\/mysql\/tasks\/main.yml<\/code>:<\/strong><\/p>\n<pre><code class=\"language-yaml\">---\n- name: MySQL sunucu paketini ve Python MySQL ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n\u0131 kurun\n  apt:\n    name:\n      - mysql-server\n      - python3-pymysql # Ansible'\u0131n MySQL mod\u00fclleri i\u00e7in gerekli\n    state: present\n\n- name: MySQL servisini ba\u015flat\u0131n ve etkinle\u015ftirin\n  service:\n    name: mysql\n    state: started\n    enabled: yes\n\n- name: MySQL root \u015fifresini ayarlay\u0131n (yaln\u0131zca ilk kurulumda)\n  community.mysql.mysql_user:\n    name: root\n    host: localhost\n    password: \"{{ mysql_root_password }}\"\n    login_user: root\n    login_password: \"{{ mysql_root_password }}\" # E\u011fer \u015fifre zaten ayarland\u0131ysa bu kullan\u0131l\u0131r\n    check_password_exists: yes # \u015eifrenin zaten var olup olmad\u0131\u011f\u0131n\u0131 kontrol eder\n    state: present\n  no_log: true # Hassas bilgiyi loglarda g\u00f6stermez\n\n- name: Anonim MySQL kullan\u0131c\u0131lar\u0131n\u0131 kald\u0131r\u0131n\n  community.mysql.mysql_user:\n    name: ''\n    host: \"{{ item }}\"\n    state: absent\n  with_items:\n    - localhost\n    - \"{{ ansible_hostname }}\"\n\n- name: Test veritaban\u0131n\u0131 kald\u0131r\u0131n\n  community.mysql.mysql_db:\n    name: test\n    state: absent\n\n- name: Yeni bir veritaban\u0131 olu\u015fturun\n  community.mysql.mysql_db:\n    name: \"{{ mysql_db_name }}\"\n    state: present\n    login_user: root\n    login_password: \"{{ mysql_root_password }}\"\n  no_log: true\n\n- name: Yeni bir veritaban\u0131 kullan\u0131c\u0131s\u0131 olu\u015fturun ve yetkilendirin\n  community.mysql.mysql_user:\n    name: \"{{ mysql_db_user }}\"\n    password: \"{{ mysql_db_password }}\"\n    host: 'localhost'\n    priv: \"{{ mysql_db_name }}.*:ALL\"\n    state: present\n    login_user: root\n    login_password: \"{{ mysql_root_password }}\"\n  no_log: true\n\n<h2>Uzak ba\u011flant\u0131lara izin vermek isterseniz (G\u00dcVENL\u0130K R\u0130SK\u0130 OLU\u015eTURUR, D\u0130KKATL\u0130 KULLANIN!)<\/h2>\n<h2>- name: MySQL yap\u0131land\u0131rma dosyas\u0131n\u0131 g\u00fcncelleyin (bind-address)<\/h2>\n<h2>lineinfile:<\/h2>\n<h2>path: \/etc\/mysql\/mysql.conf.d\/mysqld.cnf<\/h2>\n<h2>regexp: '^bind-address'<\/h2>\n<h2>line: 'bind-address = 0.0.0.0'<\/h2>\n<h2>notify: MySQL'i yeniden ba\u015flat<\/h2>\n\n<h2>- name: UFW \u00fczerinde MySQL portuna (3306) izin verin<\/h2>\n<h2>community.general.ufw:<\/h2>\n<h2>rule: allow<\/h2>\n<h2>port: '3306'<\/h2>\n<h2>proto: tcp<\/h2>\n<h2>when: allow_mysql_remote_access is defined and allow_mysql_remote_access<\/code><\/pre>\n<\/h2>\n<p><strong><code>roles\/mysql\/handlers\/main.yml<\/code>:<\/strong><\/p>\n<pre><code class=\"language-yaml\">---\n- name: MySQL'i yeniden ba\u015flat\n  service:\n    name: mysql\n    state: restarted<\/code><\/pre>\n<p><strong><code>roles\/mysql\/defaults\/main.yml<\/code>:<\/strong><br \/>\nMySQL i\u00e7in hassas bilgiler i\u00e7erdi\u011finden, bu de\u011fi\u015fkenleri <code>ansible-vault<\/code> ile korumak veya <code>group_vars<\/code> kullanmak daha g\u00fcvenlidir. Ancak \u00f6rnek olmas\u0131 a\u00e7\u0131s\u0131ndan buraya ekleyelim.<\/p>\n<pre><code class=\"language-yaml\">---\nmysql_root_password: \"YOUR_MYSQL_ROOT_PASSWORD\" # G\u00fc\u00e7l\u00fc bir \u015fifre kullan\u0131n!\nmysql_db_name: \"my_database\"\nmysql_db_user: \"my_db_user\"\nmysql_db_password: \"MY_DB_USER_PASSWORD\" # G\u00fc\u00e7l\u00fc bir \u015fifre kullan\u0131n!\n<h2>allow_mysql_remote_access: false # Uzak eri\u015fimi etkinle\u015ftirmek i\u00e7in true yap\u0131n<\/code><\/pre>\n<\/h2>\n<h4>4. PHP Rol\u00fc<\/h4>\n<p>Bu rol, PHP&#8217;yi ve Apache ile entegrasyonu i\u00e7in gerekli mod\u00fclleri kurar ve temel PHP ayarlar\u0131n\u0131 yapar.<\/p>\n<p><strong><code>roles\/php\/tasks\/main.yml<\/code>:<\/strong><\/p>\n<pre><code class=\"language-yaml\">---\n- name: PHP ve Apache i\u00e7in gerekli mod\u00fclleri kurun\n  apt:\n    name:\n      - php\n      - libapache2-mod-php\n      - php-mysql\n      - php-cli\n      - php-json\n      - php-gd\n      - php-curl\n      - php-mbstring\n      - php-xml\n      - php-zip\n    state: present\n\n- name: PHP yap\u0131land\u0131rma dosyas\u0131n\u0131 kopyalay\u0131n\n  template:\n    src: php.ini.j2\n    dest: \/etc\/php\/7.2\/apache2\/php.ini # Ubuntu 18.04 i\u00e7in PHP 7.2 varsay\u0131lan\u0131\n    owner: root\n    group: root\n    mode: '0644'\n  notify: Apache'yi yeniden ba\u015flat # PHP yap\u0131land\u0131rmas\u0131 de\u011fi\u015fince Apache'nin yeniden ba\u015flat\u0131lmas\u0131 gerekir<\/code><\/pre>\n<p><strong><code>roles\/php\/templates\/php.ini.j2<\/code>:<\/strong><br \/>\nBu \u015fablon, <code>php.ini<\/code> dosyas\u0131n\u0131 yap\u0131land\u0131rmak i\u00e7in kullan\u0131l\u0131r. Kendi ihtiya\u00e7lar\u0131n\u0131za g\u00f6re d\u00fczenleyebilirsiniz.<\/p>\n<pre><code class=\"language-ini\">[PHP]\nmemory_limit = 256M\nupload_max_filesize = 64M\npost_max_size = 64M\nmax_execution_time = 300\ndate.timezone = \"{{ php_timezone }}\"\ndisplay_errors = Off\nlog_errors = On\nerror_log = \/var\/log\/php\/php_errors.log<\/code><\/pre>\n<p><strong><code>roles\/php\/handlers\/main.yml<\/code>:<\/strong><\/p>\n<pre><code class=\"language-yaml\">---\n- name: Apache'yi yeniden ba\u015flat\n  service:\n    name: apache2\n    state: restarted<\/code><\/pre>\n<p><strong><code>roles\/php\/defaults\/main.yml<\/code>:<\/strong><\/p>\n<pre><code class=\"language-yaml\">---\nphp_timezone: Europe\/Istanbul # Kendi zaman diliminizi ayarlay\u0131n<\/code><\/pre>\n<p>PHP error log dizinini olu\u015ftural\u0131m:<br \/>\n<strong><code>roles\/php\/tasks\/main.yml<\/code> dosyas\u0131na ekleyin (PHP paket kurulumundan sonra):<\/strong><\/p>\n<pre><code class=\"language-yaml\">- name: PHP error log dizinini olu\u015fturun\n  file:\n    path: \/var\/log\/php\n    state: directory\n    owner: www-data\n    group: adm # Apache ve PHP'nin loglara yazabilmesi i\u00e7in\n    mode: '0775'<\/code><\/pre>\n<h3>Playbook Olu\u015fturma<\/h3>\n<p>\u015eimdiye kadar olu\u015fturdu\u011fumuz rolleri bir araya getirecek ana playbook dosyas\u0131n\u0131 olu\u015ftural\u0131m.<\/p>\n<p><strong><code>playbooks\/lamp_setup.yml<\/code>:<\/strong><\/p>\n<pre><code class=\"language-yaml\">---\n- name: LAMP Stack Kurulumu ve Yap\u0131land\u0131rmas\u0131\n  hosts: webservers # inventory.ini dosyas\u0131ndaki grup ad\u0131\n  become: yes # T\u00fcm g\u00f6revleri sudo ile \u00e7al\u0131\u015ft\u0131r\n\n  # Varsay\u0131lan de\u011fi\u015fken dosyalar\u0131n\u0131 dahil et (iste\u011fe ba\u011fl\u0131, hassas veriler i\u00e7in group_vars veya vault daha iyi)\n  # vars_files:\n  #   - ..\/vars\/main.yml # Bu dosyada hassas bilgi tutmak yerine ansible-vault kullan\u0131n\n\n  # Ansible'\u0131n hedef sunucuda Python 3'\u00fc kullanabildi\u011finden emin olmak i\u00e7in \u00f6n g\u00f6rev\n  # Ubuntu 18.04'te 'python' komutu genellikle python2'ye i\u015faret eder, Ansible python3'e ihtiya\u00e7 duyar.\n  # Bu g\u00f6rev, e\u011fer python komutu python3'e linklenmemi\u015fse python-is-python3 paketini kurar.\n  pre_tasks:\n    - name: Python 3'\u00fcn kurulu oldu\u011fundan emin olun (Ubuntu 18.04 i\u00e7in varsay\u0131lan)\n      raw: test -e \/usr\/bin\/python || (apt update && apt install -y python-is-python3)\n      args:\n        creates: \/usr\/bin\/python\n      changed_when: false # Bu komutun idempotence'\u0131 olmad\u0131\u011f\u0131 i\u00e7in\n      when: ansible_distribution == 'Ubuntu' and ansible_distribution_major_version == '18'\n\n  roles:\n    - common\n    - apache\n    - mysql\n    - php<\/code><\/pre>\n<h3>De\u011fi\u015fken Y\u00f6netimi ve Hassas Bilgiler<\/h3>\n<p>Yukar\u0131daki rol tan\u0131mlar\u0131nda <code>defaults\/main.yml<\/code> dosyalar\u0131nda baz\u0131 de\u011fi\u015fkenler tan\u0131mlad\u0131k. Ancak, \u00f6zellikle \u015fifreler gibi hassas bilgileri bu \u015fekilde do\u011frudan dosyalarda tutmak g\u00fcvenlik a\u00e7\u0131s\u0131ndan \u00f6nerilmez. Bunun yerine <code>group_vars<\/code>, <code>host_vars<\/code> veya en ideali <code>ansible-vault<\/code> kullanmal\u0131s\u0131n\u0131z.<\/p>\n<p><strong><code>group_vars\/webservers.yml<\/code> (\u00d6nerilen Y\u00f6ntem):<\/strong><br \/>\n<code>lamp_ansible<\/code> dizini alt\u0131nda <code>group_vars<\/code> ad\u0131nda bir dizin olu\u015fturun ve i\u00e7ine <code>webservers.yml<\/code> ad\u0131nda bir dosya ekleyin. Bu dosya, <code>webservers<\/code> grubundaki t\u00fcm sunucular i\u00e7in ge\u00e7erli olacak de\u011fi\u015fkenleri i\u00e7erir.<\/p>\n<pre><code class=\"language-bash\">mkdir group_vars\ntouch group_vars\/webservers.yml<\/code><\/pre>\n<p><strong><code>group_vars\/webservers.yml<\/code> i\u00e7eri\u011fi:<\/strong><\/p>\n<pre><code class=\"language-yaml\"># Hassas bilgiler i\u00e7in ansible-vault kullan\u0131lmas\u0131 \u015fiddetle \u00f6nerilir.\n<h2>Bu \u00f6rnekte, \u015fifreler do\u011frudan g\u00f6r\u00fcn\u00fcr durumdad\u0131r.<\/h2>\n\nmysql_root_password: \"YOUR_VERY_STRONG_MYSQL_ROOT_PASSWORD\"\nmysql_db_name: \"my_website_db\"\nmysql_db_user: \"website_user\"\nmysql_db_password: \"YOUR_VERY_STRONG_WEBSITE_USER_PASSWORD\"\n\napache_servername: \"example.com\" # Kendi alan ad\u0131n\u0131z veya sunucu IP'niz\napache_document_root: \"\/var\/www\/html\/mywebapp\"\n\nphp_timezone: \"Europe\/Istanbul\"<\/code><\/pre>\n<p>Bu de\u011fi\u015fkenleri art\u0131k <code>defaults\/main.yml<\/code> dosyalar\u0131ndan kald\u0131rabilir veya bu dosyalar\u0131 bo\u015f b\u0131rakabilirsiniz. <code>group_vars<\/code> i\u00e7indeki de\u011fi\u015fkenler, <code>defaults<\/code> i\u00e7indeki ayn\u0131 isimli de\u011fi\u015fkenleri ezecektir.<\/p>\n<p><strong>Ansible Vault Kullan\u0131m\u0131:<\/strong><br \/>\n\u015eifreler gibi hassas bilgileri korumak i\u00e7in <code>ansible-vault<\/code> kullanmak en g\u00fcvenli yoldur.<br \/>\n1.  Bir vault dosyas\u0131 olu\u015fturun:<\/p>\n<pre><code class=\"language-bash\">ansible-vault create group_vars\/vault.yml<\/code><\/pre>\n<p>    Bu komut sizden bir \u015fifre isteyecek ve bu \u015fifreyi kullanarak dosyay\u0131 \u015fifreleyecektir.<br \/>\n2.  <code>vault.yml<\/code> i\u00e7ine hassas de\u011fi\u015fkenlerinizi ekleyin:<\/p>\n<pre><code class=\"language-yaml\">mysql_root_password: \"YOUR_VERY_STRONG_MYSQL_ROOT_PASSWORD\"\n    mysql_db_password: \"YOUR_VERY_STRONG_WEBSITE_USER_PASSWORD\"<\/code><\/pre>\n<p>3.  <code>group_vars\/webservers.yml<\/code> dosyas\u0131nda, bu vault dosyas\u0131n\u0131 dahil edin:<\/p>\n<pre><code class=\"language-yaml\"># group_vars\/webservers.yml\n    ---\n    # Hassas olmayan de\u011fi\u015fkenler\n    mysql_db_name: \"my_website_db\"\n    mysql_db_user: \"website_user\"\n    apache_servername: \"example.com\"\n    apache_document_root: \"\/var\/www\/html\/mywebapp\"\n    php_timezone: \"Europe\/Istanbul\"\n\n    # Hassas de\u011fi\u015fkenler i\u00e7in vault dosyas\u0131n\u0131 dahil et\n    - @vault | include_vars: vault.yml<\/code><\/pre>\n<p>    <strong>Not:<\/strong> Ansible&#8217;\u0131n modern s\u00fcr\u00fcmlerinde <code>include_vars<\/code> mod\u00fcl\u00fc direkt olarak <code>group_vars<\/code> i\u00e7inde kullan\u0131labilir. Ancak, eski s\u00fcr\u00fcmlerde veya daha karma\u015f\u0131k senaryolarda bu yap\u0131 farkl\u0131l\u0131k g\u00f6sterebilir. En basit yol, <code>vault.yml<\/code>&#8216;i ayr\u0131 bir <code>group_vars<\/code> dosyas\u0131 olarak tutmak ve playbook&#8217;u \u00e7al\u0131\u015ft\u0131r\u0131rken <code>--ask-vault-pass<\/code> kullanmakt\u0131r.<\/p>\n<p>    <strong>Alternatif (Daha Basit Vault Kullan\u0131m\u0131):<\/strong><br \/>\n    <code>group_vars\/webservers.yml<\/code> dosyas\u0131n\u0131 do\u011frudan vault ile \u015fifreleyebilirsiniz:<\/p>\n<pre><code class=\"language-bash\">ansible-vault encrypt group_vars\/webservers.yml<\/code><\/pre>\n<p>    Bu durumda, <code>webservers.yml<\/code> i\u00e7inde t\u00fcm de\u011fi\u015fkenleriniz (hem hassas hem de hassas olmayan) \u015fifreli olacakt\u0131r. Playbook&#8217;u \u00e7al\u0131\u015ft\u0131r\u0131rken <code>ansible-playbook --ask-vault-pass ...<\/code> komutunu kullanman\u0131z gerekecektir. Bu y\u00f6ntem, dosya y\u00f6netimi a\u00e7\u0131s\u0131ndan daha basittir.<\/p>\n<h3>Playbook&#8217;u \u00c7al\u0131\u015ft\u0131rma<\/h3>\n<p>T\u00fcm dosyalar\u0131 olu\u015fturup yap\u0131land\u0131rd\u0131ktan sonra, Ansible playbook&#8217;unu \u00e7al\u0131\u015ft\u0131rmaya haz\u0131rs\u0131n\u0131z. Kontrol makinenizin <code>lamp_ansible<\/code> dizininde oldu\u011fundan emin olun.<\/p>\n<pre><code class=\"language-bash\">ansible-playbook -i inventory.ini playbooks\/lamp_setup.yml --ask-become-pass<\/code><\/pre>\n<p>*   <code>-i inventory.ini<\/code>: Envanter dosyam\u0131z\u0131 belirtir.<br \/>\n*   <code>playbooks\/lamp_setup.yml<\/code>: \u00c7al\u0131\u015ft\u0131r\u0131lacak ana playbook dosyam\u0131z\u0131 belirtir.<br \/>\n*   <code>--ask-become-pass<\/code>: E\u011fer SSH anahtar\u0131n\u0131z <code>sudo<\/code> yetkisi i\u00e7in \u015fifre gerektiriyorsa veya hedef sunucuda <code>NOPASSWD<\/code> ayar\u0131 yap\u0131lmam\u0131\u015fsa, bu parametre <code>sudo<\/code> \u015fifresini sorman\u0131z\u0131 sa\u011flar. E\u011fer SSH anahtar\u0131n\u0131z <code>sudo<\/code> yetkisi i\u00e7in otomatik yetkilendirilmi\u015fse (veya <code>NOPASSWD<\/code> ayar\u0131 varsa), bu parametreye gerek kalmayabilir.<br \/>\n*   E\u011fer <code>ansible-vault<\/code> kulland\u0131ysan\u0131z ve <code>group_vars\/webservers.yml<\/code> dosyas\u0131n\u0131 \u015fifrelediyseniz, komuta <code>--ask-vault-pass<\/code> parametresini de eklemeniz gerekir:<\/p>\n<pre><code class=\"language-bash\">ansible-playbook -i inventory.ini playbooks\/lamp_setup.yml --ask-become-pass --ask-vault-pass<\/code><\/pre>\n<p>Ansible, g\u00f6revleri s\u0131rayla y\u00fcr\u00fctecek ve her ad\u0131m\u0131n ba\u015far\u0131l\u0131 olup olmad\u0131\u011f\u0131n\u0131 size bildirecektir. Her \u015fey yolunda giderse, playbook&#8217;un sonunda &#8220;PLAY RECAP&#8221; b\u00f6l\u00fcm\u00fcnde t\u00fcm g\u00f6revlerin ba\u015far\u0131yla tamamland\u0131\u011f\u0131n\u0131 g\u00f6rmelisiniz.<\/p>\n<h3>Kurulumu Do\u011frulama<\/h3>\n<p>Playbook ba\u015far\u0131yla \u00e7al\u0131\u015ft\u0131ktan sonra, LAMP y\u0131\u011f\u0131n\u0131n\u0131n hedef Ubuntu 18.04 sunucunuzda do\u011fru bir \u015fekilde kuruldu\u011fundan ve \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olman\u0131z gerekir.<\/p>\n<p>1.  <strong>SSH ile Hedef Sunucuya Ba\u011flan\u0131n:<\/strong><\/p>\n<pre><code class=\"language-bash\">ssh your_ssh_user@your_server_ip_address<\/code><\/pre>\n<p>2.  <strong>Apache Durumunu Kontrol Edin:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo systemctl status apache2<\/code><\/pre>\n<p>    \u00c7\u0131kt\u0131da <code>active (running)<\/code> ibaresini g\u00f6rmelisiniz.<\/p>\n<p>3.  <strong>MySQL Durumunu Kontrol Edin:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo systemctl status mysql<\/code><\/pre>\n<p>    \u00c7\u0131kt\u0131da <code>active (running)<\/code> ibaresini g\u00f6rmelisiniz.<\/p>\n<p>4.  <strong>PHP S\u00fcr\u00fcm\u00fcn\u00fc Kontrol Edin:<\/strong><\/p>\n<pre><code class=\"language-bash\">php -v<\/code><\/pre>\n<p>    Bu komut, kurulu PHP s\u00fcr\u00fcm\u00fcn\u00fc (muhtemelen PHP 7.2.x) g\u00f6stermelidir.<\/p>\n<p>5.  <strong>Web Taray\u0131c\u0131s\u0131 \u00dczerinden Test Edin:<\/strong><br \/>\n    Playbook, <code>apache_document_root<\/code> dizini alt\u0131nda bir <code>info.php<\/code> dosyas\u0131 olu\u015fturmu\u015ftu. Web taray\u0131c\u0131n\u0131z\u0131 a\u00e7\u0131n ve hedef sunucunuzun IP adresine veya yap\u0131land\u0131rd\u0131\u011f\u0131n\u0131z alan ad\u0131na giderek <code>http:\/\/your_server_ip_address\/info.php<\/code> adresini ziyaret edin.<br \/>\n    PHP bilgi sayfas\u0131n\u0131 (phpinfo()) g\u00f6rmelisiniz. Bu sayfa, PHP&#8217;nin do\u011fru \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 ve Apache ile entegre oldu\u011funu do\u011frular. Sayfan\u0131n en alt\u0131nda veya MySQL b\u00f6l\u00fcm\u00fcnde <code>mysql<\/code> veya <code>mysqli<\/code> uzant\u0131lar\u0131n\u0131n etkin oldu\u011funu kontrol edebilirsiniz.<\/p>\n<p>6.  <strong>MySQL Ba\u011flant\u0131s\u0131n\u0131 Test Edin:<\/strong><br \/>\n    MySQL veritaban\u0131na ve kullan\u0131c\u0131s\u0131na ba\u011flanmay\u0131 deneyin:<\/p>\n<pre><code class=\"language-bash\">mysql -u my_db_user -p my_website_db<\/code><\/pre>\n<p>    <code>my_db_user<\/code> ve <code>my_website_db<\/code> yerine kendi belirledi\u011finiz kullan\u0131c\u0131 ad\u0131 ve veritaban\u0131 ad\u0131n\u0131 kullan\u0131n. \u015eifre istendi\u011finde, <code>mysql_db_password<\/code> de\u011fi\u015fkeninde belirledi\u011finiz \u015fifreyi girin.<br \/>\n    Ba\u015far\u0131l\u0131 bir \u015fekilde ba\u011flan\u0131rsan\u0131z, MySQL komut istemine d\u00fc\u015feceksiniz. <code>show tables;<\/code> gibi basit bir komut \u00e7al\u0131\u015ft\u0131rarak ba\u011flant\u0131n\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 do\u011frulayabilirsiniz. \u00c7\u0131kmak i\u00e7in <code>exit;<\/code> yaz\u0131n.<\/p>\n<p>T\u00fcm bu kontroller ba\u015far\u0131l\u0131 olursa, LAMP y\u0131\u011f\u0131n\u0131n\u0131z\u0131n Ansible taraf\u0131ndan ba\u015far\u0131yla kuruldu\u011funu ve yap\u0131land\u0131r\u0131ld\u0131\u011f\u0131n\u0131 teyit etmi\u015f olursunuz.<\/p>\n<h3>Sonu\u00e7 ve \u0130leri Ad\u0131mlar<\/h3>\n<p>Bu makalede, Ansible&#8217;\u0131n g\u00fc\u00e7l\u00fc otomasyon yeteneklerini kullanarak Ubuntu 18.04 sunucusu \u00fczerine eksiksiz bir LAMP y\u0131\u011f\u0131n\u0131n\u0131n nas\u0131l kurulaca\u011f\u0131n\u0131 ve yap\u0131land\u0131r\u0131laca\u011f\u0131n\u0131 \u00f6\u011frendiniz. Ad\u0131m ad\u0131m bir proje yap\u0131s\u0131 olu\u015fturduk, Ansible rollerini tasarlad\u0131k ve her bir LAMP bile\u015feni i\u00e7in g\u00f6revleri tan\u0131mlad\u0131k. Ayr\u0131ca, de\u011fi\u015fken y\u00f6netimi ve hassas bilgilerin g\u00fcvenli bir \u015fekilde nas\u0131l saklanaca\u011f\u0131 konular\u0131na da de\u011findik.<\/p>\n<p>Ansible&#8217;\u0131n sundu\u011fu bu otomasyon, sunucu kurulum s\u00fcre\u00e7lerinizi standartla\u015ft\u0131rman\u0131za, hatalar\u0131 en aza indirmenize ve zaman i\u00e7inde tutarl\u0131l\u0131\u011f\u0131 sa\u011flaman\u0131za olanak tan\u0131r. Bir kez yaz\u0131lan playbook&#8217;lar, y\u00fczlerce sunucuya ayn\u0131 yap\u0131land\u0131rmay\u0131 uygulamak i\u00e7in tekrar tekrar kullan\u0131labilir.<\/p>\n<p><strong>\u0130leri Ad\u0131mlar ve Geli\u015ftirmeler:<\/strong><\/p>\n<p>1.  <strong>Ansible Vault Kullan\u0131m\u0131:<\/strong> Makalede bahsedildi\u011fi gibi, hassas bilgileri (\u015fifreler, API anahtarlar\u0131 vb.) <code>ansible-vault<\/code> ile \u015fifrelemek, g\u00fcvenlik a\u00e7\u0131s\u0131ndan kritik \u00f6neme sahiptir. Playbook&#8217;lar\u0131n\u0131z\u0131 \u00fcretim ortam\u0131nda kullanmadan \u00f6nce bu ad\u0131m\u0131 mutlaka uygulay\u0131n.<br \/>\n2.  <strong>Farkl\u0131 Ortamlar \u0130\u00e7in De\u011fi\u015fken Y\u00f6netimi:<\/strong> Geli\u015ftirme, test ve \u00fcretim gibi farkl\u0131 ortamlar i\u00e7in farkl\u0131 de\u011fi\u015fken de\u011ferleri tan\u0131mlamak amac\u0131yla <code>group_vars<\/code> ve <code>host_vars<\/code> dizinlerini daha etkin kullan\u0131n. \u00d6rne\u011fin, <code>group_vars\/development.yml<\/code> ve <code>group_vars\/production.yml<\/code> gibi dosyalar olu\u015fturabilirsiniz.<br \/>\n3.  <strong>HTTPS (SSL\/TLS) Yap\u0131land\u0131rmas\u0131:<\/strong> G\u00fcvenli web ileti\u015fimi i\u00e7in Apache&#8217;ye SSL sertifikas\u0131 (\u00f6rne\u011fin Let&#8217;s Encrypt ile) kurmak ve yap\u0131land\u0131rmak i\u00e7in Ansible g\u00f6revleri ekleyebilirsiniz.<br \/>\n4.  <strong>Veritaban\u0131 Yedekleme ve Y\u00f6netimi:<\/strong> MySQL veritabanlar\u0131n\u0131z i\u00e7in periyodik yedekleme g\u00f6revleri veya veritaban\u0131 \u015femas\u0131n\u0131 y\u00f6neten ek Ansible g\u00f6revleri olu\u015fturabilirsiniz.<br \/>\n5.  <strong>Uygulama Da\u011f\u0131t\u0131m\u0131:<\/strong> LAMP y\u0131\u011f\u0131n\u0131 kurulduktan sonra, kendi PHP uygulaman\u0131z\u0131n kodunu sunucuya da\u011f\u0131tmak ve gerekli izinleri ayarlamak i\u00e7in Ansible kullanabilirsiniz. Bu, <code>git<\/code> mod\u00fcl\u00fc veya <code>copy<\/code> mod\u00fcl\u00fc ile kolayca yap\u0131labilir.<br \/>\n6.  <strong>G\u00fcvenlik \u0130yile\u015ftirmeleri:<\/strong> Fail2ban gibi ara\u00e7lar\u0131 kurarak SSH ve web sunucusu sald\u0131r\u0131lar\u0131na kar\u015f\u0131 koruma sa\u011flayabilir, veya ek g\u00fcvenlik duvar\u0131 kurallar\u0131 tan\u0131mlayabilirsiniz.<br \/>\n7.  <strong>Monitoring ve Logging:<\/strong> Prometheus, Grafana veya ELK Stack (Elasticsearch, Logstash, Kibana) gibi izleme ve g\u00fcnl\u00fckleme ara\u00e7lar\u0131n\u0131 kurmak ve entegre etmek i\u00e7in Ansible rolleri geli\u015ftirebilirsiniz.<br \/>\n8.  <strong>CI\/CD Entegrasyonu:<\/strong> Ansible playbook&#8217;lar\u0131n\u0131z\u0131 Jenkins, GitLab CI\/CD veya GitHub Actions gibi s\u00fcrekli entegrasyon\/s\u00fcrekli da\u011f\u0131t\u0131m (CI\/CD) boru hatlar\u0131na entegre ederek, altyap\u0131 de\u011fi\u015fikliklerini otomatik olarak test edip da\u011f\u0131tabilirsiniz.<\/p>\n<p>Ansible, altyap\u0131 otomasyonu d\u00fcnyas\u0131nda size s\u0131n\u0131rs\u0131z olanaklar sunar. Bu makaledeki LAMP kurulumu, bu yolculu\u011fun sadece bir ba\u015flang\u0131c\u0131d\u0131r. Ansible&#8217;\u0131n derinliklerine indik\u00e7e, altyap\u0131 y\u00f6netim s\u00fcre\u00e7lerinizi ne kadar basitle\u015ftirebilece\u011finizi ve h\u0131zland\u0131rabilece\u011finizi ke\u015ffedeceksiniz.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Ansible ile Ubuntu 18.04 \u00dczerine LAMP Kurulumu ve Yap\u0131land\u0131rmas\u0131\nGiri\u015f\nG\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen teknoloji d\u00fcnyas\u0131nda, sunucu kurulumu ve","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":[1468],"tags":[],"class_list":{"0":"post-37409","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-ubuntu","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>Ansible ile Ubuntu 18.04 \u00dczerine LAMP Kurulumu ve Yap\u0131land\u0131rmas\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\/ansible-ile-ubuntu-18-04-uzerine-lamp-kurulumu-ve-yapilandirmasi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ansible ile Ubuntu 18.04 \u00dczerine LAMP Kurulumu ve Yap\u0131land\u0131rmas\u0131\" \/>\n<meta property=\"og:description\" content=\"Ansible ile Ubuntu 18.04 \u00dczerine LAMP Kurulumu ve Yap\u0131land\u0131rmas\u0131 Giri\u015f G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen teknoloji d\u00fcnyas\u0131nda, sunucu kurulumu ve\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lamp-kurulumu-ve-yapilandirmasi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-03T14:41:00+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=\"21 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lamp-kurulumu-ve-yapilandirmasi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lamp-kurulumu-ve-yapilandirmasi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Ansible ile Ubuntu 18.04 \u00dczerine LAMP Kurulumu ve Yap\u0131land\u0131rmas\u0131\",\"datePublished\":\"2026-01-03T14:41:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lamp-kurulumu-ve-yapilandirmasi\/\"},\"wordCount\":2430,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Ubuntu\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lamp-kurulumu-ve-yapilandirmasi\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lamp-kurulumu-ve-yapilandirmasi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lamp-kurulumu-ve-yapilandirmasi\/\",\"name\":\"Ansible ile Ubuntu 18.04 \u00dczerine LAMP Kurulumu ve Yap\u0131land\u0131rmas\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-01-03T14:41:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lamp-kurulumu-ve-yapilandirmasi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lamp-kurulumu-ve-yapilandirmasi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lamp-kurulumu-ve-yapilandirmasi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ansible ile Ubuntu 18.04 \u00dczerine LAMP Kurulumu ve Yap\u0131land\u0131rmas\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":"Ansible ile Ubuntu 18.04 \u00dczerine LAMP Kurulumu ve Yap\u0131land\u0131rmas\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\/ansible-ile-ubuntu-18-04-uzerine-lamp-kurulumu-ve-yapilandirmasi\/","og_locale":"tr_TR","og_type":"article","og_title":"Ansible ile Ubuntu 18.04 \u00dczerine LAMP Kurulumu ve Yap\u0131land\u0131rmas\u0131","og_description":"Ansible ile Ubuntu 18.04 \u00dczerine LAMP Kurulumu ve Yap\u0131land\u0131rmas\u0131 Giri\u015f G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen teknoloji d\u00fcnyas\u0131nda, sunucu kurulumu ve","og_url":"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lamp-kurulumu-ve-yapilandirmasi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-01-03T14:41:00+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"21 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lamp-kurulumu-ve-yapilandirmasi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lamp-kurulumu-ve-yapilandirmasi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Ansible ile Ubuntu 18.04 \u00dczerine LAMP Kurulumu ve Yap\u0131land\u0131rmas\u0131","datePublished":"2026-01-03T14:41:00+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lamp-kurulumu-ve-yapilandirmasi\/"},"wordCount":2430,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Ubuntu"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lamp-kurulumu-ve-yapilandirmasi\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lamp-kurulumu-ve-yapilandirmasi\/","url":"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lamp-kurulumu-ve-yapilandirmasi\/","name":"Ansible ile Ubuntu 18.04 \u00dczerine LAMP Kurulumu ve Yap\u0131land\u0131rmas\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-01-03T14:41:00+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lamp-kurulumu-ve-yapilandirmasi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lamp-kurulumu-ve-yapilandirmasi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lamp-kurulumu-ve-yapilandirmasi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Ansible ile Ubuntu 18.04 \u00dczerine LAMP Kurulumu ve Yap\u0131land\u0131rmas\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\/37409","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=37409"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37409\/revisions"}],"predecessor-version":[{"id":37410,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37409\/revisions\/37410"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=37409"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=37409"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=37409"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}