{"id":37559,"date":"2026-01-09T07:40:45","date_gmt":"2026-01-09T04:40:45","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=37559"},"modified":"2026-01-09T07:40:45","modified_gmt":"2026-01-09T04:40:45","slug":"ansible-ile-ubuntu-18-04-uzerine-lemp-kurulumu-ve-yapilandirmasi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lemp-kurulumu-ve-yapilandirmasi\/","title":{"rendered":"Ansible ile Ubuntu 18.04 \u00dczerine LEMP Kurulumu ve Yap\u0131land\u0131rmas\u0131"},"content":{"rendered":"<p><body><\/p>\n<h2>Ansible ile Ubuntu 18.04 \u00dczerine LEMP Kurulumu ve Yap\u0131land\u0131rmas\u0131<\/h2>\n<p>Ansible, modern BT altyap\u0131lar\u0131nda otomasyonun temel ta\u015flar\u0131ndan biridir. Sunucu yap\u0131land\u0131rmas\u0131, uygulama da\u011f\u0131t\u0131m\u0131 ve orkestrasyon gibi karma\u015f\u0131k g\u00f6revleri basitle\u015ftirerek, sistem y\u00f6neticilerinin ve DevOps m\u00fchendislerinin i\u015f y\u00fck\u00fcn\u00fc \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r. Bu teknik makalede, Ansible kullanarak Ubuntu 18.04 i\u015fletim sistemi \u00fczerinde pop\u00fcler bir web sunucu y\u0131\u011f\u0131n\u0131 olan LEMP&#8217;yi (Linux, Nginx, MySQL\/MariaDB, PHP-FPM) nas\u0131l kurup yap\u0131land\u0131raca\u011f\u0131m\u0131z\u0131 ad\u0131m ad\u0131m inceleyece\u011fiz.<\/p>\n<p>LEMP y\u0131\u011f\u0131n\u0131, y\u00fcksek performansl\u0131 web uygulamalar\u0131 ve dinamik web siteleri i\u00e7in tercih edilen g\u00fc\u00e7l\u00fc bir kombinasyondur. Nginx, d\u00fc\u015f\u00fck kaynak t\u00fcketimiyle y\u00fcksek e\u015fzamanl\u0131 ba\u011flant\u0131lar\u0131 i\u015fleyebilirken, PHP-FPM dinamik i\u00e7erik i\u015fleme yetene\u011fi sunar. MariaDB ise g\u00fcvenilir ve h\u0131zl\u0131 bir veritaban\u0131 \u00e7\u00f6z\u00fcm\u00fcd\u00fcr. Bu bile\u015fenlerin manuel olarak kurulmas\u0131 ve yap\u0131land\u0131r\u0131lmas\u0131 zaman al\u0131c\u0131 ve hataya a\u00e7\u0131k bir s\u00fcre\u00e7 olabilir. Ansible sayesinde, bu s\u00fcreci tamamen otomatikle\u015ftirerek tekrarlanabilir, tutarl\u0131 ve \u00f6l\u00e7eklenebilir bir \u00e7\u00f6z\u00fcm elde edece\u011fiz.<\/p>\n<h3>1. Giri\u015f ve \u00d6n Ko\u015fullar<\/h3>\n<p>Bu rehber, bir Ansible kontrol sunucunuzun (genellikle yerel makineniz veya ayr\u0131 bir sunucu) oldu\u011funu ve hedef Ubuntu 18.04 sunucusuna SSH eri\u015fiminizin oldu\u011funu varsaymaktad\u0131r. Ansible, Python tabanl\u0131 oldu\u011fu i\u00e7in kontrol sunucunuzda Python 3 ve pip&#8217;in kurulu olmas\u0131 gerekmektedir.<\/p>\n<h4>1.1. Ansible Kontrol Sunucusu Haz\u0131rl\u0131\u011f\u0131<\/h4>\n<p>1.  <strong>Python ve pip Kurulumu (Gerekliyse):<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo apt update\n    sudo apt install python3 python3-pip -y<\/code><\/pre>\n<p>2.  <strong>Ansible Kurulumu:<\/strong><\/p>\n<pre><code class=\"language-bash\">pip3 install ansible<\/code><\/pre>\n<p>3.  <strong>SSH Anahtar \u00c7ifti Olu\u015fturma:<\/strong><br \/>\n    Hedef sunuculara parola girmeden ba\u011flanabilmek i\u00e7in SSH anahtar \u00e7ifti olu\u015fturmak en iyi uygulamad\u0131r.<\/p>\n<pre><code class=\"language-bash\">ssh-keygen -t rsa -b 4096<\/code><\/pre>\n<p>    T\u00fcm sorular\u0131 varsay\u0131lan olarak kabul edebilirsiniz.<br \/>\n4.  <strong>SSH Anahtar\u0131n\u0131 Hedef Sunucuya Kopyalama:<\/strong><br \/>\n    <code>your_user<\/code> k\u0131sm\u0131n\u0131 hedef sunucudaki kullan\u0131c\u0131 ad\u0131n\u0131zla, <code>your_server_ip<\/code> k\u0131sm\u0131n\u0131 ise hedef sunucunun IP adresiyle de\u011fi\u015ftirin.<\/p>\n<pre><code class=\"language-bash\">ssh-copy-id your_user@your_server_ip<\/code><\/pre>\n<p>    Bu komut, anahtar\u0131n\u0131z\u0131 hedef sunucudaki kullan\u0131c\u0131n\u0131n <code>~\/.ssh\/authorized_keys<\/code> dosyas\u0131na ekleyecektir.<\/p>\n<h4>1.2. Hedef Ubuntu 18.04 Sunucusu Haz\u0131rl\u0131\u011f\u0131<\/h4>\n<p>Hedef sunucuda temel bir Ubuntu 18.04 kurulumu yeterlidir. Ansible&#8217;\u0131n sorunsuz \u00e7al\u0131\u015fabilmesi i\u00e7in hedef sunucuda <code>python3<\/code> ve <code>sudo<\/code> yetkisine sahip bir kullan\u0131c\u0131ya ihtiyac\u0131m\u0131z var. Ansible, varsay\u0131lan olarak <code>root<\/code> kullan\u0131c\u0131s\u0131 yerine <code>sudo<\/code> yetkili bir kullan\u0131c\u0131 ile ba\u011flanmay\u0131 tercih eder.<\/p>\n<p>*   Sistemi g\u00fcncelleyin: <code>sudo apt update && sudo apt upgrade -y<\/code><br \/>\n*   <code>python3<\/code> kurulu oldu\u011fundan emin olun. Ubuntu 18.04&#8217;te varsay\u0131lan olarak gelir.<br \/>\n*   Ansible&#8217;\u0131n <code>apt<\/code> mod\u00fcl\u00fcn\u00fc kullanabilmesi i\u00e7in <code>python3-apt<\/code> paketinin kurulu olmas\u0131 \u00f6nemlidir. Genellikle Ansible bunu otomatik kurar, ancak manuel olarak da kontrol edilebilir: <code>sudo apt install python3-apt -y<\/code><\/p>\n<h3>2. Ansible Proje Yap\u0131s\u0131 Olu\u015fturma<\/h3>\n<p>Ansible ile \u00e7al\u0131\u015f\u0131rken, d\u00fczenli bir proje yap\u0131s\u0131 olu\u015fturmak iyi bir uygulamad\u0131r. Bu, playbook&#8217;lar\u0131n\u0131z\u0131n, envanterinizin ve rollerinizin daha y\u00f6netilebilir olmas\u0131n\u0131 sa\u011flar.<\/p>\n<pre><code class=\"language-\">lemp_ansible\/\n\u251c\u2500\u2500 ansible.cfg\n\u251c\u2500\u2500 inventory.ini\n\u251c\u2500\u2500 playbooks\/\n\u2502   \u2514\u2500\u2500 main.yml\n\u2514\u2500\u2500 roles\/\n    \u251c\u2500\u2500 common\/\n    \u2502   \u251c\u2500\u2500 tasks\/\n    \u2502   \u2502   \u2514\u2500\u2500 main.yml\n    \u2502   \u2514\u2500\u2500 handlers\/\n    \u2502       \u2514\u2500\u2500 main.yml\n    \u251c\u2500\u2500 mariadb\/\n    \u2502   \u251c\u2500\u2500 tasks\/\n    \u2502   \u2502   \u2514\u2500\u2500 main.yml\n    \u2502   \u251c\u2500\u2500 handlers\/\n    \u2502   \u2502   \u2514\u2500\u2500 main.yml\n    \u2502   \u2514\u2500\u2500 defaults\/\n    \u2502       \u2514\u2500\u2500 main.yml\n    \u251c\u2500\u2500 nginx\/\n    \u2502   \u251c\u2500\u2500 tasks\/\n    \u2502   \u2502   \u2514\u2500\u2500 main.yml\n    \u2502   \u251c\u2500\u2500 handlers\/\n    \u2502   \u2502   \u2514\u2500\u2500 main.yml\n    \u2502   \u2514\u2500\u2500 templates\/\n    \u2502       \u251c\u2500\u2500 default.conf.j2\n    \u2502       \u2514\u2500\u2500 nginx.conf.j2\n    \u2514\u2500\u2500 php\/\n        \u251c\u2500\u2500 tasks\/\n        \u2502   \u2514\u2500\u2500 main.yml\n        \u2514\u2500\u2500 handlers\/\n            \u2514\u2500\u2500 main.yml<\/code><\/pre>\n<p>Bu yap\u0131, her bir LEMP bile\u015feni i\u00e7in ayr\u0131 bir rol tan\u0131mlamam\u0131z\u0131 sa\u011flar. <code>common<\/code> rol\u00fc, t\u00fcm sunucularda yap\u0131lmas\u0131 gereken genel sistem g\u00fcncellemeleri ve temel paket kurulumlar\u0131 gibi g\u00f6revleri i\u00e7erir.<\/p>\n<h3>3. Temel Ansible Yap\u0131land\u0131rmas\u0131<\/h3>\n<p>Proje dizininin k\u00f6k\u00fcnde (<code>lemp_ansible\/<\/code>) a\u015fa\u011f\u0131daki dosyalar\u0131 olu\u015ftural\u0131m:<\/p>\n<h4>3.1. <code>inventory.ini<\/code><\/h4>\n<p>Bu dosya, Ansible&#8217;\u0131n y\u00f6nete\u011fi hedef sunucular\u0131 tan\u0131mlar.<\/p>\n<pre><code class=\"language-ini\">[lemp_servers]\nyour_server_ip_or_hostname ansible_user=your_ssh_user ansible_python_interpreter=\/usr\/bin\/python3<\/code><\/pre>\n<p>*   <code>[lemp_servers]<\/code>: Hedef sunucular\u0131m\u0131z\u0131 grupland\u0131ran bir grup ad\u0131.<br \/>\n*   <code>your_server_ip_or_hostname<\/code>: Hedef sunucunuzun IP adresi veya ana bilgisayar ad\u0131.<br \/>\n*   <code>ansible_user<\/code>: Hedef sunucuya ba\u011flanmak i\u00e7in kullan\u0131lacak SSH kullan\u0131c\u0131 ad\u0131 (SSH anahtar\u0131n\u0131 kopyalad\u0131\u011f\u0131n\u0131z kullan\u0131c\u0131).<br \/>\n*   <code>ansible_python_interpreter<\/code>: Ansible&#8217;\u0131n hedef sunucuda kullanaca\u011f\u0131 Python yorumlay\u0131c\u0131s\u0131n\u0131n yolu. Ubuntu 18.04 i\u00e7in <code>\/usr\/bin\/python3<\/code> olmal\u0131d\u0131r.<\/p>\n<h4>3.2. <code>ansible.cfg<\/code><\/h4>\n<p>Bu dosya, Ansible&#8217;\u0131n varsay\u0131lan davran\u0131\u015flar\u0131n\u0131 yap\u0131land\u0131rmak i\u00e7in kullan\u0131l\u0131r.<\/p>\n<pre><code class=\"language-ini\">[defaults]\ninventory = inventory.ini\nremote_user = your_ssh_user\nask_pass = False\nhost_key_checking = False\nroles_path = roles<\/code><\/pre>\n<p>*   <code>inventory<\/code>: Envanter dosyam\u0131z\u0131n yolu.<br \/>\n*   <code>remote_user<\/code>: E\u011fer <code>inventory.ini<\/code> i\u00e7inde belirtilmezse, varsay\u0131lan olarak kullan\u0131lacak uzak kullan\u0131c\u0131.<br \/>\n*   <code>ask_pass<\/code>: SSH parolas\u0131 sormay\u0131 devre d\u0131\u015f\u0131 b\u0131rak\u0131r (SSH anahtarlar\u0131 kulland\u0131\u011f\u0131m\u0131z i\u00e7in).<br \/>\n*   <code>host_key_checking<\/code>: Yeni sunuculara ba\u011flan\u0131rken SSH anahtar kontrol\u00fcn\u00fc devre d\u0131\u015f\u0131 b\u0131rak\u0131r (test ortamlar\u0131 i\u00e7in kullan\u0131\u015fl\u0131d\u0131r, \u00fcretimde dikkatli olunmal\u0131d\u0131r).<br \/>\n*   <code>roles_path<\/code>: Rollerin bulundu\u011fu dizinin yolu.<\/p>\n<h3>4. Ansible Rollerini Olu\u015fturma ve Yap\u0131land\u0131rma<\/h3>\n<p>\u015eimdi s\u0131ra, LEMP y\u0131\u011f\u0131n\u0131n\u0131n her bir bile\u015feni i\u00e7in rolleri tan\u0131mlamaya geldi.<\/p>\n<h4>4.1. <code>common<\/code> Rol\u00fc<\/h4>\n<p>Bu rol, hedef sunucudaki i\u015fletim sistemini g\u00fcncelleyecek ve temel paketleri kuracakt\u0131r.<\/p>\n<p>*   <strong><code>roles\/common\/tasks\/main.yml<\/code>:<\/strong><\/p>\n<pre><code class=\"language-yaml\">---\n    - name: Update apt cache\n      apt:\n        update_cache: yes\n        cache_valid_time: 3600 # Cache'i 1 saat ge\u00e7erli tut\n\n    - name: Upgrade all installed packages\n      apt:\n        upgrade: dist\n        autoremove: yes\n\n    - name: Install common packages\n      apt:\n        name:\n          - curl\n          - git\n          - unzip\n          - htop\n          - net-tools\n          - python3-apt # apt mod\u00fcl\u00fcn\u00fcn d\u00fczg\u00fcn \u00e7al\u0131\u015fmas\u0131 i\u00e7in\n          - aptitude # apt mod\u00fcl\u00fcn\u00fcn baz\u0131 ba\u011f\u0131ml\u0131l\u0131klar\u0131 i\u00e7in\n        state: present\n\n    - name: Install UFW (Uncomplicated Firewall)\n      apt:\n        name: ufw\n        state: present\n\n    - name: Allow SSH traffic\n      ufw:\n        rule: allow\n        name: OpenSSH\n\n    - name: Allow HTTP traffic\n      ufw:\n        rule: allow\n        port: '80'\n        proto: tcp\n\n    - name: Allow HTTPS traffic\n      ufw:\n        rule: allow\n        port: '443'\n        proto: tcp\n\n    - name: Enable UFW\n      ufw:\n        state: enabled\n        policy: deny # Varsay\u0131lan olarak t\u00fcm gelen ba\u011flant\u0131lar\u0131 reddet<\/code><\/pre>\n<p>*   <strong><code>roles\/common\/handlers\/main.yml<\/code>:<\/strong> (Bu rol i\u00e7in \u00f6zel bir handler&#8217;a gerek yok, ancak standart olarak olu\u015fturulabilir.)<\/p>\n<pre><code class=\"language-yaml\">---\n    # Bu rol i\u00e7in \u00f6zel bir handler'a gerek yok.<\/code><\/pre>\n<h4>4.2. <code>nginx<\/code> Rol\u00fc<\/h4>\n<p>Bu rol, Nginx web sunucusunu kuracak, yap\u0131land\u0131racak ve ba\u015flatacakt\u0131r.<\/p>\n<p>*   <strong><code>roles\/nginx\/tasks\/main.yml<\/code>:<\/strong><\/p>\n<pre><code class=\"language-yaml\">---\n    - name: Install Nginx\n      apt:\n        name: nginx\n        state: present\n\n    - name: Copy Nginx main configuration file\n      template:\n        src: nginx.conf.j2\n        dest: \/etc\/nginx\/nginx.conf\n      notify: Restart Nginx\n\n    - name: Remove default Nginx site configuration\n      file:\n        path: \/etc\/nginx\/sites-enabled\/default\n        state: absent\n      notify: Restart Nginx\n\n    - name: Copy Nginx default site configuration\n      template:\n        src: default.conf.j2\n        dest: \/etc\/nginx\/sites-available\/default\n      notify: Restart Nginx\n\n    - name: Enable Nginx default site\n      file:\n        src: \/etc\/nginx\/sites-available\/default\n        dest: \/etc\/nginx\/sites-enabled\/default\n        state: link\n      notify: Restart Nginx\n\n    - name: Ensure Nginx service is running and enabled\n      systemd:\n        name: nginx\n        state: started\n        enabled: yes<\/code><\/pre>\n<p>*   <strong><code>roles\/nginx\/handlers\/main.yml<\/code>:<\/strong><\/p>\n<pre><code class=\"language-yaml\">---\n    - name: Restart Nginx\n      systemd:\n        name: nginx\n        state: restarted<\/code><\/pre>\n<p>*   <strong><code>roles\/nginx\/templates\/nginx.conf.j2<\/code>:<\/strong> (Basit bir \u00f6rnek, daha fazla optimizasyon yap\u0131labilir.)<\/p>\n<pre><code class=\"language-nginx\">user www-data;\n    worker_processes auto;\n    pid \/run\/nginx.pid;\n    include \/etc\/nginx\/modules-enabled\/*.conf;\n\n    events {\n        worker_connections 768;\n        # multi_accept on;\n    }\n\n    http {\n        sendfile on;\n        tcp_nopush on;\n        tcp_nodelay on;\n        keepalive_timeout 65;\n        types_hash_max_size 2048;\n\n        include \/etc\/nginx\/mime.types;\n        default_type application\/octet-stream;\n\n        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE\n        ssl_prefer_server_ciphers on;\n\n        access_log \/var\/log\/nginx\/access.log;\n        error_log \/var\/log\/nginx\/error.log;\n\n        gzip on;\n\n        include \/etc\/nginx\/conf.d\/*.conf;\n        include \/etc\/nginx\/sites-enabled\/*;\n    }<\/code><\/pre>\n<p>*   <strong><code>roles\/nginx\/templates\/default.conf.j2<\/code>:<\/strong> (PHP-FPM ile entegrasyonu g\u00f6steren \u00f6rnek.)<\/p>\n<pre><code class=\"language-nginx\">server {\n        listen 80 default_server;\n        listen [::]:80 default_server;\n\n        root \/var\/www\/html;\n        index index.php index.html index.htm index.nginx-debian.html;\n\n        server_name _;\n\n        location \/ {\n            try_files $uri $uri\/ =404;\n        }\n\n        location ~ \\.php$ {\n            include snippets\/fastcgi-php.conf;\n            fastcgi_pass unix:\/var\/run\/php\/php{{ php_version }}-fpm.sock; # php_version de\u011fi\u015fkeni kullan\u0131lacak\n            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n            include fastcgi_params;\n        }\n\n        # deny access to .htaccess files, if Apache's document root\n        # concurs with nginx's one\n        #\n        location ~ \/\\.ht {\n            deny all;\n        }\n    }<\/code><\/pre>\n<p>    Burada <code>php_version<\/code> diye bir de\u011fi\u015fken kulland\u0131k. Bu de\u011fi\u015fkeni <code>group_vars\/lemp_servers.yml<\/code> veya <code>playbooks\/main.yml<\/code> i\u00e7inde tan\u0131mlayaca\u011f\u0131z. Ubuntu 18.04 i\u00e7in varsay\u0131lan PHP s\u00fcr\u00fcm\u00fc 7.2&#8217;dir.<\/p>\n<h4>4.3. <code>mariadb<\/code> Rol\u00fc<\/h4>\n<p>Bu rol, MariaDB veritaban\u0131 sunucusunu kuracak, g\u00fcvenli\u011fini sa\u011flayacak ve bir veritaban\u0131 ile kullan\u0131c\u0131 olu\u015fturacakt\u0131r.<\/p>\n<p>*   <strong><code>roles\/mariadb\/tasks\/main.yml<\/code>:<\/strong><\/p>\n<pre><code class=\"language-yaml\">---\n    - name: Install MariaDB server and client\n      apt:\n        name:\n          - mariadb-server\n          - mariadb-client\n        state: present\n\n    - name: Ensure MariaDB service is running and enabled\n      systemd:\n        name: mariadb\n        state: started\n        enabled: yes\n\n    - name: Set MariaDB root password\n      community.mysql.mysql_user:\n        name: root\n        password: \"{{ mariadb_root_password }}\"\n        host: localhost\n        login_unix_socket: \/var\/run\/mysqld\/mysqld.sock\n        check_password_exists: no # \u0130lk kurulumda \u015fifre olmad\u0131\u011f\u0131 i\u00e7in kontrol etme\n      no_log: true # \u015eifreyi loglara yazd\u0131rmamak i\u00e7in\n\n    - name: Remove anonymous users\n      community.mysql.mysql_user:\n        name: ''\n        host: \"{{ item }}\"\n        state: absent\n        login_user: root\n        login_password: \"{{ mariadb_root_password }}\"\n      with_items:\n        - localhost\n        - \"{{ ansible_hostname }}\"\n      no_log: true\n\n    - name: Remove test database\n      community.mysql.mysql_db:\n        name: test\n        state: absent\n        login_user: root\n        login_password: \"{{ mariadb_root_password }}\"\n      no_log: true\n\n    - name: Create database\n      community.mysql.mysql_db:\n        name: \"{{ mariadb_database }}\"\n        state: present\n        login_user: root\n        login_password: \"{{ mariadb_root_password }}\"\n      no_log: true\n\n    - name: Create database user\n      community.mysql.mysql_user:\n        name: \"{{ mariadb_user }}\"\n        password: \"{{ mariadb_password }}\"\n        host: localhost\n        priv: \"{{ mariadb_database }}.*:ALL\"\n        state: present\n        login_user: root\n        login_password: \"{{ mariadb_root_password }}\"\n      no_log: true\n\n    - name: Flush privileges\n      community.mysql.mysql_query:\n        query: FLUSH PRIVILEGES;\n        login_user: root\n        login_password: \"{{ mariadb_root_password }}\"\n      no_log: true<\/code><\/pre>\n<p>    MariaDB g\u00f6revleri i\u00e7in <code>community.mysql<\/code> koleksiyonuna ihtiyac\u0131m\u0131z var. Bunu Ansible kontrol sunucusunda kurmal\u0131y\u0131z: <code>ansible-galaxy collection install community.mysql<\/code>.<\/p>\n<p>*   <strong><code>roles\/mariadb\/handlers\/main.yml<\/code>:<\/strong><\/p>\n<pre><code class=\"language-yaml\">---\n    - name: Restart MariaDB\n      systemd:\n        name: mariadb\n        state: restarted<\/code><\/pre>\n<p>*   <strong><code>roles\/mariadb\/defaults\/main.yml<\/code>:<\/strong> (Varsay\u0131lan de\u011ferler, <code>group_vars<\/code> veya <code>vault<\/code> ile \u00fczerine yaz\u0131labilir.)<\/p>\n<pre><code class=\"language-yaml\">---\n    mariadb_root_password: \"your_strong_root_password\"\n    mariadb_database: \"your_database_name\"\n    mariadb_user: \"your_database_user\"\n    mariadb_password: \"your_strong_database_password\"<\/code><\/pre>\n<p>    <strong>\u00d6NEML\u0130:<\/strong> \u015eifreler gibi hassas verileri do\u011frudan bu dosyada b\u0131rakmak yerine Ansible Vault kullanmal\u0131y\u0131z. Bunu bir sonraki b\u00f6l\u00fcmde ele alaca\u011f\u0131z.<\/p>\n<h4>4.4. <code>php<\/code> Rol\u00fc<\/h4>\n<p>Bu rol, PHP-FPM&#8217;i ve gerekli PHP mod\u00fcllerini kuracak, yap\u0131land\u0131racak ve ba\u015flatacakt\u0131r.<\/p>\n<p>*   <strong><code>roles\/php\/tasks\/main.yml<\/code>:<\/strong><\/p>\n<pre><code class=\"language-yaml\">---\n    - name: Install PHP-FPM and common PHP modules for Ubuntu 18.04 (PHP 7.2)\n      apt:\n        name:\n          - php{{ php_version }}-fpm\n          - php{{ php_version }}-mysql\n          - php{{ php_version }}-cli\n          - php{{ php_version }}-gd\n          - php{{ php_version }}-curl\n          - php{{ php_version }}-mbstring\n          - php{{ php_version }}-xml\n          - php{{ php_version }}-zip\n          - php{{ php_version }}-intl\n        state: present\n\n    - name: Ensure PHP-FPM service is running and enabled\n      systemd:\n        name: php{{ php_version }}-fpm\n        state: started\n        enabled: yes\n      notify: Restart PHP-FPM<\/code><\/pre>\n<p>*   <strong><code>roles\/php\/handlers\/main.yml<\/code>:<\/strong><\/p>\n<pre><code class=\"language-yaml\">---\n    - name: Restart PHP-FPM\n      systemd:\n        name: php{{ php_version }}-fpm\n        state: restarted<\/code><\/pre>\n<p>    Burada da <code>php_version<\/code> de\u011fi\u015fkenini kullan\u0131yoruz.<\/p>\n<h3>5. Ana Playbook (<code>main.yml<\/code>)<\/h3>\n<p>\u015eimdi t\u00fcm bu rolleri bir araya getiren ana playbook&#8217;u olu\u015ftural\u0131m.<\/p>\n<p>*   <strong><code>playbooks\/main.yml<\/code>:<\/strong><\/p>\n<pre><code class=\"language-yaml\">---\n    - name: Setup LEMP stack on Ubuntu 18.04\n      hosts: lemp_servers\n      become: yes # T\u00fcm g\u00f6revleri sudo ile \u00e7al\u0131\u015ft\u0131r\n      vars:\n        php_version: \"7.2\" # Ubuntu 18.04 i\u00e7in varsay\u0131lan PHP s\u00fcr\u00fcm\u00fc\n\n      pre_tasks:\n        - name: Ensure python3-apt is installed on target hosts\n          raw: test -e \/usr\/bin\/python3 || (apt update && apt install -y python3 python3-apt)\n          changed_when: false # Bu komutun idempotent olmamas\u0131 durumunda bile \"changed\" olarak i\u015faretlenmesini engeller\n\n      roles:\n        - common\n        - nginx\n        - mariadb\n        - php<\/code><\/pre>\n<p>    <code>pre_tasks<\/code> b\u00f6l\u00fcm\u00fc, Ansible&#8217;\u0131n ilk ba\u011flant\u0131s\u0131nda <code>python3-apt<\/code> paketinin kurulu oldu\u011fundan emin olmak i\u00e7in eklenmi\u015ftir. Bu, \u00f6zellikle minimal sunucu kurulumlar\u0131nda Ansible&#8217;\u0131n <code>apt<\/code> mod\u00fcl\u00fcn\u00fc kullanmadan \u00f6nce gerekli Python mod\u00fcl\u00fcn\u00fc y\u00fcklemesine olanak tan\u0131r.<\/p>\n<h3>6. Hassas Verilerin Y\u00f6netimi (Ansible Vault Kullan\u0131m\u0131)<\/h3>\n<p>Veritaban\u0131 \u015fifreleri gibi hassas bilgileri do\u011frudan playbook veya rol dosyalar\u0131nda saklamak g\u00fcvenlik a\u00e7\u0131s\u0131ndan risklidir. Ansible Vault, bu t\u00fcr verileri \u015fifrelemek ve g\u00fcvenli bir \u015fekilde y\u00f6netmek i\u00e7in kullan\u0131l\u0131r.<\/p>\n<p>1.  <strong>Vault Dosyas\u0131 Olu\u015fturma:<\/strong><\/p>\n<pre><code class=\"language-bash\">ansible-vault create group_vars\/lemp_servers.yml<\/code><\/pre>\n<p>    Bu komut sizden bir parola isteyecektir. Bu parolay\u0131 unutmay\u0131n! Dosya bir metin d\u00fczenleyicide a\u00e7\u0131lacak ve buraya hassas de\u011fi\u015fkenleri ekleyebilirsiniz:<\/p>\n<pre><code class=\"language-yaml\">mariadb_root_password: \"your_super_strong_root_password\"\n    mariadb_database: \"my_webapp_db\"\n    mariadb_user: \"webapp_user\"\n    mariadb_password: \"your_super_strong_db_password\"<\/code><\/pre>\n<p>    Kaydedip kapat\u0131n. Art\u0131k bu dosya \u015fifrelenmi\u015f durumdad\u0131r.<\/p>\n<p>2.  <strong>Vault Dosyas\u0131n\u0131 D\u00fczenleme:<\/strong><br \/>\n    Daha sonra d\u00fczenlemek isterseniz:<\/p>\n<pre><code class=\"language-bash\">ansible-vault edit group_vars\/lemp_servers.yml<\/code><\/pre>\n<p>3.  <strong>Vault Parolas\u0131n\u0131 Kullanarak Playbook&#8217;u \u00c7al\u0131\u015ft\u0131rma:<\/strong><br \/>\n    Playbook&#8217;u \u00e7al\u0131\u015ft\u0131r\u0131rken Ansible&#8217;a vault parolas\u0131n\u0131 sa\u011flaman\u0131z gerekecektir.<\/p>\n<pre><code class=\"language-bash\">ansible-playbook -i inventory.ini playbooks\/main.yml --ask-vault-pass<\/code><\/pre>\n<p>    Veya bir dosya i\u00e7inde saklanan parolay\u0131 kullanabilirsiniz (daha g\u00fcvenli):<\/p>\n<pre><code class=\"language-bash\">ansible-playbook -i inventory.ini playbooks\/main.yml --vault-password-file ~\/.ansible\/vault_pass.txt<\/code><\/pre>\n<p>    <code>~\/.ansible\/vault_pass.txt<\/code> dosyas\u0131n\u0131n i\u00e7eri\u011fi sadece vault parolas\u0131 olmal\u0131d\u0131r ve izinleri <code>600<\/code> olarak ayarlanmal\u0131d\u0131r (<code>chmod 600 ~\/.ansible\/vault_pass.txt<\/code>).<\/p>\n<h3>7. Playbook&#8217;u \u00c7al\u0131\u015ft\u0131rma ve Do\u011frulama<\/h3>\n<p>T\u00fcm dosyalar\u0131 olu\u015fturduktan ve Ansible Vault&#8217;u yap\u0131land\u0131rd\u0131ktan sonra, playbook&#8217;u \u00e7al\u0131\u015ft\u0131rmaya haz\u0131r\u0131z.<\/p>\n<p>1.  <strong>Ansible Koleksiyonlar\u0131n\u0131 Kurma:<\/strong><br \/>\n    MariaDB rol\u00fcnde <code>community.mysql<\/code> koleksiyonunu kulland\u0131\u011f\u0131m\u0131z i\u00e7in, kontrol sunucusunda bunu kurmal\u0131y\u0131z:<\/p>\n<pre><code class=\"language-bash\">ansible-galaxy collection install community.mysql<\/code><\/pre>\n<p>2.  <strong>Playbook&#8217;u \u00c7al\u0131\u015ft\u0131rma:<\/strong><br \/>\n    Proje k\u00f6k dizininde (<code>lemp_ansible\/<\/code>) a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-bash\">ansible-playbook -i inventory.ini playbooks\/main.yml --ask-vault-pass<\/code><\/pre>\n<p>    Ansible, hedef sunucuya ba\u011flanacak ve tan\u0131mlad\u0131\u011f\u0131m\u0131z t\u00fcm g\u00f6revleri s\u0131ras\u0131yla y\u00fcr\u00fctecektir. \u00c7\u0131kt\u0131da her bir g\u00f6revin durumu (changed, ok, skipped vb.) g\u00f6sterilecektir.<\/p>\n<p>3.  <strong>Kurulumun Do\u011frulanmas\u0131:<\/strong><br \/>\n    Playbook ba\u015far\u0131yla tamamland\u0131ktan sonra, LEMP y\u0131\u011f\u0131n\u0131n\u0131n do\u011fru \u015fekilde kurulup kurulmad\u0131\u011f\u0131n\u0131 do\u011frulamam\u0131z gerekir.<\/p>\n<p>    *   <strong>Nginx Kontrol\u00fc:<\/strong><br \/>\n        Web taray\u0131c\u0131n\u0131z\u0131 a\u00e7\u0131n ve hedef sunucunuzun IP adresine gidin. Nginx&#8217;in varsay\u0131lan &#8220;Welcome to Nginx!&#8221; sayfas\u0131n\u0131 veya bizim <code>default.conf.j2<\/code> dosyam\u0131zdaki <code>\/var\/www\/html<\/code> dizininde bir <code>index.html<\/code> dosyas\u0131 olu\u015fturduysan\u0131z o i\u00e7eri\u011fi g\u00f6rmelisiniz.<\/p>\n<p>    *   <strong>PHP-FPM Kontrol\u00fc:<\/strong><br \/>\n        PHP&#8217;nin Nginx ile do\u011fru bir \u015fekilde entegre olup olmad\u0131\u011f\u0131n\u0131 test etmek i\u00e7in, <code>\/var\/www\/html<\/code> dizininde bir <code>info.php<\/code> dosyas\u0131 olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-bash\"># Hedef sunucuya SSH ile ba\u011flan\u0131n\n        sudo nano \/var\/www\/html\/info.php<\/code><\/pre>\n<p>        Dosyan\u0131n i\u00e7ine a\u015fa\u011f\u0131daki kodu yap\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-php\"><?php\n        phpinfo();\n        ?><\/code><\/pre>\n<p>        Kaydedip \u00e7\u0131k\u0131n. Ard\u0131ndan taray\u0131c\u0131n\u0131zda <code>http:\/\/your_server_ip\/info.php<\/code> adresine gidin. PHP bilgi sayfas\u0131n\u0131 g\u00f6rmelisiniz. \u0130\u015finiz bitti\u011finde g\u00fcvenlik nedeniyle bu dosyay\u0131 silmeyi unutmay\u0131n: <code>sudo rm \/var\/www\/html\/info.php<\/code>.<\/p>\n<p>    *   <strong>MariaDB Kontrol\u00fc:<\/strong><br \/>\n        Hedef sunucuya SSH ile ba\u011flan\u0131n ve MariaDB&#8217;ye ba\u011flanmay\u0131 deneyin:<\/p>\n<pre><code class=\"language-bash\">mysql -u webapp_user -p<\/code><\/pre>\n<p>        <code>webapp_user<\/code> yerine <code>group_vars\/lemp_servers.yml<\/code> dosyas\u0131nda tan\u0131mlad\u0131\u011f\u0131n\u0131z kullan\u0131c\u0131 ad\u0131n\u0131 ve parolay\u0131 girin. Ba\u015far\u0131l\u0131 bir \u015fekilde ba\u011flanabiliyorsan\u0131z ve <code>SHOW DATABASES;<\/code> komutu ile olu\u015fturdu\u011funuz veritaban\u0131n\u0131 g\u00f6r\u00fcyorsan\u0131z, MariaDB de do\u011fru \u015fekilde \u00e7al\u0131\u015f\u0131yor demektir.<\/p>\n<p>    *   <strong>Firewall Kontrol\u00fc:<\/strong><br \/>\n        Hedef sunucuda UFW durumunu kontrol edin:<\/p>\n<pre><code class=\"language-bash\">sudo ufw status<\/code><\/pre>\n<p>        SSH (22), HTTP (80) ve HTTPS (443) portlar\u0131n\u0131n izinli oldu\u011funu g\u00f6rmelisiniz.<\/p>\n<h3>8. Sonu\u00e7 ve \u0130leri Ad\u0131mlar<\/h3>\n<p>Bu makalede, Ansible kullanarak Ubuntu 18.04 sunucusu \u00fczerine LEMP y\u0131\u011f\u0131n\u0131n\u0131 (Nginx, MariaDB, PHP-FPM) nas\u0131l otomatik olarak kurup yap\u0131land\u0131raca\u011f\u0131m\u0131z\u0131 detayl\u0131 bir \u015fekilde \u00f6\u011frendik. Ansible&#8217;\u0131n rol tabanl\u0131 yap\u0131s\u0131, g\u00f6rev otomasyonu, idempotence (tekrarl\u0131 \u00e7al\u0131\u015ft\u0131rmalarda tutarl\u0131l\u0131k) ve hassas veri y\u00f6netimi (Ansible Vault) gibi \u00f6zellikleri sayesinde, karma\u015f\u0131k sunucu kurulumlar\u0131n\u0131 basitle\u015ftirebilir, hatalar\u0131 azaltabilir ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinizi h\u0131zland\u0131rabilirsiniz.<\/p>\n<p>Bu kurulum, LEMP y\u0131\u011f\u0131n\u0131n\u0131n temelini olu\u015fturur. \u0130leri d\u00fczeyde, bu yap\u0131land\u0131rmay\u0131 daha da geli\u015ftirebilirsiniz:<\/p>\n<p>*   <strong>SSL\/TLS Kurulumu:<\/strong> Let&#8217;s Encrypt ile otomatik SSL sertifikalar\u0131 kurmak i\u00e7in Nginx rol\u00fcn\u00fc geni\u015fletmek.<br \/>\n*   <strong>Birden Fazla Site Y\u00f6netimi:<\/strong> Nginx rol\u00fcne birden fazla sanal ana bilgisayar (virtual host) yap\u0131land\u0131rmas\u0131 eklemek.<br \/>\n*   <strong>Geli\u015fmi\u015f PHP Yap\u0131land\u0131rmas\u0131:<\/strong> <code>php.ini<\/code> veya PHP-FPM havuz ayarlar\u0131n\u0131 \u00f6zelle\u015ftirmek.<br \/>\n*   <strong>Veritaban\u0131 Yedekleme:<\/strong> MariaDB i\u00e7in otomatik yedekleme g\u00f6revleri eklemek.<br \/>\n*   <strong>Monitoring ve Loglama:<\/strong> Prometheus, Grafana veya ELK Stack gibi ara\u00e7larla entegrasyon.<br \/>\n*   <strong>CI\/CD Entegrasyonu:<\/strong> Bu Ansible playbook&#8217;unu Jenkins, GitLab CI\/CD veya GitHub Actions gibi s\u00fcrekli entegrasyon\/s\u00fcrekli da\u011f\u0131t\u0131m (CI\/CD) boru hatlar\u0131na dahil etmek.<\/p>\n<p>Ansible, altyap\u0131 y\u00f6netimini bir sanat haline getiren g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r. Bu rehber, otomasyon yolculu\u011funuzda sa\u011flam bir ba\u015flang\u0131\u00e7 noktas\u0131 sa\u011flamal\u0131d\u0131r.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Ansible ile Ubuntu 18.04 \u00dczerine LEMP Kurulumu ve Yap\u0131land\u0131rmas\u0131\nAnsible, modern BT altyap\u0131lar\u0131nda otomasyonun temel ta\u015flar\u0131ndan biridir. Sun","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-37559","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 LEMP 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-lemp-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 LEMP Kurulumu ve Yap\u0131land\u0131rmas\u0131\" \/>\n<meta property=\"og:description\" content=\"Ansible ile Ubuntu 18.04 \u00dczerine LEMP Kurulumu ve Yap\u0131land\u0131rmas\u0131 Ansible, modern BT altyap\u0131lar\u0131nda otomasyonun temel ta\u015flar\u0131ndan biridir. Sun\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lemp-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-09T04:40:45+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lemp-kurulumu-ve-yapilandirmasi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lemp-kurulumu-ve-yapilandirmasi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Ansible ile Ubuntu 18.04 \u00dczerine LEMP Kurulumu ve Yap\u0131land\u0131rmas\u0131\",\"datePublished\":\"2026-01-09T04:40:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lemp-kurulumu-ve-yapilandirmasi\/\"},\"wordCount\":1592,\"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-lemp-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-lemp-kurulumu-ve-yapilandirmasi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lemp-kurulumu-ve-yapilandirmasi\/\",\"name\":\"Ansible ile Ubuntu 18.04 \u00dczerine LEMP Kurulumu ve Yap\u0131land\u0131rmas\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-01-09T04:40:45+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lemp-kurulumu-ve-yapilandirmasi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lemp-kurulumu-ve-yapilandirmasi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lemp-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 LEMP 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 LEMP 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-lemp-kurulumu-ve-yapilandirmasi\/","og_locale":"tr_TR","og_type":"article","og_title":"Ansible ile Ubuntu 18.04 \u00dczerine LEMP Kurulumu ve Yap\u0131land\u0131rmas\u0131","og_description":"Ansible ile Ubuntu 18.04 \u00dczerine LEMP Kurulumu ve Yap\u0131land\u0131rmas\u0131 Ansible, modern BT altyap\u0131lar\u0131nda otomasyonun temel ta\u015flar\u0131ndan biridir. Sun","og_url":"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lemp-kurulumu-ve-yapilandirmasi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-01-09T04:40:45+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"14 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lemp-kurulumu-ve-yapilandirmasi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lemp-kurulumu-ve-yapilandirmasi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Ansible ile Ubuntu 18.04 \u00dczerine LEMP Kurulumu ve Yap\u0131land\u0131rmas\u0131","datePublished":"2026-01-09T04:40:45+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lemp-kurulumu-ve-yapilandirmasi\/"},"wordCount":1592,"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-lemp-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-lemp-kurulumu-ve-yapilandirmasi\/","url":"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lemp-kurulumu-ve-yapilandirmasi\/","name":"Ansible ile Ubuntu 18.04 \u00dczerine LEMP Kurulumu ve Yap\u0131land\u0131rmas\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-01-09T04:40:45+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lemp-kurulumu-ve-yapilandirmasi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lemp-kurulumu-ve-yapilandirmasi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/ansible-ile-ubuntu-18-04-uzerine-lemp-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 LEMP 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\/37559","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=37559"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37559\/revisions"}],"predecessor-version":[{"id":37560,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37559\/revisions\/37560"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=37559"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=37559"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=37559"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}