Arquitectura de mounts Docker, tabla de databases, permisos SQLite
(nunca chown, siempre chmod), flujo para app nueva paso a paso,
y referencia a los 3 pipelines relacionados.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Setup y dashboards automaticos de Metabase para visualizar metricas del fn-registry y operations.db de cada app.
metabase
dashboard
analytics
visualization
operations
metabase_auth_py_infra
metabase_create_card_py_infra
metabase_create_dashboard_py_infra
metabase_update_dashboard_py_infra
metabase_list_databases_py_infra
metabase_add_database_py_infra
metabase_list_dashboards_py_infra
metabase_delete_dashboard_py_infra
metabase_create_user_py_infra
httpx
main.py
apps/metabase_registry
Arquitectura
Metabase corre en Docker (fn_registry-metabase) con Postgres como backend interno.
Las bases de datos SQLite del proyecto se montan como bind mounts RW en /data/:
Database
Mount en container
Contenido
registry.db
/data/registry/registry.db
functions, types, proposals, apps
ops-docker-tui
/data/ops-docker-tui/operations.db
entities, relations, executions
ops-metabase-registry
/data/ops-metabase-registry/operations.db
entities, relations, executions
ops-pipeline-launcher
/data/ops-pipeline-launcher/operations.db
entities, relations, executions
Dashboards
Dashboard
Contenido
fn-registry Overview
KPIs, distribucion y analisis del registry
fn-registry Apps
Apps por lenguaje, dominio, dependencias
ops: <app-name>
Dashboard operativo por app (entities, relations, executions, assertions)
Permisos SQLite en Docker
Metabase corre Java como UID 2000 (usuario metabase). SQLite necesita crear journal/WAL
files en el mismo directorio que la BD. Reglas:
NUNCA hacer chown dentro del container: se propaga al host via bind mount y rompe permisos locales.
Usar chmod: chmod 777 en directorios, chmod 666 en archivos .db.
Pipeline automatico: ./fn run metabase_fix_permissions arregla todos los permisos.
Ejecutar despues de: recrear container, añadir nueva database, o ver error SQLITE_READONLY_DIRECTORY.