Automatizando Servidores Linux com Ansible

Mascote do LinuxPro apertando o botão que aplica o playbook em quatro servidores idênticos de uma vez

Administrar um servidor na mão é tranquilo. Administrar dez, atualizando pacote por pacote via SSH, é pedir para errar. O Ansible resolve isso: você descreve o estado desejado em YAML e ele aplica em todos os servidores — sem agente, só com SSH. Este guia é o passo seguinte para quem já conhece o básico; se você está começando do zero (instalação, estrutura de pastas, primeiro ping), comece pelos nossos primeiros passos com Ansible.

Inventário: seus servidores

Instalação e primeiro contato estão no guia de primeiros passos — aqui vamos direto ao ponto.

Crie o arquivo inventario.ini listando as máquinas:

[web]
web1.exemplo.com.br
web2.exemplo.com.br

[db]
db1.exemplo.com.br ansible_user=root

Teste a conexão com todos de uma vez:

ansible -i inventario.ini all -m ping

Playbook completo: pacote, serviço, firewall e handler

Um playbook descreve o que deve existir no servidor. Exemplo real — garantir nginx instalado, rodando, com firewall liberado e configuração versionada via template:

---
- name: Configurar servidores web
  hosts: web
  become: true
  vars:
    dominio: exemplo.com.br

  tasks:
    - name: Instalar nginx
      ansible.builtin.apt:
        name: nginx
        state: present
        update_cache: true

    - name: Garantir nginx ativo no boot
      ansible.builtin.service:
        name: nginx
        state: started
        enabled: true

    - name: Liberar HTTP e HTTPS no ufw
      community.general.ufw:
        rule: allow
        port: "{{ item }}"
        proto: tcp
      loop: ["80", "443"]

    - name: Aplicar configuração do site (template Jinja2)
      ansible.builtin.template:
        src: templates/site.conf.j2
        dest: /etc/nginx/sites-available/{{ dominio }}.conf
      notify: Recarregar nginx

  handlers:
    - name: Recarregar nginx
      ansible.builtin.service:
        name: nginx
        state: reloaded

Dois recursos novos aqui: o template (arquivo .j2 com variáveis Jinja2 — um modelo de config que vale para qualquer domínio) e o handler, que só recarrega o nginx se a configuração de fato mudou. Execute com simulação antes:

ansible-playbook -i inventario.ini playbook.yml --check --diff   # mostra o que mudaria, linha a linha
ansible-playbook -i inventario.ini playbook.yml                  # aplica

O pulo do gato: idempotência

Rode o playbook duas vezes: na segunda, o Ansible não muda nada — ele só age quando o estado real difere do declarado. É isso que torna a automação segura: o playbook vira a documentação viva do servidor.

Segredos com ansible-vault

Senha de banco não vive em YAML aberto. O ansible-vault criptografa o arquivo de variáveis e o Git guarda só o texto cifrado:

ansible-vault create group_vars/db/vault.yml     # cria criptografado
ansible-vault edit group_vars/db/vault.yml       # edita depois
ansible-playbook -i inventario.ini playbook.yml --ask-vault-pass   # pede a senha ao executar

Atualização em ondas (rolling update)

Com vários servidores atrás de um balanceador, ninguém quer derrubar todos ao mesmo tempo. O serial aplica o playbook em lotes — e --limit restringe a execução a um host ou grupo quando você quer testar em um antes dos demais:

- name: Atualizar frota web sem downtime
  hosts: web
  become: true
  serial: 1          # um servidor por vez (aceita número ou porcentagem)
  max_fail_percentage: 0
  tasks:
    - name: Atualizar pacotes
      ansible.builtin.apt:
        upgrade: dist
        update_cache: true
ansible-playbook -i inventario.ini atualiza.yml --limit web1.exemplo.com.br

Comandos rápidos (ad-hoc)

# atualizar pacotes em todos os servidores web
ansible -i inventario.ini web -b -m apt -a "upgrade=dist update_cache=yes"

# reiniciar um serviço em um grupo
ansible -i inventario.ini db -b -m service -a "name=mariadb state=restarted"

Comece automatizando uma tarefa que você repete toda semana — em um mês você não vai mais lembrar como vivia sem. Para organizar tudo em roles reutilizáveis e aprofundar nos módulos, a referência é a documentação oficial; e se automação é o seu rumo de carreira, o Ansible é peça central da certificação LPI DevOps Tools Engineer.