24. Automatizando a configuração do Ubuntu Server com Ansible: um guia prático

Introdução

Configurar e gerenciar servidores manualmente pode ser um processo tedioso e propenso a erros, especialmente em ambientes com vários servidores ou tarefas de configuração repetitivas. O Ansible, uma poderosa ferramenta de automação de TI de código aberto, simplifica esse processo ao permitir automatizar com facilidade o provisionamento, a configuração e o gerenciamento de servidores. Neste guia “24. Automatizando a configuração do Ubuntu Server com Ansible: um guia prático” mostraremos os fundamentos do uso do Ansible para automatizar a configuração do Ubuntu Server. Ao final, você aprenderá a escrever e executar playbooks do Ansible para simplificar tarefas comuns de servidor, melhorar a eficiência e garantir consistência em toda a sua infraestrutura.


Artigos anteriores:

01. Introdução ao Ubuntu Server – SysOSX: AI & Cloud

02. Como configurar o seu primeiro servidor Ubuntu: guia para iniciantes – SysOSX: AI & Cloud

03. Dominando a linha de comando do Linux para Ubuntu Server – SysOSX: AI & Cloud

04. Gerenciamento de usuários e permissões no Ubuntu Server: um guia completo – SysOSX: AI & Cloud

05. Fundamentos de rede para Ubuntu Server: um guia completo – SysOSX: AI & Cloud

06. Instalar e gerenciar software no Ubuntu Server: um guia completo – SysOSX: AI & Cloud

07.Aplicar patches e atualizar o Ubuntu Server: um guia completo – SysOSX: AI & Cloud

08. Proteger o seu servidor Ubuntu: etapas práticas de reforço e proteção – SysOSX: AI & Cloud

09. Auditoria e registro do servidor Ubuntu

10. Ferramentas de monitoramento de sistema para Ubuntu Server: um guia completo – SysOSX: AI & Cloud

11. Registro centralizado para servidores Ubuntu: um guia indispensável – SysOSX: AI & Cloud

12. Auditoria e conformidade para Ubuntu Server: melhores práticas – SysOSX: AI & Cloud

13. Configurar o seu servidor Ubuntu para hospedagem e aplicativos web: guia definitivo – SysOSX: AI & Cloud

14. Hospedar vários sites em um único servidor Ubuntu: dicas úteis – SysOSX: AI & Cloud

15. Gerenciamento de armazenamento e discos no Ubuntu Server: guia simples – SysOSX: AI & Cloud

16. Configurar serviços de compartilhamento de arquivos no Ubuntu Server: um guia completo – SysOSX: AI & Cloud

17. Configurar um servidor de banco de dados seguro no Ubuntu: MySQL vs. MariaDB – SysOSX: AI & Cloud

18. Como configurar e usar LVM no Ubuntu Server: um guia completo – SysOSX: AI & Cloud

19. Introdução à virtualização com KVM: guia para iniciantes para Ubuntu Server – SysOSX: AI & Cloud

20. Como instalar o Docker no Ubuntu Server: um guia passo a passo para conteinerização – SysOSX: AI & Cloud

21. Primeiros passos com LXD: instale contêineres com facilidade + folha de referência – SysOSX: AI & Cloud

22. Primeiros passos com Podman no Ubuntu Server: um guia completo – SysOSX: AI & Cloud

23. Implantar o Ubuntu Server na nuvem: um guia passo a passo – SysOSX: AI & Cloud



Por que usar o Ansible para automação de servidores?

O Ansible é amplamente usado para automação de servidores por sua simplicidade e potência. Veja por que é uma das melhores escolhas:

  • Sem agente: o Ansible não exige a instalação de nenhum software de agente nos servidores de destino. Ele usa SSH para comunicação.
  • Sintaxe declarativa: os playbooks do Ansible usam YAML, uma sintaxe legível para humanos, facilitando a definição dos estados desejados.
  • Configurações reutilizáveis: escreva playbooks uma vez e reutilize-os em vários servidores.
  • Idempotente: o Ansible garante que as tarefas só sejam executadas quando necessário, evitando operações redundantes.
  • Extensibilidade: o Ansible oferece suporte a uma ampla variedade de módulos para tarefas como instalação de pacotes, gerenciamento de arquivos e configuração de serviços.

