24. Automatización de la configuración de Ubuntu Server con Ansible: una guía práctica

Introducción

Configurar y gestionar servidores manualmente puede ser un proceso tedioso y propenso a errores, especialmente en entornos con varios servidores o tareas de configuración repetitivas. Ansible, una potente herramienta de automatización de TI de código abierto, simplifica este proceso al permitirte automatizar con facilidad el aprovisionamiento, la configuración y la gestión de servidores. En esta guía «24. Automatización de la configuración de Ubuntu Server con Ansible: una guía práctica» te guiaremos por los fundamentos del uso de Ansible para automatizar la configuración de Ubuntu Server. Al final, aprenderás a escribir y ejecutar playbooks de Ansible para simplificar tareas comunes de servidor, mejorar la eficiencia y garantizar la coherencia en toda tu infraestructura.


Artículos anteriores:

01. Introducción a Ubuntu Server – SysOSX: AI & Cloud

02. Cómo configurar tu primer servidor Ubuntu: guía para principiantes – SysOSX: AI & Cloud

03. Dominar la línea de comandos de Linux para Ubuntu Server – SysOSX: AI & Cloud

04. Gestión de usuarios y permisos en Ubuntu Server: una guía completa – SysOSX: AI & Cloud

05. Fundamentos de redes para Ubuntu Server: una guía completa – SysOSX: AI & Cloud

06. Instalar y gestionar software en Ubuntu Server: una guía completa – SysOSX: AI & Cloud

07.Aplicar parches y actualizar Ubuntu Server: una guía completa – SysOSX: AI & Cloud

08. Proteger tu servidor Ubuntu: pasos prácticos para reforzar y proteger – SysOSX: AI & Cloud

09. Auditoría y registro del servidor Ubuntu

10. Herramientas de supervisión del sistema para Ubuntu Server: una guía completa – SysOSX: AI & Cloud

11. Registro centralizado para servidores Ubuntu: una guía imprescindible – SysOSX: AI & Cloud

12. Auditoría y cumplimiento para Ubuntu Server: mejores prácticas – SysOSX: AI & Cloud

13. Configurar tu servidor Ubuntu para alojamiento y aplicaciones web: la guía definitiva – SysOSX: AI & Cloud

14. Alojar varios sitios web en un solo servidor Ubuntu: consejos útiles – SysOSX: AI & Cloud

15. Gestión del almacenamiento y los discos en Ubuntu Server: guía sencilla – SysOSX: AI & Cloud

16. Configurar servicios de uso compartido de archivos en Ubuntu Server: una guía completa – SysOSX: AI & Cloud

17. Configurar un servidor de bases de datos seguro en Ubuntu: MySQL frente a MariaDB – SysOSX: AI & Cloud

18. Cómo configurar y usar LVM en Ubuntu Server: una guía completa – SysOSX: AI & Cloud

19. Introducción a la virtualización con KVM: guía para principiantes para Ubuntu Server – SysOSX: AI & Cloud

20. Cómo instalar Docker en Ubuntu Server: una guía paso a paso sobre la contenerización – SysOSX: AI & Cloud

21. Primeros pasos con LXD: instala contenedores con facilidad + hoja de referencia – SysOSX: AI & Cloud

22. Primeros pasos con Podman en Ubuntu Server: una guía completa – SysOSX: AI & Cloud

23. Implementar Ubuntu Server en la nube: una guía paso a paso – SysOSX: AI & Cloud



¿Por qué usar Ansible para automatizar servidores?

Ansible se usa mucho para automatizar servidores por su sencillez y su potencia. Estas son las razones por las que es una de las mejores opciones:

  • Sin agentes: Ansible no requiere instalar ningún software de agente en los servidores de destino. Usa SSH para la comunicación.
  • Sintaxis declarativa: los playbooks de Ansible usan YAML, una sintaxis legible para las personas, que facilita definir los estados deseados.
  • Configuraciones reutilizables: escribe playbooks una vez y reutilízalos en varios servidores.
  • Idempotente: Ansible garantiza que las tareas solo se ejecuten cuando es necesario, evitando operaciones redundantes.
  • Extensibilidad: Ansible admite una amplia gama de módulos para tareas como la instalación de paquetes, la gestión de archivos y la configuración de servicios.

Requisitos previos

Antes de sumergirnos en la automatización de la configuración de Ubuntu Server con Ansible, asegúrate de tener lo siguiente:

  1. Nodo de control: una máquina (tu sistema local o un servidor dedicado) donde Ansible está instalado.
  2. Servidores de destino: servidores Ubuntu (locales o en la nube) que quieres configurar.
  3. Acceso SSH: asegúrate de que el acceso SSH sin contraseña esté configurado entre el nodo de control y los servidores de destino.

