📖 Tempo estimado de leitura: 4 min
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! 🚀
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
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.
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:
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!”. 🎉
Foi mais fácil do que você pensava, não foi? 😃
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
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
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!
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! 😊