{"id":2136,"date":"2024-06-02T13:17:44","date_gmt":"2024-06-02T10:17:44","guid":{"rendered":"https:\/\/www.fibacloud.com\/community\/tutorials\/?p=2136"},"modified":"2026-10-04T22:57:46","modified_gmt":"2026-10-04T19:57:46","slug":"ansible-ile-altyapi-otomasyonu-nasil-yapilir","status":"publish","type":"post","link":"https:\/\/www.fibacloud.com\/community\/tutorials\/ansible-ile-altyapi-otomasyonu-nasil-yapilir\/","title":{"rendered":"Ansible ile Altyap\u0131 Otomasyonu: \u0130lk Playbook ve Do\u011frulama"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"2136\" class=\"elementor elementor-2136\" data-elementor-post-type=\"post\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4f3fb5b e-con-full e-flex e-con e-parent\" data-id=\"4f3fb5b\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-048ed68 elementor-widget elementor-widget-text-editor\" data-id=\"048ed68\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\/*! elementor - v3.21.0 - 08-05-2024 *\/\n.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:#69727d;color:#fff}.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap{color:#69727d;border:3px solid;background-color:transparent}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap{margin-top:8px}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap-letter{width:1em;height:1em}.elementor-widget-text-editor .elementor-drop-cap{float:left;text-align:center;line-height:1;font-size:50px}.elementor-widget-text-editor .elementor-drop-cap-letter{display:inline-block}<\/style>\t\t\t\t<p>Ansible, bir envanterde se\u00e7ti\u011finiz makinelerin durumunu YAML playbook\u2019lar\u0131yla y\u00f6netir. Ayn\u0131 i\u015fi her sunucuda elle tekrarlamak yerine hedefleri, istenen durumu ve do\u011frulama ad\u0131mlar\u0131n\u0131 kod olarak tan\u0131mlars\u0131n\u0131z. <strong>Agentless<\/strong>, y\u00f6netilen Linux makinede hi\u00e7 \u00f6n ko\u015ful olmad\u0131\u011f\u0131 anlam\u0131na gelmez: \u00e7o\u011fu Ansible mod\u00fcl\u00fc i\u00e7in SSH eri\u015fimi ve uyumlu Python gerekir.<\/p>\n<p>Bu rehberde Ubuntu 24.04 LTS kontrol makinesi, Python 3.12 ve ansible-core 2.20 kullan\u0131l\u0131r. Y\u00f6netilen Ubuntu 24.04 makinede \u00f6nce mevcut kullan\u0131c\u0131ya ait k\u00fc\u00e7\u00fck bir \u00f6rnek yap\u0131land\u0131rma dosyas\u0131 olu\u015fturulur. Ama\u00e7 envanteri, ge\u00e7erli YAML\u2019\u0131, check mode\u2019u ve ikinci \u00e7al\u0131\u015ft\u0131rmada gereksiz de\u011fi\u015fiklik yap\u0131lmad\u0131\u011f\u0131n\u0131 \u00f6\u011frenmektir. \u00c7al\u0131\u015fan web sunucusu, paketler veya a\u011f kurallar\u0131 de\u011fi\u015ftirilmez.<\/p>\n<h2>Kontrol makinesi ile y\u00f6netilen makineyi ay\u0131r\u0131n<\/h2>\n<ul>\n<li><strong>Kontrol makinesi:<\/strong> Ansible ve projenin bulundu\u011fu bilgisayard\u0131r. Bu \u00f6rnek Ubuntu i\u00e7indir; yerel Windows kontrol makinesi yerine desteklenen bir Linux\/WSL ortam\u0131 planlay\u0131n.<\/li>\n<li><strong>Y\u00f6netilen makine:<\/strong> SSH ile eri\u015fti\u011finiz hedeftir. Uyumlu Python, yetkili kullan\u0131c\u0131 ve gereken dosya izinleri bulunmal\u0131d\u0131r. Ansible\u2019\u0131n kendisini her hedefe kurman\u0131z gerekmez.<\/li>\n<li><strong>Envanter:<\/strong> Hangi makinenin hangi gruba ait oldu\u011funu belirtir. Uygulama ve veritaban\u0131 makinelerini tek bir belirsiz <code>all<\/code> hedefiyle y\u00f6netmeyin.<\/li>\n<li><strong>Playbook:<\/strong> Hedef grup ve g\u00f6revleri tan\u0131mlar. Mod\u00fcller \u00e7o\u011funlukla mevcut durumla hedef durumu kar\u015f\u0131la\u015ft\u0131r\u0131r; rastgele <code>shell<\/code> komutlar\u0131 otomatik olarak idempotent olmaz.<\/li>\n<\/ul>\n<p>SSH sunucusunun parmak izini \u00f6nce g\u00fcvenilir kanaldan do\u011frulay\u0131n. Ayr\u0131 g\u00f6rev kullan\u0131c\u0131n\u0131zla elle giri\u015f yapabildi\u011finizi kontrol edin. \u0130lk \u00f6rnek i\u00e7in <code>root<\/code>, <code>become<\/code> veya genel sudo izni gerekmez.<\/p>\n<figure class=\"fc-editorial-figure\" data-fc-visual=\"20260920\" aria-labelledby=\"fc-editorial-caption-2136\"><a href=\"https:\/\/www.fibacloud.com\/community\/tutorials\/wp-content\/uploads\/community-editorial-20260920\/fc-ansible-tr-inline-20260920.webp\" target=\"_blank\" rel=\"noopener\" aria-label=\"G\u00f6rseli tam boyutta a\u00e7\"><picture><source media=\"(max-width: 600px)\" srcset=\"https:\/\/www.fibacloud.com\/community\/tutorials\/wp-content\/uploads\/community-editorial-20260920\/fc-ansible-tr-mobile-20260920.webp\" width=\"720\" height=\"1140\"><img loading=\"lazy\" src=\"https:\/\/www.fibacloud.com\/community\/tutorials\/wp-content\/uploads\/community-editorial-20260920\/fc-ansible-tr-inline-20260920.webp\" srcset=\"https:\/\/www.fibacloud.com\/community\/tutorials\/wp-content\/uploads\/community-editorial-20260920\/fc-ansible-tr-inline-20260920.webp 1440w, https:\/\/www.fibacloud.com\/community\/tutorials\/wp-content\/uploads\/community-editorial-20260920\/fc-ansible-tr-inline-20260920-300x242.webp 300w, https:\/\/www.fibacloud.com\/community\/tutorials\/wp-content\/uploads\/community-editorial-20260920\/fc-ansible-tr-inline-20260920-1024x825.webp 1024w, https:\/\/www.fibacloud.com\/community\/tutorials\/wp-content\/uploads\/community-editorial-20260920\/fc-ansible-tr-inline-20260920-768x619.webp 768w\" sizes=\"auto, (max-width: 900px) 100vw, 820px\" width=\"1440\" height=\"1160\" alt=\"\u0130dempotent otomasyonun d\u00f6ng\u00fcs\u00fc\" class=\"wp-image-2599\"  decoding=\"async\"><\/picture><\/a><figcaption id=\"fc-editorial-caption-2136\"><strong>\u0130dempotent otomasyonun d\u00f6ng\u00fcs\u00fc<\/strong> Envanter hedefleri, playbook istenen durumu tan\u0131mlar. Uygun mod\u00fcller yaln\u0131z gerekli de\u011fi\u015fiklikleri yapar. \u0130kinci \u00e7al\u0131\u015ft\u0131rmada gereksiz de\u011fi\u015fiklik olmamas\u0131 kontrol edilir.<details><summary>G\u00f6rselin ad\u0131m ad\u0131m a\u00e7\u0131klamas\u0131<\/summary><ol><li>Hedefle: Envanter ile makineleri se\u00e7.<\/li><li>Tan\u0131mla: Playbook i\u00e7inde istenen durumu belirt.<\/li><li>Uygula: Durumu bilen mod\u00fclleri kullan.<\/li><li>Tekrarla: Gereksiz de\u011fi\u015fiklik olmad\u0131\u011f\u0131n\u0131 do\u011frula.<\/li><\/ol><\/details><\/figcaption><\/figure>\n<h2>Ansible\u2019\u0131 ayr\u0131 Python ortam\u0131na kurun<\/h2>\n<p>Kontrol makinesinde Python 3.12 ve venv paketini kurun. Var olan sistem Python paketlerini de\u011fi\u015ftirmek yerine ayr\u0131 ortam kullan\u0131n:<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5534819 elementor-widget elementor-widget-text-editor\" data-id=\"5534819\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<pre><code class=\"language-bash\">sudo apt update\nsudo apt install python3.12 python3.12-venv\npython3.12 -m venv \"$HOME\/.venvs\/fc-ansible\"\n. \"$HOME\/.venvs\/fc-ansible\/bin\/activate\"\npython -m pip install 'ansible-core&gt;=2.20,&lt;2.21'\nansible --version<\/code><\/pre>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3289024 elementor-widget elementor-widget-text-editor\" data-id=\"3289024\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><code>ansible --version<\/code> \u00e7\u0131kt\u0131s\u0131ndan kullan\u0131lan Python\u2019u, ansible-core s\u00fcr\u00fcm\u00fcn\u00fc ve yap\u0131land\u0131rma dosyas\u0131n\u0131 kontrol edin. S\u00fcr\u00fcm aral\u0131\u011f\u0131 ayn\u0131 ana s\u00fcr\u00fcmdeki d\u00fczeltmeleri al\u0131r; kabul etti\u011finiz tam ba\u011f\u0131ml\u0131l\u0131k listesini proje kayd\u0131nda tutun:<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f429ffb elementor-widget elementor-widget-text-editor\" data-id=\"f429ffb\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<pre><code class=\"language-bash\">install -d -m 700 \"$HOME\/fc-ansible-project\"\ncd \"$HOME\/fc-ansible-project\"\npython -m pip freeze &gt; requirements.lock<\/code><\/pre>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1d09315 elementor-widget elementor-widget-text-editor\" data-id=\"1d09315\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Yeni bir ansible-core s\u00fcr\u00fcm\u00fcne ge\u00e7meden \u00f6nce resm\u00ee Python destek matrisini ve porting guide\u2019\u0131 okuyup ayn\u0131 kabul ad\u0131mlar\u0131n\u0131 tekrar \u00e7al\u0131\u015ft\u0131r\u0131n.<\/p>\n<h2>Envanteri olu\u015fturun ve hedefleri g\u00f6r\u00fcn<\/h2>\n<p><code>hosts.ini<\/code> dosyas\u0131n\u0131 haz\u0131rlay\u0131n. Sunucu ad\u0131, kullan\u0131c\u0131 ve \u00f6zel anahtar yolunu kendi do\u011frulanm\u0131\u015f eri\u015fiminizle de\u011fi\u015ftirin; \u00f6zel anahtar\u0131n i\u00e7eri\u011fini envantere koymay\u0131n.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d387091 elementor-widget elementor-widget-text-editor\" data-id=\"d387091\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<pre><code class=\"language-ini\">[web_sunuculari]\nweb01 ansible_host=server.example.com ansible_user=deploy ansible_ssh_private_key_file=~\/.ssh\/fibacloud_ed25519\n\n[web_sunuculari:vars]\nansible_python_interpreter=\/usr\/bin\/python3<\/code><\/pre>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d019d9e elementor-widget elementor-widget-text-editor\" data-id=\"d019d9e\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Hedef listesini ve Python mod\u00fcl\u00fc \u00e7al\u0131\u015ft\u0131r\u0131labildi\u011fini kontrol edin:<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-729dffe elementor-widget elementor-widget-text-editor\" data-id=\"729dffe\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<pre><code class=\"language-bash\">ansible-inventory -i hosts.ini --graph\nansible -i hosts.ini web_sunuculari -m ansible.builtin.ping<\/code><\/pre>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-854821b elementor-widget elementor-widget-text-editor\" data-id=\"854821b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Ansible <code>ping<\/code> mod\u00fcl\u00fc ICMP ping de\u011fildir; giri\u015f yap\u0131p Python mod\u00fcl\u00fc \u00e7al\u0131\u015ft\u0131rabildi\u011finizi s\u0131nar. <code>pong<\/code> yan\u0131t\u0131 sunucunun uygulama sa\u011fl\u0131k kontrol\u00fcn\u00fcn yerine ge\u00e7mez. Yanl\u0131\u015f sunucu anahtar\u0131, kullan\u0131c\u0131 veya \u00f6zel anahtar varsa do\u011frulamay\u0131 kapatmak yerine eri\u015fimi d\u00fczeltin.<\/p>\n<h2>Ge\u00e7erli YAML ile ilk playbook<\/h2>\n<p><code>demo.yml<\/code> dosyas\u0131na a\u015fa\u011f\u0131daki i\u00e7eri\u011fi yaz\u0131n. YAML\u2019da sekme yerine bo\u015fluk kullan\u0131n; <code>hosts<\/code>, <code>become<\/code>, <code>vars<\/code> ve <code>tasks<\/code>, <code>name<\/code> ile ayn\u0131 play seviyesinde bulunur.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7937e2e elementor-widget elementor-widget-text-editor\" data-id=\"7937e2e\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<pre><code class=\"language-yaml\">---\n- name: Kullan\u0131c\u0131ya ait \u00f6rnek yap\u0131land\u0131rmay\u0131 y\u00f6net\n  hosts: web_sunuculari\n  gather_facts: true\n  become: false\n  vars:\n    demo_directory: \"{{ ansible_facts['env']['HOME'] }}\/fc-ansible-demo\"\n  tasks:\n    - name: \u00d6zel \u00f6rnek dizinini olu\u015ftur\n      ansible.builtin.file:\n        path: \"{{ demo_directory }}\"\n        state: directory\n        mode: \"0700\"\n\n    - name: \u00d6rnek yap\u0131land\u0131rmay\u0131 yerle\u015ftir\n      ansible.builtin.copy:\n        dest: \"{{ demo_directory }}\/application.ini\"\n        mode: \"0600\"\n        content: |\n          [application]\n          environment=demo\n          log_level=info<\/code><\/pre>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-eb888d1 elementor-widget elementor-widget-text-editor\" data-id=\"eb888d1\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Hedef kullan\u0131c\u0131n\u0131n ev dizinindeki <code>fc-ansible-demo<\/code> bu denemeye ayr\u0131lm\u0131\u015f yeni bir dizin olmal\u0131d\u0131r. \u0130\u00e7inde ger\u00e7ek uygulama dosyalar\u0131 varsa devam etmeyin; yeni bir deneme ad\u0131 se\u00e7in. \u00d6rnek; dizin ve dosya izinlerini a\u00e7\u0131k\u00e7a tan\u0131mlar, sistem hizmetini yeniden ba\u015flatmaz ve parola i\u00e7ermez.<\/p>\n<h2>S\u00f6zdizimi, \u00f6n izleme ve iki \u00e7al\u0131\u015ft\u0131rma<\/h2>\n<p>\u00d6nce YAML ve playbook yap\u0131s\u0131n\u0131 denetleyin:<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-33d7dac elementor-widget elementor-widget-text-editor\" data-id=\"33d7dac\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<pre><code class=\"language-bash\">ansible-playbook -i hosts.ini demo.yml --syntax-check\nansible-playbook -i hosts.ini demo.yml --list-hosts --limit web01<\/code><\/pre>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-15ac764 elementor-widget elementor-widget-text-editor\" data-id=\"15ac764\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Listede yaln\u0131z de\u011fi\u015ftirmek istedi\u011finiz makine bulunmal\u0131d\u0131r. Sonra destekleyen mod\u00fcllerle de\u011fi\u015fiklik \u00f6n izlemesi yap\u0131n:<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-20e1e07 elementor-widget elementor-widget-text-editor\" data-id=\"20e1e07\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<pre><code class=\"language-bash\">ansible-playbook -i hosts.ini demo.yml --check --diff --limit web01<\/code><\/pre>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-46b57b7 elementor-widget elementor-widget-text-editor\" data-id=\"46b57b7\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Check mode tam bir sanal sunucu \u00e7al\u0131\u015ft\u0131rmas\u0131 de\u011fildir. Baz\u0131 mod\u00fcller desteklemez; \u00f6nceki g\u00f6revlerin hen\u00fcz olu\u015fmam\u0131\u015f \u00e7\u0131kt\u0131s\u0131na ba\u011f\u0131ml\u0131 i\u015flemler tam olarak canland\u0131r\u0131lamayabilir. <code>--diff<\/code> i\u00e7erik g\u00f6sterebilir; gizli dosyalar i\u00e7in kullanmay\u0131n. \u00d6rnekteki metin gizli bilgi i\u00e7ermez.<\/p>\n<p>\u00d6n izlemeyi de\u011ferlendirdikten sonra ayn\u0131 kapsam\u0131 uygulay\u0131n ve tekrar \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2579d46 elementor-widget elementor-widget-text-editor\" data-id=\"2579d46\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<pre><code class=\"language-bash\">ansible-playbook -i hosts.ini demo.yml --limit web01\nansible-playbook -i hosts.ini demo.yml --limit web01<\/code><\/pre>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3e53bdb elementor-widget elementor-widget-text-editor\" data-id=\"3e53bdb\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>\u0130lk \u00e7al\u0131\u015ft\u0131rmada gereken dosyalar olu\u015fturulur. \u0130\u00e7erik ve izinler arada de\u011fi\u015fmediyse ikinci \u00e7al\u0131\u015ft\u0131rmada <code>changed=0<\/code>, her iki \u00e7al\u0131\u015ft\u0131rmada <code>failed=0<\/code> ve <code>unreachable=0<\/code> beklenir. <code>changed=0<\/code> \u00e7\u0131kt\u0131s\u0131 b\u00fct\u00fcn altyap\u0131n\u0131n g\u00fcvenli oldu\u011funu kan\u0131tlamaz; yaln\u0131z bu g\u00f6revlerin o anda de\u011fi\u015fiklik gerekmedi\u011fini g\u00f6sterir. Hedefte dosya i\u00e7eri\u011fini ve <code>0700<\/code>\/<code>0600<\/code> izinlerini de do\u011frulay\u0131n.<\/p>\n<h2>Hata ay\u0131rma ve g\u00fcvenli geni\u015fletme<\/h2>\n<table>\n<thead>\n<tr>\n<th>Belirti<\/th>\n<th>Kontrol<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>YAML\/syntax hatas\u0131<\/td>\n<td>Girinti, iki nokta, t\u0131rnaklar ve play seviyeleri. \u00d6nce <code>--syntax-check<\/code>.<\/td>\n<\/tr>\n<tr>\n<td><code>UNREACHABLE<\/code><\/td>\n<td>SSH adresi, kullan\u0131c\u0131, sunucu anahtar\u0131, eri\u015fim a\u011f\u0131 ve se\u00e7ili anahtar.<\/td>\n<\/tr>\n<tr>\n<td>Python bulunam\u0131yor<\/td>\n<td>Hedefte Python yolu ve se\u00e7ilen ansible-core s\u00fcr\u00fcm\u00fcn\u00fcn destek matrisi.<\/td>\n<\/tr>\n<tr>\n<td>\u0130zin reddi<\/td>\n<td>Hedef kullan\u0131c\u0131n\u0131n dizin izinleri. Gereksiz genel <code>become: true<\/code> eklemeyin.<\/td>\n<\/tr>\n<tr>\n<td>\u0130kinci \u00e7al\u0131\u015ft\u0131rma da de\u011fi\u015fiyor<\/td>\n<td>De\u011fi\u015fken zaman damgalar\u0131, d\u0131\u015far\u0131dan de\u011fi\u015fen dosyalar veya durumu denetlemeyen g\u00f6revler.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Ger\u00e7ek web sunucusu otomasyonuna ge\u00e7erken hedef da\u011f\u0131t\u0131m\u0131n paket ve hizmet mod\u00fcllerini kullan\u0131n. Yaln\u0131z ilgili g\u00f6revlerde gereken yetki y\u00fckseltmesini tan\u0131mlay\u0131n. Yeniden ba\u015flatma gerekiyorsa yap\u0131land\u0131rma do\u011frulamas\u0131ndan sonra \u00e7al\u0131\u015fan handler tasarlay\u0131n; her \u00e7al\u0131\u015ft\u0131rmada ko\u015fulsuz yeniden ba\u015flatma yapmay\u0131n.<\/p>\n<p>Parolalar\u0131 ve eri\u015fim belirte\u00e7lerini d\u00fcz envanter veya playbook i\u00e7ine yazmay\u0131n. Ansible Vault ya da kurumunuzun s\u0131r y\u00f6netimiyle \u00e7al\u0131\u015f\u0131n. Vault veriyi saklan\u0131rken korur; \u00e7\u00f6z\u00fclm\u00fc\u015f bir s\u0131rr\u0131n g\u00fcnl\u00fckte veya diff \u00e7\u0131kt\u0131s\u0131nda g\u00f6r\u00fcnmesini tek ba\u015f\u0131na engellemez.<\/p>\n<h2>Geri d\u00f6n\u00fc\u015f ve bak\u0131m<\/h2>\n<p>Bu \u00f6rnek yaln\u0131z yeni deneme dizini olu\u015fturur. Geri d\u00f6n\u00fc\u015fte o dizinin bu \u00e7al\u0131\u015fmaya ait oldu\u011funu ve sonradan \u00f6nemli dosya eklenmedi\u011fini do\u011frulay\u0131n; ard\u0131ndan deneme dosyas\u0131n\u0131 ve bo\u015f dizini kald\u0131r\u0131n. Ger\u00e7ek uygulama otomasyonunda ise \u00f6nceki s\u00fcr\u00fcm, yap\u0131land\u0131rma yede\u011fi ve geri d\u00f6n\u00fc\u015f playbook\u2019u \u00f6nceden haz\u0131rlanmal\u0131d\u0131r.<\/p>\n<p>Playbook ve s\u0131r i\u00e7ermeyen envanter \u015fablonunu s\u00fcr\u00fcm kontrol\u00fcnde tutun. Her de\u011fi\u015fiklikte s\u00f6zdizimi, hedef listesi, check mode ve ikinci \u00e7al\u0131\u015ft\u0131rma kontrol\u00fcn\u00fc tekrarlay\u0131n. Ansible\/Python veya hedef i\u015fletim sistemi s\u00fcr\u00fcm\u00fc de\u011fi\u015fti\u011finde ayr\u0131 test makinesinde yeniden kabul yap\u0131n.<\/p>\n<h2>Kaynaklar<\/h2>\n<ul>\n<li><a href=\"https:\/\/docs.ansible.com\/projects\/ansible\/latest\/installation_guide\/intro_installation.html\" rel=\"nofollow noopener\" target=\"_blank\">Ansible \u2014 Kurulum, kontrol ve y\u00f6netilen makine gereksinimleri<\/a><\/li>\n<li><a href=\"https:\/\/docs.ansible.com\/projects\/ansible\/latest\/playbook_guide\/playbooks_checkmode.html\" rel=\"nofollow noopener\" target=\"_blank\">Ansible \u2014 Check mode ve diff mode s\u0131n\u0131rlar\u0131<\/a><\/li>\n<li><a href=\"https:\/\/docs.ansible.com\/projects\/ansible\/latest\/playbook_guide\/playbooks_intro.html\" rel=\"nofollow noopener\" target=\"_blank\">Ansible \u2014 Playbook yap\u0131s\u0131 ve YAML<\/a><\/li>\n<li><a href=\"https:\/\/docs.ansible.com\/projects\/ansible\/latest\/collections\/ansible\/builtin\/file_module.html\" rel=\"nofollow noopener\" target=\"_blank\">Ansible \u2014 file mod\u00fcl\u00fc: durum ve izinler<\/a><\/li>\n<li><a href=\"https:\/\/docs.ansible.com\/projects\/ansible\/latest\/collections\/ansible\/builtin\/copy_module.html\" rel=\"nofollow noopener\" target=\"_blank\">Ansible \u2014 copy mod\u00fcl\u00fc: i\u00e7erik, izin ve check mode<\/a><\/li>\n<li><a href=\"https:\/\/docs.ansible.com\/projects\/ansible\/latest\/reference_appendices\/release_and_maintenance.html\" rel=\"nofollow noopener\" target=\"_blank\">Ansible \u2014 S\u00fcr\u00fcmler ve destek ya\u015fam d\u00f6ng\u00fcs\u00fc<\/a><\/li>\n<\/ul>\n<p class=\"fc-article-review-date\">Teknik i\u00e7erik ve kaynaklar 4 Ekim 2026 tarihinde g\u00f6zden ge\u00e7irildi. S\u00fcr\u00fcm veya sa\u011flay\u0131c\u0131 de\u011fi\u015fikli\u011finde ilgili resm\u00ee belgeyi yeniden kontrol edin.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Ansible envanteri ve ge\u00e7erli YAML ile ilk otomasyonu haz\u0131rlay\u0131n; hedefleri, check mode sonucunu ve ikinci \u00e7al\u0131\u015ft\u0131rmada de\u011fi\u015fiklik olmad\u0131\u011f\u0131n\u0131 do\u011frulay\u0131n.<\/p>\n","protected":false},"author":1,"featured_media":2598,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[184,168,186,188],"class_list":["post-2136","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials","tag-ansible","tag-devops","tag-otomasyon","tag-sunucu-yonetimi"],"lang":"tr","translations":{"tr":2136},"pll_sync_post":[],"_links":{"self":[{"href":"https:\/\/www.fibacloud.com\/community\/tutorials\/wp-json\/wp\/v2\/posts\/2136","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fibacloud.com\/community\/tutorials\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fibacloud.com\/community\/tutorials\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fibacloud.com\/community\/tutorials\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fibacloud.com\/community\/tutorials\/wp-json\/wp\/v2\/comments?post=2136"}],"version-history":[{"count":59,"href":"https:\/\/www.fibacloud.com\/community\/tutorials\/wp-json\/wp\/v2\/posts\/2136\/revisions"}],"predecessor-version":[{"id":2195,"href":"https:\/\/www.fibacloud.com\/community\/tutorials\/wp-json\/wp\/v2\/posts\/2136\/revisions\/2195"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.fibacloud.com\/community\/tutorials\/wp-json\/wp\/v2\/media\/2598"}],"wp:attachment":[{"href":"https:\/\/www.fibacloud.com\/community\/tutorials\/wp-json\/wp\/v2\/media?parent=2136"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fibacloud.com\/community\/tutorials\/wp-json\/wp\/v2\/categories?post=2136"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fibacloud.com\/community\/tutorials\/wp-json\/wp\/v2\/tags?post=2136"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}