Entrar ou criar conta

ULC Lab · implementação reproduzível

Laboratório: Provisionamento e Configuração de Servidores Web Apache com Ansible

Você irá provisionar e configurar automaticamente dois servidores web Apache em máquinas virtuais usando Ansible, partindo do zero. Em cerca de 2 horas, terá uma infraestrutura mínima automatizada e validada.

Ansible do zero à automação de infraestrutura
Ligado ao treinamento Ansible do zero à automação de infraestrutura
ULC-LAB-DEVO-0002 · Status de validaçãoNão validado pela Upnetix: roteiro derivado da documentação oficial, para você executar e validar
Duração estimada
120 min
Passos
12
Validações
4
Versões da documentação consultada
Ansible 2.14 · OpenSSH a versão estável atual · Apache HTTP Server a versão estável atual
Objetivo

O objetivo é demonstrar, na prática, como o Ansible pode automatizar o provisionamento e a configuração de servidores Linux para rodar um serviço web. Você vai criar um playbook do zero, aplicar em múltiplos hosts e validar o resultado, entendendo cada etapa do processo.

Topologia

Uma máquina de controle (Ansible) conecta via SSH a duas máquinas alvo (web1 e web2), todas em uma rede privada (exemplo: 192.168.56.0/24). O controle executa os playbooks e gerencia as configurações dos servidores web.

                +----------------+
                |  Ansible      |
                |  Controller   |
                |192.168.56.10  |
                +-------+--------+
                        |
        +---------------+---------------+
        |                               |
+-------+--------+             +--------+-------+
|   web1         |             |   web2         |
|192.168.56.11   |             |192.168.56.12   |
+----------------+             +----------------+

Equipamentos e software

ItemRequisito, licença ou versão
VM ou máquina física para Ansible Controller1 vCPU, 1 GB RAM, 1 porta de rede, Ubuntu 22.04 ou CentOS 8
VM ou máquina física para web11 vCPU, 512 MB RAM, 1 porta de rede, Ubuntu 22.04 ou CentOS 8
VM ou máquina física para web21 vCPU, 512 MB RAM, 1 porta de rede, Ubuntu 22.04 ou CentOS 8
AnsibleGPLv3 · 2.14
OpenSSHBSD · a versão estável atual
Apache HTTP ServerApache License 2.0 · a versão estável atual

