Skip to content
GEOSAT
Volver al blog
Open GIS
Open GIS2026-09-23GEOSAT6 min lectura

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

pygeoapiOGC APIOpen GIS

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ónRol de datosExposiciónPrueba negativa
Lectura públicaFuente aprobada de solo lecturaHTTPS públicoSin campos internos ni escritura
Lectura por convenioVista restringidaAPI autenticadaOtro aliado no accede a sus registros
Edición internaPrivilegios limitadosAplicación autorizadaEdición inválida/repetida no evade reglas
AdministraciónConfiguraciónRuta privadaEl 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:

Ejemplo de código
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:

Ejemplo de código
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ñalInvestigarAcción útil
Objeto funciona, filtro grande fallaPlan SQL y límitesAcotar/indexar consultas
Enlaces internos o HTTPURL pública y proxyCorregir base y repetir paginación
Memoria altaGeometría y serializaciónReducir página y ofrecer descarga
Conexiones agotadasMultiplicación de poolsAcotar conexiones y tiempos
200 con datos antiguosIngestaAlertar sobre vigencia
Campos privados visiblesVista y propiedadesRestringir 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.

Artículos relacionados