Pré-requisitos

Antes de mergulharmos na automação da configuração do Ubuntu Server com o Ansible, verifique se você tem o seguinte:

  1. Nó de controle: uma máquina (o seu sistema local ou um servidor dedicado) onde o Ansible está instalado.
  2. Servidores de destino: servidores Ubuntu (locais ou na nuvem) que você quer configurar.
  3. Acesso SSH: verifique se o acesso SSH sem senha está configurado entre o nó de controle e os servidores de destino.

Etapa 1: Instalar o Ansible

1.1 Instalar o Ansible no nó de controle

No seu nó de controle (por exemplo, a sua máquina local com Ubuntu), instale o Ansible:

sudo apt update  
sudo apt install ansible -y  

1.2 Verificar a instalação

Verifique a versão instalada do Ansible para garantir que ele foi instalado corretamente:

ansible --version  

Exemplo de saída:

ansible 2.10.8
  config file = None
  configured module search path = ['/home/uadmin/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.10.12 (main, Feb  4 2025, 14:57:36) [GCC 11.4.0]


Etapa 2: Configurar o acesso SSH

O Ansible se comunica com os servidores de destino por SSH. Você precisará configurar o acesso SSH sem senha do nó de controle para os servidores de destino.

2.1 Gerar um par de chaves SSH

Se você ainda não tem um par de chaves SSH, gere um:

ssh-keygen -t rsa -b 2048  

2.2 Copiar a chave SSH para os servidores de destino

Use o seguinte comando para copiar a sua chave pública para o servidor ou servidores de destino:

ssh-copy-id ubuntu@<target-server-ip>  

Teste o acesso SSH para garantir que ele funciona sem senha:

ssh ubuntu@<target-server-ip>  


Etapa 3: Definir o seu inventário

O Ansible usa um arquivo de inventário para definir os servidores de destino que você quer gerenciar.

3.1 Criar um arquivo de inventário

Crie um arquivo chamado inventory no seu diretório de trabalho:

nano inventory  

Adicione os endereços IP ou nomes de host dos servidores de destino. Por exemplo:

[ubuntu_servers]  
192.168.50.42  
192.168.50.145

Salve o arquivo e saia (Ctrl+O e depois Ctrl+X).

3.2 Testar a conectividade

Use o ping módulo para testar a conectividade com os servidores de destino:

ansible -i inventory ubuntu_servers -m ping  

Exemplo de saída:

192.168.50.145 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}
192.168.50.42 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}


Etapa 4: Escreva o seu primeiro playbook do Ansible

Os playbooks do Ansible são arquivos YAML que definem as tarefas que você quer automatizar. Vamos criar um playbook para automatizar a configuração de um servidor Ubuntu.

4.1 Criar um arquivo de playbook

Crie um arquivo chamado setup.yml:

nano setup.yml  

4.2 Definir o playbook

Adicione o seguinte conteúdo ao playbook:

---  
- name: Configure Ubuntu Server  
  hosts: ubuntu_servers  
  become: true  

  tasks:  
    - name: Update and upgrade apt packages  
      apt:  
        update_cache: yes  
        upgrade: dist  

    - name: Install common packages  
      apt:  
        name:  
          - curl  
          - wget  
          - git  
          - build-essential  
        state: present  

    - name: Enable UFW and allow SSH  
      ufw:  
        rule: allow  
        name: OpenSSH  
        state: enabled  

    - name: Create a new user  
      user:  
        name: devuser  
        password: "{{ 'password123' | password_hash('sha512') }}"  
        state: present  
        groups: sudo  

