preloader
  • Início
  • Como criar seu primeiro Ansible Playbook para implantar um servidor Web Apache

O Ansible é uma poderosa ferramenta de automação que simplifica o gerenciamento de TI. Neste guia, você aprenderá a criar seu primeiro playbook do Ansible para implantar um servidor Web Apache dentro de um contêiner Podman rodando Alpine Linux. Esse tutorial passo a passo é perfeito para iniciantes que desejam automatizar implantações em contêineres com eficiência.

blog-thumb

📖 Tempo estimado de leitura: 4 min


Criar um Ansible Playbook para implantar um servidor Web Apache

Não é tão complicado quanto você imagina. Automatizar a infraestrutura com o Ansible pode economizar tempo e eliminar erros de configuração manual.

Se você é novo no Ansible, um ótimo primeiro projeto é a implantação de um servidor Web em um contêiner. Neste tutorial, você aprenderá a criar um playbook Ansible que instala o Podman, inicia um contêiner Alpine Linux, configura o Apache e serve uma página simples de “Hello World”.

Tudo isso é feito em 5 etapas simples. Não acredita em mim? Continue lendo.

Ao final deste guia, você terá um servidor Web totalmente funcional em execução na porta 8080, acessível a partir do seu navegador. Tudo isso com apenas um único comando Ansible.

Vamos começar! 🚀


Pré-requisitos

Neste laboratório, usarei o Ubuntu. Mas você pode usar qualquer distribuição Linux. O resultado será o mesmo.

Antes de executar o playbook, verifique se você tem:

* O Ansible instalado em sua máquina

* Um sistema de destino com o Podman instalado (ou deixe que o playbook instala pra você)

* Acesso SSH ao sistema de destino


Passo a passo: Como escrever o Ansible Playbook

Crie um novo arquivo chamado apache_container.yml e adicione o seguinte conteúdo:

 
- name: Deploy Apache in a Podman Container
  hosts: servers
  become: yes
  tasks:
    - name: Install Podman
      package:
        name: podman
        state: present

    - name: Create an Apache container
      containers.podman.podman_container:
        name: apache_container
        image: docker.io/httpd:alpine
        state: started
        recreate: yes
        restart_policy: always
        detach: true
        ports:
          - "8080:80"

    - name: Copy index.html to the container
      command: podman cp index.html apache_container:/usr/local/apache2/htdocs/index.html
        

✅ Eu sei que você poderia simplesmente usar o módulo “copy”. No entanto, o exemplo usa command apenas para mostrar como o leitor poderia realizar mais atividades nesse playbook de exemplo.



Implantando seu contêiner Apache

1) Instalar o Ansible


 $ apt install ansible-core
 

2) Configurar o inventário do Ansible

Certifique-se de que o servidor de destino esteja listado no grupo [servers], no seu arquivo de inventário.

* Se estiver executando o playbook Ansible no localhost, seu arquivo de inventário (inventory.ini) deverá ser similar a isso:


 [servers]
 localhost ansible_connection=local
 

3) Crie a página index.html do servidor Web.

Fiz essa página caprichada pra você. 😎


  $ cat index.html

  <!DOCTYPE html>
  <html lang="en">
  <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>My First Ansible Page</title>
      <style>
          body {
              text-align: center;
              font-family: Arial, sans-serif;
          }

          img {
              margin-bottom: 20px;
          }

          img {
              max-width: 100%;
              height: auto;
          }

          .info {
              margin-top: 20px;
              font-size: 1.2em;
          }
      </style>
  </head>
  <body>
      <img src="https://raw.githubusercontent.com/ansible/logos/refs/heads/main/community-logo/Ansible-Community-Logo-RGB-Black.png" alt="Ansible Logo">

      <h1>Hello World! This is my first Ansible Playbook!</h1>

      <div class="info">
          <p><strong>Current Date and Time:</strong> <span id="datetime">Loading...</span></p>
      </div>

      <script>
          function updateDateTime() {
              var currentDate = new Date();
              var dateStr = currentDate.toLocaleString();
              document.getElementById('datetime').innerText = dateStr;
          }
          setInterval(updateDateTime, 1000);
      </script>
  </body>
  </html>
 

A propósito, você pode encontrar todos esses arquivos em nosso github público.


4) Execute o Playbook usando o seguinte comando:

 
 $ ansible-playbook -i inventory.ini apache_container.yml
 

A execução do playbook gera mensagens semelhantes a estas:

Ansible Playbook Running

5) Acesse seu servidor Web

Abra um navegador e acesse:

 
 http://<server-ip>:8080
 

Você deverá ver a mensagem “Hello World! This is my first Ansible Playbook!”. 🎉

Ansible Playbook Running

Foi mais fácil do que você pensava, não foi? 😃



O contêiner em execução

Você pode ver os recursos criados e em execução usando comandos como estes:


  $ podman ps
   
  CONTAINER ID  IMAGE                           COMMAND           CREATED         STATUS         PORTS                 NAMES
  6375dce19dde  docker.io/library/httpd:alpine  httpd-foreground  12 minutes ago  Up 12 minutes  0.0.0.0:8080->80/tcp  apache_container
   

  $ podman images

  REPOSITORY               TAG         IMAGE ID      CREATED      SIZE
  docker.io/library/httpd  alpine      fcd9ece3a2cc  4 weeks ago  66.2 MB
   

  $ podman logs apache_container | tail -10

  AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 10.88.0.31. Set the 'ServerName' directive globally to suppress this message
  AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 10.88.0.31. Set the 'ServerName' directive globally to suppress this message
  [Sun Feb 23 21:43:41.514018 2025] [mpm_event:notice] [pid 1:tid 1] AH00489: Apache/2.4.63 (Unix) configured -- resuming normal operations
  [Sun Feb 23 21:43:41.514061 2025] [core:notice] [pid 1:tid 1] AH00094: Command line: 'httpd -D FOREGROUND'
  X.X.X.X - - [23/Feb/2025:21:43:45 +0000] "GET / HTTP/1.1" 200 1192
  X.X.X.X - - [23/Feb/2025:21:44:54 +0000] "GET / HTTP/1.1" 200 1192
  X.X.X.X - - [23/Feb/2025:21:44:55 +0000] "GET /favicon.ico HTTP/1.1" 404 196
  10.88.0.1 - - [23/Feb/2025:21:51:13 +0000] "GET / HTTP/1.1" 200 1192
 

Parando e removendo o contêiner

Para remover os recursos que você criou:

 
 $ podman stop apache_container
  
 
 $ podman rm apache_container
 

 $ podman image rm docker.io/library/httpd:alpine

 Untagged: docker.io/library/httpd:alpine
 Deleted: fcd9ece3a2cca157cc637f914abf56d62aba9884aa1ee3a9b3c94dc88904874e
  


Conclusão

Parabéns! Você automatizou com êxito a implantação de um servidor Web Apache usando o Ansible e o Podman. Isso é apenas o começo!

Explore recursos mais avançados do Ansible para gerenciar sua infraestrutura com eficiência. 🚀

Se você quiser mais exemplos de automação do Ansible, informe-nos nos comentários! 🎫


Você gostou do conteúdo? Dê uma olhada nestes outros artigos interessantes! 🔥

✅ Deixe uma mensagem com suas perguntas! Compartilhe este material com sua rede de contatos!



Apoie nosso trabalho 💖

Gostou do que encontrou aqui? A cada clique em um banner, você ajuda a manter este site vivo e gratuito. Seu apoio faz toda a diferença para que possamos continuar trazendo conteúdos que você adora. Muito obrigado! 😊


Artigos que você pode gostar 📌
comments powered by Disqus