Este proyecto es una guía práctica y educativa diseñada para entender los conceptos fundamentales del flujo de trabajo DevOps. Implementa un servicio simple de consulta del clima usando FastAPI y demuestra cómo containerizar una aplicación con Docker.
Es un servicio REST API construido con FastAPI que permite consultar el clima actual de cualquier ciudad del mundo utilizando la API de OpenWeatherMap.
Endpoints disponibles:
GET /health- Verifica el estado de la aplicación (health check)GET /weather/{city}- Retorna los datos del clima de la ciudad especificada
Es el corazón de la aplicación. Contiene:
- La definición de la aplicación FastAPI con su configuración
- La carga de variables de entorno usando
python-dotenv - El endpoint
/healthpara monitoreo y verificación de disponibilidad - El endpoint
/weather/{city}que consulta la API externa de OpenWeatherMap y retorna los datos del clima
-> Define la lógica de negocio y la exposición de los servicios web.
Lista las dependencias de Python necesarias para ejecutar la aplicación:
fastapi- El framework web para construir la APIuvicorn- El servidor ASGI para ejecutar la aplicaciónrequests- Cliente HTTP para consumir la API de climapython-dotenv- Para cargar variables de entorno desde el archivo.env
-> Permite la reproducibilidad del entorno: cualquier persona puede instalar las dependencias exactas con pip install -r requirements.txt. Es una práctica estándar en Python y fundamental para el despliegue automatizado.
Define cómo construir la imagen de Docker de la aplicación. Cada instrucción cumple un propósito:
FROM python:3.11-slim- Usa una imagen base ligera de Python para reducir el tamaño de la imagen finalWORKDIR /app- Establece el directorio de trabajo dentro del contenedorCOPY requirements.txt .- Copia primero las dependencias (aprovecha el caché de capas de Docker)RUN pip install --no-cache-dir -r requirements.txt- Instala las dependencias sin caché para reducir tamañoCOPY . .- Copia el código fuente al contenedorEXPOSE 8000- Documenta que la aplicación usa el puerto 8000CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]- Define el comando por defecto para ejecutar la app
-> Es la base de la containerización. Permite empaquetar la aplicación con todas sus dependencias en un contenedor portable, asegurando que funcione igual en desarrollo, pruebas y producción (el concepto "Build once, run anywhere" de DevOps).
-> Lista archivos y directorios que Git debe ignorar (como .env, .venv/, __pycache__/).
- Git instalado
- Python 3.11+ (si vas a ejecutar sin Docker)
- Docker (si vas a ejecutar con contenedor)
git clone https://github.com/tu-usuario/simple_devops_workflow.git
cd simple_devops_workflowCrea un archivo .env en la raíz del proyecto:
echo "OPENWEATHER_API_KEY=tu_api_key_aqui" > .envPara obtener una API key gratuita, regístrate en OpenWeatherMap.
Esta página es únicamente de prueba, y ofrece claves API gratuitas de por vida.
Crea y activa un entorno virtual, luego instala las dependencias:
python -m venv .venv
source .venv/bin/activate # En Windows: .venv\Scripts\activate
pip install -r requirements.txt
uvicorn main:app --host 0.0.0.0 --port 8000La aplicación estará disponible en http://localhost:8000.
Construye la imagen de Docker:
docker build -t simple-devops-app .Ejecuta el contenedor:
docker run -p 8000:8000 --env-file .env simple-devops-appVerifica que la aplicación está funcionando:
curl http://localhost:8000/healthConsulta el clima de una ciudad:
curl http://localhost:8000/weather/LondonTambién puedes usar la documentación interactiva de FastAPI en http://localhost:8000/docs.
| Concepto | Dónde se ve |
|---|---|
| Containerización | Dockerfile define el empaquetado de la app |
| Infrastructure as Code | El Dockerfile es código que define la infraestructura |
| Health Checks | Endpoint /health para monitoreo |
| Environment Variables | Uso de .env para configuración externa |
| Dependency Management | requirements.txt lista las dependencias |
| Reproducibilidad | Cualquier persona puede clonar y ejecutar la app |
- Desarrollo: Modificas
main.pylocalmente - Commit: Guardas cambios con Git
- Build:
docker buildcrea la imagen - Test: Verificas con
curl /healthy/weather - Deploy: Subes la imagen a un registro (Docker Hub, ECR, etc.)
- Run: Ejecutas el contenedor en producción