{"id":174,"date":"2026-09-05T17:28:13","date_gmt":"2026-09-05T20:28:13","guid":{"rendered":"https:\/\/www.linuxpro.com.br\/?p=174"},"modified":"2026-09-08T09:03:57","modified_gmt":"2026-09-08T12:03:57","slug":"automatizando-servidores-linux-com-ansible","status":"publish","type":"post","link":"https:\/\/www.linuxpro.com.br\/es\/2026\/09\/automatizando-servidores-linux-com-ansible\/","title":{"rendered":"Automatizando Servidores Linux com Ansible"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" alt=\"Mascote do LinuxPro apertando o bot\u00e3o que aplica o playbook em quatro servidores id\u00eanticos de uma vez\" src=\"\/wp-content\/uploads\/2026\/09\/ansible-servidores-v3.webp\" width=\"1486\" height=\"856\" \/><\/p>\n<p>Administrar um servidor na m\u00e3o \u00e9 tranquilo. Administrar dez, atualizando pacote por pacote via SSH, \u00e9 pedir para errar. O <strong>Ansible<\/strong> resolve isso: voc\u00ea descreve o estado desejado em YAML e ele aplica em todos os servidores \u2014 sem agente, s\u00f3 com SSH. Este guia \u00e9 o passo seguinte para quem j\u00e1 conhece o b\u00e1sico; se voc\u00ea est\u00e1 come\u00e7ando do zero (instala\u00e7\u00e3o, estrutura de pastas, primeiro ping), comece pelos nossos <a href=\"\/2026\/09\/primeiros-passos-com-ansible\/\">primeiros passos com Ansible<\/a>.<\/p>\n<h2>Invent\u00e1rio: seus servidores<\/h2>\n<p>Instala\u00e7\u00e3o e primeiro contato est\u00e3o no <a href=\"\/2026\/09\/primeiros-passos-com-ansible\/\">guia de primeiros passos<\/a> \u2014 aqui vamos direto ao ponto.<\/p>\n<p>Crie o arquivo <code>inventario.ini<\/code> listando as m\u00e1quinas:<\/p>\n<pre><code class=\"language-ini\">[web]\nweb1.exemplo.com.br\nweb2.exemplo.com.br\n\n[db]\ndb1.exemplo.com.br ansible_user=root\n<\/code><\/pre>\n<p>Teste a conex\u00e3o com todos de uma vez:<\/p>\n<pre><code class=\"language-bash\">ansible -i inventario.ini all -m ping\n<\/code><\/pre>\n<h2>Playbook completo: pacote, servi\u00e7o, firewall e handler<\/h2>\n<p>Um playbook descreve o que deve existir no servidor. Exemplo real \u2014 garantir nginx instalado, rodando, com firewall liberado e configura\u00e7\u00e3o versionada via template:<\/p>\n<pre><code class=\"language-yaml\">---\n- name: Configurar servidores web\n  hosts: web\n  become: true\n  vars:\n    dominio: exemplo.com.br\n\n  tasks:\n    - name: Instalar nginx\n      ansible.builtin.apt:\n        name: nginx\n        state: present\n        update_cache: true\n\n    - name: Garantir nginx ativo no boot\n      ansible.builtin.service:\n        name: nginx\n        state: started\n        enabled: true\n\n    - name: Liberar HTTP e HTTPS no ufw\n      community.general.ufw:\n        rule: allow\n        port: \"{{ item }}\"\n        proto: tcp\n      loop: [\"80\", \"443\"]\n\n    - name: Aplicar configura\u00e7\u00e3o do site (template Jinja2)\n      ansible.builtin.template:\n        src: templates\/site.conf.j2\n        dest: \/etc\/nginx\/sites-available\/{{ dominio }}.conf\n      notify: Recarregar nginx\n\n  handlers:\n    - name: Recarregar nginx\n      ansible.builtin.service:\n        name: nginx\n        state: reloaded\n<\/code><\/pre>\n<p>Dois recursos novos aqui: o <strong>template<\/strong> (arquivo <code>.j2<\/code> com vari\u00e1veis Jinja2 \u2014 um modelo de config que vale para qualquer dom\u00ednio) e o <strong>handler<\/strong>, que s\u00f3 recarrega o nginx <em>se<\/em> a configura\u00e7\u00e3o de fato mudou. Execute com simula\u00e7\u00e3o antes:<\/p>\n<pre><code class=\"language-bash\">ansible-playbook -i inventario.ini playbook.yml --check --diff   # mostra o que mudaria, linha a linha\nansible-playbook -i inventario.ini playbook.yml                  # aplica\n<\/code><\/pre>\n<h2>O pulo do gato: idempot\u00eancia<\/h2>\n<p>Rode o playbook duas vezes: na segunda, o Ansible n\u00e3o muda nada \u2014 ele s\u00f3 age quando o estado real difere do declarado. \u00c9 isso que torna a automa\u00e7\u00e3o segura: o playbook vira a <strong>documenta\u00e7\u00e3o viva<\/strong> do servidor.<\/p>\n<h2>Segredos com ansible-vault<\/h2>\n<p>Senha de banco n\u00e3o vive em YAML aberto. O <code>ansible-vault<\/code> criptografa o arquivo de vari\u00e1veis e o Git guarda s\u00f3 o texto cifrado:<\/p>\n<pre><code class=\"language-bash\">ansible-vault create group_vars\/db\/vault.yml     # cria criptografado\nansible-vault edit group_vars\/db\/vault.yml       # edita depois\nansible-playbook -i inventario.ini playbook.yml --ask-vault-pass   # pede a senha ao executar\n<\/code><\/pre>\n<h2>Atualiza\u00e7\u00e3o em ondas (rolling update)<\/h2>\n<p>Com v\u00e1rios servidores atr\u00e1s de um balanceador, ningu\u00e9m quer derrubar todos ao mesmo tempo. O <code>serial<\/code> aplica o playbook em lotes \u2014 e <code>--limit<\/code> restringe a execu\u00e7\u00e3o a um host ou grupo quando voc\u00ea quer testar em um antes dos demais:<\/p>\n<pre><code class=\"language-yaml\">- name: Atualizar frota web sem downtime\n  hosts: web\n  become: true\n  serial: 1          # um servidor por vez (aceita n\u00famero ou porcentagem)\n  max_fail_percentage: 0\n  tasks:\n    - name: Atualizar pacotes\n      ansible.builtin.apt:\n        upgrade: dist\n        update_cache: true\n<\/code><\/pre>\n<pre><code class=\"language-bash\">ansible-playbook -i inventario.ini atualiza.yml --limit web1.exemplo.com.br\n<\/code><\/pre>\n<h2>Comandos r\u00e1pidos (ad-hoc)<\/h2>\n<pre><code class=\"language-bash\"># atualizar pacotes em todos os servidores web\nansible -i inventario.ini web -b -m apt -a \"upgrade=dist update_cache=yes\"\n\n# reiniciar um servi\u00e7o em um grupo\nansible -i inventario.ini db -b -m service -a \"name=mariadb state=restarted\"\n<\/code><\/pre>\n<p>Comece automatizando uma tarefa que voc\u00ea repete toda semana \u2014 em um m\u00eas voc\u00ea n\u00e3o vai mais lembrar como vivia sem. Para organizar tudo em roles reutiliz\u00e1veis e aprofundar nos m\u00f3dulos, a refer\u00eancia \u00e9 a <a href=\"https:\/\/docs.ansible.com\/\" rel=\"noopener\" target=\"_blank\">documenta\u00e7\u00e3o oficial<\/a>; e se automa\u00e7\u00e3o \u00e9 o seu rumo de carreira, o Ansible \u00e9 pe\u00e7a central da <a href=\"\/2026\/09\/certificacao-lpi-devops\/\">certifica\u00e7\u00e3o LPI DevOps Tools Engineer<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Administrar um servidor na m\u00e3o \u00e9 tranquilo. Administrar dez, atualizando pacote por pacote via SSH, \u00e9 pedir para errar. O Ansible resolve isso: voc\u00ea descreve o estado desejado em YAML e ele aplica em todos os servidores \u2014 sem agente, s\u00f3 com SSH. Este guia \u00e9 o passo seguinte para quem j\u00e1 conhece o b\u00e1sico; &#8230; <a title=\"Automatizando Servidores Linux com Ansible\" class=\"read-more\" href=\"https:\/\/www.linuxpro.com.br\/es\/2026\/09\/automatizando-servidores-linux-com-ansible\/\" aria-label=\"Read more about Automatizando Servidores Linux com Ansible\">Read more<\/a><\/p>","protected":false},"author":0,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[46,2,120],"tags":[121,122,47,72],"class_list":["post-174","post","type-post","status-publish","format-standard","hentry","category-devops","category-linux","category-servidores","tag-ansible","tag-automacao","tag-devops","tag-servidores"],"_links":{"self":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts\/174","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/comments?post=174"}],"version-history":[{"count":7,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts\/174\/revisions"}],"predecessor-version":[{"id":1207,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts\/174\/revisions\/1207"}],"wp:attachment":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/media?parent=174"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/categories?post=174"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/tags?post=174"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}