En producción no alcanza con saber que un contenedor está encendido. También necesitas comprobar que el proceso responde y que la aplicación puede atender tráfico de forma confiable.
Esta guía propone una base conservadora para empaquetar una API Python en Docker, cargar variables de entorno de forma segura, agregar un healthcheck y validar el despliegue antes de usarlo con tráfico o datos reales.
Qué vas a construir
Vas a preparar una implementación base para una API Python en Docker que puedas adaptar a un Cloud Server de DonWeb Cloud, a una instancia Linux propia o a un entorno de laboratorio.
El resultado esperado es una configuración documentada, con comandos de prueba y criterios mínimos para pasar de laboratorio a producción.
Cuándo conviene usarlo
Este enfoque es útil cuando necesitas:
- Una solución operativa y repetible, no solo una explicación conceptual.
- Ejecutar un servicio en un servidor cloud con seguridad básica desde el primer despliegue.
- Dejar evidencia de configuración, pruebas y criterios de mantenimiento.
- Reducir configuraciones manuales difíciles de auditar.
Requisitos previos
Antes de comenzar, asegúrate de contar con:
- Cloud Server o servidor Ubuntu/Debian actualizado.
- Usuario con permisos
sudoo rol equivalente. - Acceso SSH o consola segura.
- Backup previo si el servidor ya tiene datos o tráfico real.
- Dominio o subdominio si vas a publicar un servicio web.
- Credenciales con mínimo privilegio si se usan comandos AWS.
- Ventana de mantenimiento para cambios de red, firewall, runtime, base de datos o credenciales.
Flujo de trabajo recomendado
El flujo general es:
- Preparar el entorno.
- Configurar la solución con archivos versionables.
- Construir la imagen Docker.
- Ejecutar el contenedor con variables externas.
- Probar el endpoint de salud.
- Revisar logs y dejar criterios de mantenimiento.
Evita cambiar varias capas a la vez. Si algo falla, una modificación incremental es más fácil de revisar, aislar y revertir.
Configuración base del healthcheck
El healthcheck debe validar el estado real del proceso, no solo la existencia del contenedor. Una forma simple de declararlo en la imagen es usar una instrucción como esta:
HEALTHCHECK --interval=30s --timeout=3s --retries=3 CMD python healthcheck.py || exit 1La idea es que healthcheck.py devuelva éxito solo cuando la API esté en condiciones de responder correctamente.
Comandos principales
Construir la imagen:
docker build -t api-health .Ejecutar el contenedor cargando variables desde .env:
docker run -d --name api -p 8000:8000 --env-file .env api-healthInspeccionar el estado del healthcheck:
docker inspect --format '{{json .State.Health}}' apiProbar el endpoint de salud:
curl -f http://localhost:8000/healthRevisar los logs recientes:
docker logs api --tail=50Paso 1: Preparar el servidor o entorno
Antes de ejecutar comandos, confirma que estás en el servidor correcto. Si el servicio ya recibe tráfico, trabaja dentro de una ventana de mantenimiento y asegúrate de tener una ruta de rollback.
También conviene revisar que Docker esté disponible, que el proyecto tenga los archivos necesarios y que las variables sensibles no estén incluidas dentro del código fuente.
Paso 2: Configurar la solución
Agrega la configuración necesaria para que la imagen pueda verificar el estado de la aplicación con un healthcheck.
HEALTHCHECK --interval=30s --timeout=3s --retries=3 CMD python healthcheck.py || exit 1Mantén las configuraciones versionables separadas de los secretos. Las variables sensibles deben cargarse desde un archivo .env o desde el mecanismo de secretos del entorno donde ejecutes el contenedor.
Paso 3: Construir la imagen Docker
Una vez preparada la configuración, construye la imagen:
docker build -t api-health .Verifica la salida antes de continuar. Si la construcción falla, revisa dependencias, rutas de archivos y permisos antes de intentar ejecutar el contenedor.
Paso 4: Ejecutar el contenedor con variables seguras
Ejecuta la API usando un archivo .env para cargar variables de entorno sin escribir secretos dentro de la imagen:
docker run -d --name api -p 8000:8000 --env-file .env api-healthAntes de usar este patrón en producción, confirma que el archivo .env no se versiona y que las credenciales no aparecen en logs, imágenes ni comandos compartidos.
Paso 5: Probar que la API responde
Valida el endpoint de salud:
curl -f http://localhost:8000/healthLuego inspecciona el estado del healthcheck desde Docker:
docker inspect --format '{{json .State.Health}}' apiEsta verificación ayuda a detectar casos donde el contenedor está encendido, pero el proceso interno no responde correctamente.
Paso 6: Revisar logs y dejar mantenimiento
Revisa los últimos registros del contenedor:
docker logs api --tail=50Busca errores de inicio, variables faltantes, problemas de conexión con dependencias, fallos de DNS o respuestas inesperadas del endpoint de salud.
Antes de mover tráfico real, deja documentado qué se probó, qué salida se obtuvo y qué procedimiento se usará para rollback.
Problemas frecuentes
- Permisos insuficientes: revisa el usuario, el grupo, el rol IAM o el contexto de Kubernetes antes de repetir comandos con más privilegios.
- Puerto ocupado o cerrado: valida con
ss -tulpn, reglas de firewall y security groups antes de asumir que la aplicación falló. - Variables de entorno ausentes: confirma
.env, secretos del orquestador y que no se impriman credenciales en logs. - Servicio inicia pero no responde: revisa healthchecks, logs, dependencia de base de datos y resolución DNS.
- Rollback no definido: conserva versión anterior, snapshot, backup o manifiesto previo antes de aplicar cambios sensibles.
Buenas prácticas para producción
- Usa mínimo privilegio para usuarios, roles, contenedores y reglas de red.
- Versiona configuraciones sin incluir secretos.
- Prueba restauraciones de backup, no solo la creación del archivo.
- Activa logs y alertas antes de necesitar diagnosticar un incidente.
- Documenta quién puede ejecutar cambios y qué evidencia debe quedar.
- Revisa periódicamente dependencias, imágenes y paquetes del sistema.
Advertencias de seguridad
No ejecutes estos pasos contra infraestructura de terceros ni contra producción sin autorización.
Los comandos y recomendaciones de seguridad están orientados a defensa, mitigación y auditoría autorizada. Si detectas credenciales expuestas, rota primero las credenciales y luego investiga el alcance.
