pygeoapi en producción: TLS, acceso, límites y monitoreo
Despliegue pygeoapi con servidor y proxy de producción, límites, identidad, caché, recuperación y pruebas de fallas.
Revisión editorial: 2026-09-23
pygeoapi en producción es un servicio de datos mantenido, no un proceso de desarrollo que quedó abierto. Necesita URL estable, supervisión, límites, acceso protegido, observabilidad y recuperación ensayada. El despliegue depende de si publica lectura abierta, lectura restringida o edición autorizada.
Parta del tutorial CSV o el laboratorio y conserve sus respuestas como pruebas. Las mediciones locales muestran comportamiento de un conjunto concreto: no prometen disponibilidad productiva ni dimensionan otra base.
1. Delimite la publicación
Un servicio público debe exponer solo filas y campos aprobados con una cuenta de lectura. Los datos restringidos necesitan autorización sobre la API real; un ingreso en el visor no protege solicitudes directas. Para editar, diseñe validación, concurrencia, auditoría, retiro de permisos y reintentos antes de activar escritura.
Una colección oculta puede seguir siendo accesible por su URL. admin: false se refiere a administración; no vuelve privadas todas las colecciones. La referencia de configuración distingue estos controles y señala que la edición requiere control de acceso externo a la configuración simple de publicación.
| Publicación | Rol de datos | Exposición | Prueba negativa |
|---|---|---|---|
| Lectura pública | Fuente aprobada de solo lectura | HTTPS público | Sin campos internos ni escritura |
| Lectura por convenio | Vista restringida | API autenticada | Otro aliado no accede a sus registros |
| Edición interna | Privilegios limitados | Aplicación autorizada | Edición inválida/repetida no evade reglas |
| Administración | Configuración | Ruta privada | El lector no cambia colecciones |
2. Use servidor y supervisión adecuados
La guía de ejecución desaconseja pygeoapi serve en producción. En Unix con entrada Flask puede usar Gunicorn, una opción documentada. También puede desplegar contenedores; elija un modelo que el equipo pueda actualizar y restaurar.
El comando ilustra un proceso interno pequeño, después de instalar dependencias fijadas. No es una recomendación universal de capacidad:
export PYGEOAPI_CONFIG='/srv/pygeoapi/config.yml'
export PYGEOAPI_OPENAPI='/srv/pygeoapi/openapi.yml'
gunicorn pygeoapi.flask_app:APP \
--bind 127.0.0.1:5000 \
--workers 2 \
--timeout 30
Un gestor de servicios debe ejecutarlo sin root, establecer directorio y variables, reiniciar fallos y recoger logs depurados. Si el proxy vive en otro contenedor o equipo, utilice la interfaz privada prevista y restrinja red: 127.0.0.1 solo funciona dentro de su propio host o espacio de red.
Registre versiones de Python, servidor y dependencias, y reconstruya desde esa definición. Mantenga OpenAPI generado junto con la configuración. Evite recarga de desarrollo y permisos de escritura sobre archivos ajenos al servicio.
3. Compruebe HTTPS e identidad de extremo a extremo
Termine TLS en un borde controlado y anuncie URL HTTPS externa en server.url. Si publica bajo /oapi, compruebe que colecciones, siguiente página, archivos y OpenAPI mantienen el prefijo. Pruebe desde fuera: una llamada local puede ocultar enlaces privados inaccesibles.
Confíe en cabeceras reenviadas solo desde el proxy conocido. Retire identidad aportada por el cliente antes de añadir la autorizada. Proteja el puerto interno para que no evadan autenticación y límites del borde. Pruebe vencimiento de sesión y revocación por la ruta real.
CORS controla navegadores, no permisos. Configure orígenes según la publicación y pruebe solicitudes reales. Un token válido todavía necesita autorización sobre las filas solicitadas: estar autenticado no da acceso a toda colección.
4. Limite resultados y trabajo costoso
Elija límites según tareas y mediciones. Este fragmento de servidor hace explícito el error cuando un consumidor solicita una página excesiva:
server:
limits:
default_items: 25
max_items: 250
on_exceed: error
El fragmento modifica una configuración completa existente; no define solo un servicio. Los valores son ilustrativos. Doscientos cincuenta polígonos complejos pueden pesar mucho más que igual cantidad de puntos. Mida bytes, serialización y consulta de origen.
Añada límites de frecuencia/concurrencia en el borde, tiempos del proveedor y de SQL. Una página pequeña puede requerir contar millones de filas. Cuando sea legítimo descargar todo, ofrezca un producto masivo separado en vez de obligar miles de solicitudes interactivas.
En PostgreSQL estime conexiones máximas de todos los procesos y proveedores. Aumente workers solo cuando CPU, entrada/salida y base lo justifiquen: puede agotar conexiones antes de mejorar latencia.
5. Trate esquema e identificadores como API pública
Añadir una propiedad opcional difiere de renombrar un ID o cambiar interpretación temporal. Mantenga revisión y avise a consumidores antes de retirar campos o URLs. Prepare casos con nulos, tildes, fechas, vacío y geometría cerca del límite de extensión.
Por despliegue compruebe descubrimiento, OpenAPI, objeto conocido, inexistente, filtro de atributo, bbox, paginación y límite excesivo. Compare valores e IDs, no solo estado. Si el dato cambia durante extracción, documente si se entrega una vista viva o instantánea estable.
6. Observe disponibilidad y vigencia
Mida éxito y duración por ruta, tamaño, fallos de fuente, memoria y saturación de conexiones. Una sonda debe comprobar contenido, no solo HTTP 200. Separe vigencia según frecuencia de actualización: una API disponible puede entregar datos del mes anterior.
| Señal | Investigar | Acción útil |
|---|---|---|
| Objeto funciona, filtro grande falla | Plan SQL y límites | Acotar/indexar consultas |
| Enlaces internos o HTTP | URL pública y proxy | Corregir base y repetir paginación |
| Memoria alta | Geometría y serialización | Reducir página y ofrecer descarga |
| Conexiones agotadas | Multiplicación de pools | Acotar conexiones y tiempos |
| 200 con datos antiguos | Ingesta | Alertar sobre vigencia |
| Campos privados visibles | Vista y propiedades | Restringir fuente y revisar caché |
No registre tokens, atributos privados ni filtros confidenciales completos. Correlacione fallos con identificadores de solicitud y categorías operativas seguras.
7. Ensaye reemplazo y reversión
Respalde datos, metadatos, configuración, definición de entorno y mecanismo de acceso a secretos. Restaure aisladamente y ejecute pruebas. Una copia YAML no respalda PostgreSQL; una copia de PostgreSQL no recupera rutas e identidad.
Publique una versión candidata al lado de la vigente cuando sea posible. Valide consumidores y luego cambie tráfico. El regreso debe considerar cambios de esquema y escrituras: el código anterior no los revierte automáticamente. Compruebe permisos también después de restaurar.
8. Entregue responsabilidades concretas
Identifique quién actualiza datos, aplica parches, renueva certificados, atiende incidentes y autoriza cambios de esquema. Defina urgencias y documente arranque, parada, comprobación y restauración sin depender del historial de una sola persona.
Incluya ese trabajo en el modelo de costos. pygeoapi reduce acoplamiento a interfaces propietarias, pero no elimina operación. Si no dispone de capacidad interna, compare proveedores administrados con el mismo alcance y tiempos de respuesta.