Entrar ou criar conta

Laboratório em bancada

Laboratório: Automação de Provisionamento e Configuração de Servidores Linux com Ansible

Você terá um ambiente funcional de automação com Ansible, capaz de provisionar e configurar dois servidores Linux virtuais a partir de um playbook centralizado. A execução completa leva cerca de 2 horas.

Automação de TI com Ansible
Ligado ao treinamento Automação de TI com Ansible
Duração estimada
120 min
Passos
13
Validações
4
Objetivo

O objetivo é demonstrar, na prática, como o Ansible pode automatizar o provisionamento e a configuração inicial de servidores Linux em uma rede local. Você vai criar um inventário, escrever playbooks, usar roles, variáveis, templates e o Ansible Vault para proteger informações sensíveis. No final, dois servidores estarão configurados de forma idêntica, prontos para operação.

Topologia

Três máquinas virtuais em uma rede privada: uma máquina de controle (Ansible) e dois servidores-alvo (web01 e web02), todos com Ubuntu Server 22.04. A máquina de controle acessa os servidores por SSH em uma faixa 192.168.56.0/24.

        +----------------+
        |  Ansible VM   |
        |192.168.56.10  |
        +-------+--------+
                |
   +------------+-------------+
   |                          |
+---------+            +---------+
| web01   |            | web02   |
|192.168.56.11|        |192.168.56.12|
+---------+            +---------+

Equipamentos e software

ItemRequisito, licença ou versão
VM Ansible (controle)1 vCPU, 1GB RAM, 1 interface de rede, Ubuntu Server 22.04
VM web011 vCPU, 512MB RAM, 1 interface de rede, Ubuntu Server 22.04
VM web021 vCPU, 512MB RAM, 1 interface de rede, Ubuntu Server 22.04
AnsibleGPLv3 · 2.14
OpenSSHBSD · a versão estável atual
Ubuntu ServerGPL · 22.04