Explicação das tarefas

  1. Atualizar e melhorar pacotes: garante que o servidor tenha as atualizações e os patches de segurança mais recentes.
  2. Instalar pacotes comuns: instala ferramentas essenciais como curl, wget e git.
  3. Ativar o UFW: configura o firewall para permitir o acesso SSH.
  4. Criar um novo usuário: adiciona um novo usuário com privilégios sudo.
  5. Definir o nome do host: configura o nome do host do servidor.

Salve o arquivo e saia.


Etapa 5: Executar o playbook

Execute o playbook para aplicar as configurações:

ansible-playbook -i inventory setup.yml  

O Ansible registrará o progresso de cada tarefa. Se todas as tarefas forem concluídas com sucesso, o seu servidor Ubuntu estará totalmente configurado.

Saída abaixo:

uadmin@u2204-001:~$ sudo ansible-playbook -i inventory setup.yml

PLAY [Configure Ubuntu Server] ***************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************
ok: [192.168.50.145]
ok: [192.168.50.42]

TASK [Update and upgrade apt packages] *******************************************************************************
^X^C [ERROR]: User interrupted execution
uadmin@u2204-001:~$ sudo nano setup.yml
uadmin@u2204-001:~$ sudo ansible-playbook -i inventory setup.yml

PLAY [Configure Ubuntu Server] ***************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************
ok: [192.168.50.145]
ok: [192.168.50.42]

TASK [Update and upgrade apt packages] *******************************************************************************
ok: [192.168.50.42]
ok: [192.168.50.145]

TASK [Install common packages] ***************************************************************************************
changed: [192.168.50.145]
changed: [192.168.50.42]

TASK [Enable UFW and allow SSH] **************************************************************************************
changed: [192.168.50.145]
changed: [192.168.50.42]

TASK [Create a new user] *********************************************************************************************
changed: [192.168.50.42]
changed: [192.168.50.145]

PLAY RECAP ***********************************************************************************************************
192.168.50.145             : ok=5    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
192.168.50.42              : ok=5    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0



Etapa 6: Verificar a configuração

6.1 Verificar os pacotes instalados

Faça login em um dos servidores de destino e verifique se os pacotes comuns foram instalados:

curl --version  
git --version  

6.2 Verificar o status do firewall

Verifique se o firewall está ativado:

sudo ufw status  

6.3 Verificar o novo usuário

Verifique se o novo usuário foi criado:

cat /etc/passwd | grep devuser  


Casos de uso avançados

Quando estiver familiarizado com playbooks básicos, você pode explorar casos de uso mais avançados:

  • Implantar aplicativos: use o Ansible para instalar e configurar servidores web (por exemplo, Nginx, Apache) ou bancos de dados (por exemplo, MySQL, PostgreSQL).
  • Gerenciar vários ambientes: crie arquivos de inventário separados para ambientes de staging, produção e desenvolvimento.
  • Usar papéis: organize os seus playbooks em papéis reutilizáveis para configurações complexas.
  • Integração com CI/CD: automatize a configuração de servidores como parte do seu pipeline de CI/CD.

Referência:

Documentação do Ansible — Documentação da comunidade Ansible


Conclusão

O Ansible é uma ferramenta poderosa para automatizar a configuração de servidores. Neste guia, abordamos:

  • Instalar o Ansible no nó de controle.
  • Configurar o acesso SSH aos servidores de destino.
  • Escrever e executar um playbook básico para automatizar a configuração do Ubuntu Server.

Ao aproveitar o Ansible, você pode economizar tempo, reduzir erros e garantir consistência em toda a sua infraestrutura. Seja gerenciando um único servidor ou centenas deles, o Ansible é uma ferramenta essencial para fluxos de trabalho modernos de DevOps.

2 thoughts on “24. Automating Ubuntu Server Setup with Ansible: A Practical Guide”

Deixe um comentário