Roteiro

  1. Preparar as VMs e a rede

    Crie três VMs (uma para o Ansible Controller, duas para web) na mesma rede privada. Isso garante conectividade SSH.

    O que você deve ver: As três VMs conseguem se pingar usando IPs privados.

  2. Configurar acesso SSH sem senha

    No Controller, gere uma chave SSH e copie para web1 e web2. Isso é pré-requisito para automação sem intervenção.

    ssh-keygen -t ed25519
    ssh-copy-id user@192.168.56.11
    ssh-copy-id user@192.168.56.12

    O que você deve ver: Acesso SSH do Controller para web1 e web2 sem pedir senha.

  3. Instalar o Ansible no Controller

    Instale o Ansible usando o gerenciador de pacotes. O Ansible é a ferramenta central deste laboratório.

    sudo apt update && sudo apt install ansible -y # Ubuntu
    sudo dnf install ansible -y # CentOS

    O que você deve ver: Comando 'ansible --version' retorna a versão instalada.

  4. Criar arquivo de inventário

    Defina os hosts gerenciados em um arquivo 'hosts' no Controller. O inventário é o ponto de partida de toda automação com Ansible.

    cat > hosts <<EOF
    [webservers]
    192.168.56.11
    192.168.56.12
    EOF

    O que você deve ver: Arquivo 'hosts' criado com os IPs dos servidores web.

  5. Testar conectividade Ansible

    Use o módulo 'ping' do Ansible para testar comunicação com os alvos. Isso valida o setup SSH e inventário.

    ansible -i hosts webservers -m ping -u user

    O que você deve ver: Saída 'pong' para cada host.

  6. Criar playbook para instalar Apache

    Escreva um playbook YAML que instala e inicia o Apache. O playbook é o coração da automação.

    cat > apache.yml <<EOF
    - hosts: webservers
      become: yes
      tasks:
        - name: Instalar Apache
          apt:
            name: apache2
            state: present
          when: ansible_os_family == 'Debian'
        - name: Instalar Apache (CentOS)
          yum:
            name: httpd
            state: present
          when: ansible_os_family == 'RedHat'
        - name: Iniciar e habilitar Apache
          service:
            name: "{{ 'apache2' if ansible_os_family == 'Debian' else 'httpd' }}"
            state: started
            enabled: yes
    EOF

    O que você deve ver: Arquivo 'apache.yml' criado com as tarefas de instalação e inicialização.

  7. Executar o playbook

    Rode o playbook para instalar e iniciar o Apache nos dois servidores. Isso demonstra a automação em ação.

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

    O que você deve ver: Saída mostra tarefas OK ou changed para cada host.

  8. Verificar status do Apache manualmente

    Confirme que o Apache está rodando em cada servidor. Isso valida o resultado do playbook.

    ssh user@192.168.56.11 'sudo systemctl status apache2 || sudo systemctl status httpd'
    ssh user@192.168.56.12 'sudo systemctl status apache2 || sudo systemctl status httpd'

    O que você deve ver: Status 'active (running)' para o serviço Apache.

  9. Testar acesso HTTP

    Acesse a página padrão do Apache via curl a partir do Controller. Isso garante que o serviço está disponível na rede.

    curl http://192.168.56.11
    curl http://192.168.56.12

    O que você deve ver: Retorno contém 'Apache2 Ubuntu Default Page' ou equivalente.

  10. Modificar página inicial via Ansible

    Adicione uma tarefa ao playbook para criar um index.html personalizado. Isso mostra como gerenciar conteúdo.

    cat >> apache.yml <<EOF
        - name: Criar página inicial personalizada
          copy:
            dest: /var/www/html/index.html
            content: "Servidor gerenciado por Ansible"
            owner: www-data
            group: www-data
            mode: '0644'
    EOF

    O que você deve ver: Playbook atualizado com nova tarefa.

  11. Reaplicar o playbook

    Execute novamente para aplicar a nova configuração. O Ansible é idempotente: só muda o que precisa.

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

    O que você deve ver: Saída mostra tarefa de cópia como changed.

  12. Validar página personalizada

    Acesse novamente via curl e verifique o conteúdo. Isso confirma que a automação alterou o serviço.

    curl http://192.168.56.11
    curl http://192.168.56.12

    O que você deve ver: Retorno contém 'Servidor gerenciado por Ansible'.

Como saber que funcionou

TesteComandoCritério
Conectividade Ansible com todos os hostsansible -i hosts webservers -m ping -u userTodos retornam 'pong'
Apache rodando nos dois servidoresssh user@192.168.56.11 'sudo systemctl status apache2 || sudo systemctl status httpd'Status 'active (running)'
Acesso HTTP funcionalcurl http://192.168.56.11Página padrão ou personalizada do Apache aparece
Página inicial personalizada entreguecurl http://192.168.56.11Retorno contém 'Servidor gerenciado por Ansible'

Troubleshooting

SintomaCausa provávelCorreção
Erro de permissão ao rodar playbookUsuário remoto não tem sudo sem senhaConfigure sudoers para o usuário ou use --ask-become-pass
Falha de conexão SSHChave SSH não copiada ou firewall bloqueandoVerifique ssh-copy-id e regras de firewall
Apache não iniciaPorta 80 já em uso ou erro de instalaçãoVerifique logs do Apache e libere a porta
Página personalizada não apareceCache do navegador ou erro de permissão no arquivoLimpe cache e confira permissões do index.html

Segurança e hardening

  • Restrinja o acesso SSH apenas ao Controller
  • Utilize chaves SSH fortes e nunca compartilhe a privada
  • Remova ou limite o uso de sudo sem senha após o laboratório
  • Verifique permissões dos arquivos gerados pelo Ansible
  • Não exponha as VMs à internet pública sem firewall

Checklist final

Referências

  1. Documentação oficial do Ansible · Ansible (Red Hat) (docs.ansible.com)
  2. Documentação de inventário do Ansible · Ansible (Red Hat) (docs.ansible.com)
  3. Documentação de playbooks · Ansible (Red Hat) (docs.ansible.com)
Verificação editorial
Publicado
09/09/2026
Última revisão
09/09/2026
Versão do conteúdo
1.0
Referências
3 oficiais
Revisão técnica
redação e revisão por IA, URLs conferidas na publicação
Status
Atual
Encontrou um erro? Escreva para comercial@upnetix.com.br com o endereço da página. A revisão semestral por IA nunca altera comandos ou configurações sem passar pela fila de revisão.