Roteiro

  1. Preparar as máquinas virtuais

    Crie as três VMs na mesma rede privada. Use endereços fixos: 192.168.56.10 (Ansible), 192.168.56.11 (web01), 192.168.56.12 (web02).

    O que você deve ver: Todas as VMs acessíveis via ping entre si.

  2. Instalar o Ansible na máquina de controle

    O Ansible só precisa estar na máquina de controle. Instale usando o gerenciador de pacotes.

    sudo apt update && sudo apt install ansible -y

    O que você deve ver: Ansible instalado e disponível com o comando 'ansible --version'.

  3. Configurar acesso SSH sem senha

    Gere um par de chaves SSH na máquina de controle e copie a chave pública para web01 e web02. Isso permite automação sem intervenção manual.

    ssh-keygen -t ed25519 -C "ansible-lab"
    ssh-copy-id user@192.168.56.11
    ssh-copy-id user@192.168.56.12

    O que você deve ver: Acesso SSH sem senha entre a máquina de controle e os servidores.

  4. Criar o inventário Ansible

    O inventário define quais hosts serão gerenciados. Crie um arquivo chamado 'hosts' no diretório do projeto.

    cat > hosts <<EOF
    [webservers]
    web01 ansible_host=192.168.56.11
    web02 ansible_host=192.168.56.12
    EOF

    O que você deve ver: Arquivo 'hosts' criado com os dois servidores listados.

  5. Testar conectividade Ansible

    Verifique se o Ansible consegue se conectar aos servidores usando o módulo 'ping'.

    ansible -i hosts webservers -m ping -u user

    O que você deve ver: Saída com 'SUCCESS' para web01 e web02.

  6. Criar um playbook de configuração inicial

    O playbook automatiza tarefas como atualização de pacotes e instalação do Nginx. Crie o arquivo 'site.yml'.

    cat > site.yml <<EOF
    - hosts: webservers
      become: yes
      tasks:
        - name: Atualizar pacotes
          apt:
            update_cache: yes
            upgrade: dist
        - name: Instalar Nginx
          apt:
            name: nginx
            state: present
    EOF

    O que você deve ver: Playbook 'site.yml' criado.

  7. Executar o playbook

    Aplique o playbook para provisionar os servidores.

    ansible-playbook -i hosts site.yml -u user

    O que você deve ver: Saída mostrando as tarefas executadas com sucesso.

  8. Criar uma role Ansible para configuração do Nginx

    Roles organizam tarefas reutilizáveis. Use o comando 'ansible-galaxy init' para criar a estrutura.

    ansible-galaxy init roles/nginx_setup

    O que você deve ver: Diretório 'roles/nginx_setup' criado com subdiretórios padrão.

  9. Adicionar template de configuração ao Nginx

    Crie um template Jinja2 para o arquivo de configuração do Nginx em 'roles/nginx_setup/templates/nginx.conf.j2'.

    cat > roles/nginx_setup/templates/nginx.conf.j2 <<EOF
    user www-data;
    worker_processes auto;
    pid /run/nginx.pid;
    events { worker_connections 768; }
    http {
        server {
            listen 80 default_server;
            server_name {{ inventory_hostname }};
            root /var/www/html;
            index index.html;
        }
    }
    EOF

    O que você deve ver: Template criado em 'roles/nginx_setup/templates/nginx.conf.j2'.

  10. Adicionar tarefa para aplicar o template

    Edite 'roles/nginx_setup/tasks/main.yml' para usar o template e reiniciar o Nginx.

    cat > roles/nginx_setup/tasks/main.yml <<EOF
    - name: Copiar configuração customizada do Nginx
      template:
        src: nginx.conf.j2
        dest: /etc/nginx/nginx.conf
      notify: Reiniciar Nginx
    
    - name: Garantir que o Nginx está rodando
      service:
        name: nginx
        state: started
    EOF
    
    cat > roles/nginx_setup/handlers/main.yml <<EOF
    - name: Reiniciar Nginx
      service:
        name: nginx
        state: restarted
    EOF

    O que você deve ver: Tarefas e handler configurados na role.

  11. Atualizar o playbook para usar a role

    Modifique 'site.yml' para incluir a role 'nginx_setup'.

    cat > site.yml <<EOF
    - hosts: webservers
      become: yes
      roles:
        - nginx_setup
    EOF

    O que você deve ver: Playbook atualizado para usar a role.

  12. Proteger variáveis sensíveis com Ansible Vault

    Crie um arquivo de variáveis com senha usando o Ansible Vault.

    ansible-vault create group_vars/webservers.yml

    O que você deve ver: Arquivo criado e criptografado.

  13. Executar o playbook final

    Rode novamente o playbook, agora com roles, templates e variáveis protegidas.

    ansible-playbook -i hosts site.yml -u user --ask-vault-pass

    O que você deve ver: Playbook executado com sucesso, Nginx configurado conforme o template.

Como saber que funcionou

TesteComandoCritério
Verificar se o Nginx está rodando em ambos os servidorescurl http://192.168.56.11 && curl http://192.168.56.12Receber resposta padrão do Nginx em ambos os comandos.
Checar se o arquivo de configuração foi aplicadossh user@192.168.56.11 'cat /etc/nginx/nginx.conf'Arquivo contém o nome do host correto (inventory_hostname).
Verificar se o playbook executa sem errosansible-playbook -i hosts site.yml -u user --checkSaída sem falhas ('failed=0').
Validar proteção do Ansible Vaultcat group_vars/webservers.ymlConteúdo ilegível (criptografado).

Troubleshooting

SintomaCausa provávelCorreção
Erro de permissão ao rodar playbookUsuário remoto sem sudo configuradoAdicione o usuário ao grupo sudoers nos servidores web
Falha de conexão SSHChave SSH não copiada corretamenteRefaça o ssh-copy-id e teste acesso manual
Nginx não inicia após aplicar templateErro de sintaxe no template Jinja2Valide o template e corrija variáveis ausentes
Playbook pede senha do Vault mesmo sem variáveis sensíveisArquivo group_vars está criptografado, mas não usadoRemova o arquivo ou adicione variáveis realmente utilizadas

Segurança e hardening

  • Utilize chaves SSH protegidas por senha
  • Restrinja acesso SSH apenas à máquina de controle
  • Não armazene senhas em texto claro nos playbooks
  • Aplique atualizações de segurança nos servidores antes de expor à rede

Checklist final

Referências

  1. Ansible Vault