Consola y administración¶
Estado verificado al 28 de marzo de 2026. Nota de runtime: FastFN resuelve dependencias y build por función según el runtime: Python usa
requirements.txt, Node usapackage.json, PHP instala desdecomposer.jsoncuando existe, y Rust compila handlers concargo. Enfastfn dev --nativenecesitas runtimes y herramientas del host;fastfn devdepende de un daemon de Docker activo.
Ficha rapida¶
- Complejidad: Intermedia
- Tiempo tipico: 10-15 minutos
- Úsala cuando: necesitas endurecer /console y /_fn
- Resultado: la superficie admin queda expuesta solo como corresponde
Esta guia esta enfocada solo en la superficie administrativa:
/console/_fn/*
Para auth de negocio de funciones (API key, sesion, JWT), usa:
docs/es/tutorial/auth-y-secretos.md
Alcance¶
Esta pagina cubre:
- habilitar/deshabilitar UI/API de consola
- proteccion de escritura
- modo local-only
- token admin para operaciones remotas
- deep links de consola por URL
- dashboard Gateway para rutas mapeadas
Flags¶
FN_UI_ENABLED(default0)FN_CONSOLE_API_ENABLED(default1)FN_CONSOLE_WRITE_ENABLED(default0)FN_CONSOLE_LOCAL_ONLY(default1)FN_ADMIN_TOKEN(opcional)FN_CONSOLE_LOGIN_ENABLED(default0, solo UI)FN_CONSOLE_LOGIN_API(default0, si se habilita: protege API de consola tambien)FN_CONSOLE_LOGIN_USERNAMEFN_CONSOLE_LOGIN_PASSWORD_HASHoFN_CONSOLE_LOGIN_PASSWORD_HASH_FILE(preferido)FN_CONSOLE_LOGIN_PASSWORDoFN_CONSOLE_LOGIN_PASSWORD_FILE(fallback legacy/en texto plano)FN_CONSOLE_SESSION_SECREToFN_CONSOLE_SESSION_SECRET_FILEFN_CONSOLE_SESSION_TTL_S(default43200)FN_CONSOLE_LOGIN_RATE_LIMIT_MAX(default5)FN_CONSOLE_LOGIN_RATE_LIMIT_WINDOW_S(default300)FN_CONSOLE_RATE_LIMIT_MAX(default120)FN_CONSOLE_RATE_LIMIT_WINDOW_S(default60)FN_CONSOLE_WRITE_RATE_LIMIT_MAX(default30)
Baseline recomendado¶
- mantener
FN_UI_ENABLED=0salvo necesidad - mantener
FN_CONSOLE_LOCAL_ONLY=1 - mantener
FN_CONSOLE_WRITE_ENABLED=0por defecto - definir
FN_ADMIN_TOKENpara admin remota controlada - preferir hash de password o secretos
*_FILEantes que vars en texto plano - definir un secreto de sesion explicito; no hay fallback implicito a
FN_ADMIN_TOKEN
Login opcional (UI de consola)¶
Si quieres una pantalla de login para /console:
export FN_CONSOLE_LOGIN_ENABLED=1
export FN_CONSOLE_LOGIN_USERNAME='admin'
export FN_CONSOLE_LOGIN_PASSWORD_HASH='pbkdf2-sha256:<iterations>:<salt_hex>:<digest_hex>'
export FN_CONSOLE_SESSION_SECRET='change-me-too'
Genera un hash PBKDF2 recomendado usando solo la libreria estandar de Python:
python3 - <<'PY'
import hashlib
import secrets
password = "change-me".encode()
iterations = 200000
salt_hex = secrets.token_hex(16)
digest_hex = hashlib.pbkdf2_hmac("sha256", password, bytes.fromhex(salt_hex), iterations).hex()
print(f"pbkdf2-sha256:{iterations}:{salt_hex}:{digest_hex}")
PY
Si usas secretos montados o archivos en contenedor:
export FN_CONSOLE_LOGIN_ENABLED=1
export FN_CONSOLE_LOGIN_USERNAME='admin'
export FN_CONSOLE_LOGIN_PASSWORD_HASH_FILE='/run/secrets/console_password_hash'
export FN_CONSOLE_SESSION_SECRET_FILE='/run/secrets/console_session_secret'
Notas:
pbkdf2-sha256:<iterations>:<salt_hex>:<digest_hex>es el formato recomendado.sha256:<hex>sigue funcionando como formato legacy de compatibilidad para instalaciones existentes.FN_CONSOLE_LOGIN_PASSWORDsigue funcionando, pero queda como fallback de compatibilidad y es menos seguro para produccion.- Las sesiones nuevas quedan atadas al usuario y a las credenciales actuales del login, asi que rotar el password invalida automaticamente las sesiones emitidas despues de este cambio.
Si también quieres que la API de consola (/_fn/*) requiera cookie de login:
La consola tambien tiene rate limiting general:
- los intentos de login usan
FN_CONSOLE_LOGIN_RATE_LIMIT_MAXdentro deFN_CONSOLE_LOGIN_RATE_LIMIT_WINDOW_S - la UI y las lecturas usan
FN_CONSOLE_RATE_LIMIT_MAX - las escrituras y llamadas no-GET de la API usan
FN_CONSOLE_WRITE_RATE_LIMIT_MAX
Ver estado actual de UI/API¶
Usar token admin¶
Cambiar estado en caliente¶
curl -sS 'http://127.0.0.1:8080/_fn/ui-state' \
-X PUT \
-H 'Content-Type: application/json' \
--data '{"ui_enabled":true,"api_enabled":true,"write_enabled":false,"local_only":true}'
Comportamiento de /_fn/ui-state:
GETes solo lectura.PUT|POST|PATCH|DELETEson escritura y requieren permiso de escritura.
Errores administrativos tipicos¶
403 console ui local-only403 console api local-only403 console write disabled404 console ui disabled
Deep links de consola (URLs reales)¶
La consola soporta deep links que sobreviven refresh:

/console/console/explorer/console/explorer/<runtime>/<funcion>/console/explorer/<runtime>/<funcion>@<version>/console/gateway/console/configuration/console/crud/console/wizard
Ejemplo:
/console/explorer/node/hello@v2
Acceso rapido al dashboard Gateway:
/console/gateway
La pestaña Gateway muestra:
- ruta publica mapeada
- funcion destino (
runtime/funcion@version) - metodos permitidos
- conflictos de rutas detectados en discovery
Tour rapido de la UI¶
La consola esta organizada en tabs:
- Explorer: detalle de funcion + form de invocacion (
/_fn/invoke). - Wizard: paso a paso para crear funciones (ideal para principiantes).
- Gateway: dashboard de endpoints mapeados (URL publica -> funcion).
- Configuration: paneles agrupados para:
- limites/metodos/rutas
- config edge proxy (
edge.*) para respuestas{ "proxy": { ... } } - schedule (cron por intervalo)
- editor de env (secretos ocultos)
- editor de codigo
- CRUD: crear/borrar funciones + toggles de acceso a consola.
Notas de schedule:
- El schedule se configura por funcion en
fn.config.jsonbajoschedule. GET /_fn/schedulesmuestra estado (next,last, ultimo status/error).
Checklist de hardening¶
- mantener consola/API en red privada o VPN
- no exponer
/_fn/*a internet publica - exigir token admin para operaciones de escritura
- habilitar escritura solo en ventanas de mantenimiento
- preferir
*_FILEo password hasheado antes que secretos en texto plano - ajustar el TTL de sesion segun tu riesgo operativo
Objetivo¶
Alcance claro, resultado esperado y público al que aplica esta guía.
Prerrequisitos¶
- CLI de FastFN disponible
- Dependencias por modo verificadas (Docker para
fastfn dev, OpenResty+runtimes parafastfn dev --native)
Checklist de Validación¶
- Los comandos de ejemplo devuelven estados esperados
- Las rutas aparecen en OpenAPI cuando aplica
- Las referencias del final son navegables
Solución de Problemas¶
- Si un runtime cae, valida dependencias de host y endpoint de health
- Si faltan rutas, vuelve a ejecutar discovery y revisa layout de carpetas
Ver también¶
- Especificación de Funciones
- Referencia API HTTP
- Depuracion y solucion de problemas
- Variables de entorno
- Checklist Ejecutar y Probar