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
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
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
18. Cómo configurar y usar LVM en Ubuntu Server: una guía completa – 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
Índice
¿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:
- Nodo de control: una máquina (tu sistema local o un servidor dedicado) donde Ansible está instalado.
- Servidores de destino: servidores Ubuntu (locales o en la nube) que quieres configurar.
- 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
- Actualizar y mejorar paquetes: garantiza que el servidor tenga las últimas actualizaciones y parches de seguridad.
- Instalar paquetes comunes: instala herramientas esenciales como
curl,wgetygit. - Activar UFW: configura el cortafuegos para permitir el acceso SSH.
- Crear un usuario nuevo: añade un usuario nuevo con privilegios sudo.
- 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”