Skip to content

Commit c2fc1ee

Browse files
authored
Update README.md
1 parent 54475a1 commit c2fc1ee

File tree

1 file changed

+208
-3
lines changed

1 file changed

+208
-3
lines changed

practicas/README.md

Lines changed: 208 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,217 @@
33

44
# Actividades Prácticas
55

6-
76
En esta carpeta se encuentran las prácticas distribuidas por patrón y tipo.
8-
9-
107
Cada práctica incluye:
118
- Instrucciones detalladas
129
- Diagramas UML
1310
- Código fuente
1411
- Criterios de evaluación
12+
13+
---
14+
15+
## ✅ ¿Qué es un Ansible Playbook?
16+
17+
Un **Ansible Playbook** es un archivo escrito en el lenguaje **YAML** que contiene una o más tareas que Ansible debe ejecutar sobre uno o varios servidores (hosts). Estas tareas pueden ser:
18+
19+
* Instalar programas
20+
* Crear usuarios
21+
* Modificar archivos de configuración
22+
* Iniciar servicios
23+
* Realizar actualizaciones del sistema
24+
* Entre muchas otras acciones
25+
26+
Usar Playbooks permite automatizar y repetir tareas de administración de sistemas de forma consistente y sencilla, lo cual es ideal para practicar y aprender a gestionar servidores como **Ubuntu Server**.
27+
28+
---
29+
30+
## 🧩 ¿Qué lo hace especial?
31+
32+
* **YAML**: Fácil de leer y escribir.
33+
* **Idempotente**: Si ejecutas el Playbook varias veces, solo aplica los cambios si son necesarios.
34+
* **Automatización sin agentes**: No necesitas instalar nada en el servidor remoto (si estás usando otros equipos). Solo SSH y Python.
35+
36+
Perfecto, vamos a crear un ejemplo práctico de un **Ansible Playbook** que:
37+
38+
🔧 **Instala y configura un servidor Flask en `localhost`**,
39+
🚀 **Ejecuta una aplicación Flask básica**,
40+
📡 **Usa `systemd` para ejecutar el servidor Flask como un servicio permanente.**
41+
42+
Todo esto en un entorno **Ubuntu Server**, sin inventario (solo localhost).
43+
44+
---
45+
46+
## ✅ ¿Qué hace este Playbook?
47+
48+
1. Instala Python 3, pip y otros paquetes necesarios.
49+
2. Crea una aplicación básica de Flask.
50+
3. Configura un servicio de systemd para que Flask se inicie automáticamente.
51+
4. Inicia y habilita el servicio.
52+
53+
---
54+
55+
## 📂 Estructura esperada
56+
57+
Supongamos que trabajas en un directorio como:
58+
59+
```
60+
~/flask_ansible/
61+
├── flask_app.py # Tu app Flask (se crea desde Ansible)
62+
├── flask.service # Archivo systemd (se crea desde Ansible)
63+
├── playbook.yml # Tu playbook de Ansible
64+
```
65+
66+
Pero en este caso, **Ansible generará los archivos automáticamente**.
67+
68+
---
69+
70+
## 🧾 Paso 1: Crear el Playbook
71+
72+
Guarda este contenido como `playbook.yml`:
73+
74+
```yaml
75+
---
76+
- name: Instalar y configurar servidor Flask en localhost
77+
hosts: localhost
78+
connection: local
79+
become: true
80+
81+
vars:
82+
app_dir: /opt/flask_app
83+
app_file: flask_app.py
84+
service_name: flask
85+
86+
tasks:
87+
- name: Instalar dependencias necesarias
88+
apt:
89+
name:
90+
- python3
91+
- python3-pip
92+
update_cache: yes
93+
state: present
94+
95+
- name: Instalar Flask con pip
96+
pip:
97+
name: flask
98+
executable: pip3
99+
100+
- name: Crear directorio para la app Flask
101+
file:
102+
path: "{{ app_dir }}"
103+
state: directory
104+
owner: "{{ ansible_user }}"
105+
mode: '0755'
106+
107+
- name: Crear aplicación Flask de ejemplo
108+
copy:
109+
dest: "{{ app_dir }}/{{ app_file }}"
110+
content: |
111+
from flask import Flask
112+
app = Flask(__name__)
113+
114+
@app.route("/")
115+
def hello():
116+
return "¡Hola desde Flask en Ansible!"
117+
118+
if __name__ == "__main__":
119+
app.run(host="0.0.0.0", port=5000)
120+
121+
- name: Crear archivo systemd para Flask
122+
copy:
123+
dest: /etc/systemd/system/{{ service_name }}.service
124+
content: |
125+
[Unit]
126+
Description=Flask App
127+
After=network.target
128+
129+
[Service]
130+
User={{ ansible_user }}
131+
WorkingDirectory={{ app_dir }}
132+
ExecStart=/usr/bin/python3 {{ app_dir }}/{{ app_file }}
133+
Restart=always
134+
135+
[Install]
136+
WantedBy=multi-user.target
137+
138+
- name: Recargar systemd para reconocer el nuevo servicio
139+
command: systemctl daemon-reexec
140+
141+
- name: Habilitar el servicio Flask
142+
systemd:
143+
name: "{{ service_name }}"
144+
enabled: yes
145+
state: started
146+
```
147+
148+
---
149+
150+
## ▶ Paso 2: Ejecutar el Playbook
151+
152+
Abre la terminal y ejecuta:
153+
154+
```bash
155+
ansible-playbook playbook.yml --ask-become-pass
156+
```
157+
158+
> Esto instalará todo y lanzará la app Flask como un servicio.
159+
160+
---
161+
162+
## 🌐 Paso 3: Verificar que el servidor funciona
163+
164+
Abre tu navegador o usa `curl` desde la terminal:
165+
166+
```bash
167+
curl http://localhost:5000
168+
```
169+
170+
Deberías ver:
171+
172+
```
173+
¡Hola desde Flask en Ansible!
174+
```
175+
176+
---
177+
178+
## 📦 Resultado del servicio
179+
180+
Tu aplicación Flask ahora está:
181+
182+
* Corriendo como un servicio del sistema con `systemd`.
183+
* Escuchando en el puerto `5000` en `0.0.0.0` (accesible desde cualquier IP si se permite).
184+
* Se reinicia automáticamente si falla.
185+
186+
Puedes controlarla como cualquier otro servicio:
187+
188+
```bash
189+
sudo systemctl status flask
190+
sudo systemctl restart flask
191+
```
192+
193+
---
194+
195+
## 🧠 Bonus: Acceso desde red local
196+
197+
Si estás usando un servidor Ubuntu en red, asegúrate de que el puerto 5000 esté abierto:
198+
199+
```bash
200+
sudo ufw allow 5000
201+
```
202+
203+
Y podrás acceder desde otra máquina cony no olvide abrir el puerto 5000/tcp en "security groups de AWS Academy"
204+
205+
```
206+
http://IP_DEL_SERVIDOR:5000
207+
```
208+
209+
---
210+
211+
## ✅ Este ejemplo muestra cómo:
212+
213+
* Automatizar completamente la creación y ejecución de una app web con Flask.
214+
* Usar `localhost` como objetivo sin inventario.
215+
* Usar `systemd` para mantener la app corriendo.
216+
217+
---
218+
219+

0 commit comments

Comments
 (0)