Paso 1: Instalar Ansible

1.1 Instalar Ansible en el nodo de control

En tu nodo de control (por ejemplo, tu máquina local con Ubuntu), instala Ansible:

sudo apt update  
sudo apt install ansible -y  

1.2 Verificar la instalación

Comprueba la versión instalada de Ansible para asegurarte de que se ha instalado correctamente:

ansible --version  

Ejemplo de salida:

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]


Paso 2: Configurar el acceso SSH

Ansible se comunica con los servidores de destino por SSH. Tendrás que configurar el acceso SSH sin contraseña desde el nodo de control a los servidores de destino.

2.1 Generar un par de claves SSH

Si aún no tienes un par de claves SSH, genera uno:

ssh-keygen -t rsa -b 2048  

2.2 Copiar la clave SSH a los servidores de destino

Usa el siguiente comando para copiar tu clave pública al servidor o servidores de destino:

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

Prueba el acceso SSH para asegurarte de que funciona sin contraseña:

ssh ubuntu@<target-server-ip>  


Paso 3: Definir tu inventario

Ansible usa un archivo de inventario para definir los servidores de destino que quieres gestionar.

3.1 Crear un archivo de inventario

Crea un archivo llamado inventory en tu directorio de trabajo:

nano inventory  

Añade las direcciones IP o los nombres de host de los servidores de destino. Por ejemplo:

[ubuntu_servers]  
192.168.50.42  
192.168.50.145

Guarda el archivo y sal (Ctrl+O y luego Ctrl+X).

3.2 Probar la conectividad

Usa el ping módulo para probar la conectividad con los servidores de destino:

ansible -i inventory ubuntu_servers -m ping  

Ejemplo de salida:

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"
}


Paso 4: Escribe tu primer playbook de Ansible

Los playbooks de Ansible son archivos YAML que definen las tareas que quieres automatizar. Vamos a crear un playbook para automatizar la configuración de un servidor Ubuntu.

4.1 Crear un archivo de playbook

Crea un archivo llamado setup.yml:

nano setup.yml  

4.2 Definir el playbook

Añade el siguiente contenido al 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  

Explicación de las tareas

  1. Actualizar y mejorar paquetes: garantiza que el servidor tenga las últimas actualizaciones y parches de seguridad.
  2. Instalar paquetes comunes: instala herramientas esenciales como curl, wget y git.
  3. Activar UFW: configura el cortafuegos para permitir el acceso SSH.
  4. Crear un usuario nuevo: añade un usuario nuevo con privilegios sudo.
  5. Establecer el nombre de host: configura el nombre de host del servidor.

Guarda el archivo y sal.


Paso 5: Ejecutar el playbook

Ejecuta el playbook para aplicar las configuraciones:

ansible-playbook -i inventory setup.yml  

Ansible registrará el progreso de cada tarea. Si todas las tareas se completan correctamente, tu servidor Ubuntu quedará totalmente configurado.

Salida a continuación:

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



Paso 6: Verificar la configuración

6.1 Comprobar los paquetes instalados

Inicia sesión en uno de los servidores de destino y comprueba que los paquetes comunes se hayan instalado:

curl --version  
git --version  

6.2 Comprobar el estado del cortafuegos

Comprueba que el cortafuegos esté activado:

sudo ufw status  

6.3 Comprobar el usuario nuevo

Asegúrate de que el usuario nuevo se haya creado:

cat /etc/passwd | grep devuser  


Casos de uso avanzados

Cuando te sientas cómodo con los playbooks básicos, puedes explorar casos de uso más avanzados:

  • Implementar aplicaciones: usa Ansible para instalar y configurar servidores web (por ejemplo, Nginx, Apache) o bases de datos (por ejemplo, MySQL, PostgreSQL).
  • Gestionar varios entornos: crea archivos de inventario independientes para los entornos de staging, producción y desarrollo.
  • Usar roles: organiza tus playbooks en roles reutilizables para configuraciones complejas.
  • Integración con CI/CD: automatiza la configuración de servidores como parte de tu pipeline de CI/CD.

Referencia:

Documentación de Ansible — Documentación de la comunidad de Ansible


Conclusión

Ansible es una herramienta potente para automatizar la configuración de servidores. En esta guía hemos cubierto:

  • Instalar Ansible en el nodo de control.
  • Configurar el acceso SSH a los servidores de destino.
  • Escribir y ejecutar un playbook básico para automatizar la configuración de Ubuntu Server.

Al aprovechar Ansible, puedes ahorrar tiempo, reducir errores y garantizar la coherencia en toda tu infraestructura. Tanto si gestionas un solo servidor como cientos, Ansible es una herramienta esencial para los flujos de trabajo modernos de DevOps.

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

Deja un comentario