Cómo alojar Metabase por tu cuenta en 2026: base de datos de aplicación, TLS y backups
Guía práctica para alojar Metabase por tu cuenta, con Docker, puertos, datos persistentes, TLS, seguridad, backups y los fallos que impiden usarlo en producción. Incluye comprobaciones.
Si ya has intentado alojar Metabase por tu cuenta, probablemente te resulte familiar esta situación frustrante: aparece la UI, pero falta la base de datos de la aplicación aunque las bases de datos de origen de los dashboards sigan ahí. Recrear el contenedor rara vez resuelve un desacuerdo entre las URL, el estado y las dependencias.
Este recorrido utiliza un único criterio concreto para considerar el despliegue completo: conectar una base de datos de ejemplo de solo lectura, guardar una pregunta, crear un dashboard y enviar una suscripción a través del canal de correo configurado. Cada decisión de configuración se evalúa según ese criterio, no según un indicador verde del contenedor.
Credenciales, roles y superficies expuestas
Analiza las amenazas de las acciones que realiza Metabase, no solo de su formulario de inicio de sesión. En este caso, el error de mayor riesgo es usar la base de datos de aplicación H2 integrada como única copia de producción. Implementa este límite: asigna a Metabase roles de base de datos de solo lectura siempre que sea posible y separa los permisos de las colecciones de las credenciales de la base de datos.
Genera MB_ENCRYPTION_SECRET_KEY una sola vez, mantenla fuera de Git y consérvala junto con el manifiesto de recuperación, porque cambiarla puede invalidar el estado de aplicación cifrado o firmado. No resuelvas un error de permisos ejecutando el contenedor como root o montando el host de forma amplia. Los límites de recursos también forman parte del diseño de seguridad cuando los usuarios pueden provocar consumo de heap de la JVM, consultas simultáneas, caching de resultados y carga sobre cada fuente de datos de analytics.
Separa Metabase de sus dependencias
La topología mínima responsable de Metabase contiene un único listener privado en el puerto 3000, una ruta de ingress y un límite de estado documentado. El contrato de red de Metabase exige una base de datos de aplicación dedicada en Postgres, separada de las fuentes de datos de analytics. Mantén los endpoints privados en DNS interno, permite únicamente las llamadas salientes necesarias y asigna a Metabase una credencial de servicio con permisos acotados.
Valida la topología pidiendo a un cliente limpio que conecte una base de datos de ejemplo de solo lectura, guarde una pregunta, cree un dashboard y envíe una suscripción a través del canal de correo configurado. Mientras se ejecuta, observa el heap de la JVM, las consultas simultáneas, el caching de resultados y la carga transferida a cada fuente de datos de analytics. El resultado te indicará si la siguiente mejora corresponde a la memoria, el almacenamiento, la red o un worker separado, en lugar de fomentar un dimensionamiento arbitrario del contenedor.
Una base de Docker para Metabase
El siguiente comando hace visible el límite del contenedor sin pretender aprovisionar todos los servicios externos.
docker run -d \
--name metabase \
--restart unless-stopped \
-p 127.0.0.1:3000:3000 \
-v metabase-data:/metabase-data \
-e MB_ENCRYPTION_SECRET_KEY=replace-with-a-long-random-value \
-e MB_DB_TYPE=h2 \
-e MB_DB_FILE=/metabase-data/metabase.db \
metabase/metabase:latest
Antes de abrir el ingress, inspecciona el entorno resuelto, los mounts y el listener. Añade la configuración de conexión revisada para una base de datos de aplicación dedicada en Postgres, separada de las fuentes de datos de analytics; usa nombres privados para los servicios privados. Un lanzamiento correcto termina cuando puedes conectar una base de datos de ejemplo de solo lectura, guardar una pregunta, crear un dashboard y enviar una suscripción a través del canal de correo configurado, no cuando docker ps imprime Up.
Demuestra el funcionamiento completo del despliegue de Metabase
Un gate de producción para Metabase debería poder ejecutarlo alguien que no haya creado el despliegue. Entrégale la versión fijada, una cuenta de prueba sin datos sensibles y esta tarea: conectar una base de datos de ejemplo de solo lectura, guardar una pregunta, crear un dashboard y enviar una suscripción a través del canal de correo configurado. Si las instrucciones requieren acceso no documentado por shell, el servicio aún no está listo desde el punto de vista operativo.
Repite el gate después de reemplazar únicamente el contenedor. Después, restaura la base de datos de aplicación de Metabase —no solo las fuentes de datos consultadas— en una infraestructura vacía y demuestra que los usuarios, las colecciones, las preguntas, los filtros de los dashboards y las suscripciones reaparecen y se ejecutan con los metadatos de conexión restaurados. Mide el heap de la JVM, las consultas simultáneas, el caching de resultados y la carga transferida a cada fuente de datos de analytics durante ambas ejecuciones correctas; las diferencias inesperadas suelen revelar la falta de una caché, un índice, un worker o un mount de datos.
Añade un ejercicio de fallo: deniega temporalmente al usuario de prueba el acceso a una base de datos de aplicación dedicada en Postgres, separada de las fuentes de datos de analytics. Metabase debería emitir un error útil, conservar el estado existente y recuperarse cuando vuelva a cumplirse la condición válida. Guarda las marcas de tiempo y las líneas de log relevantes, con los secretos ocultos. Estas evidencias se convierten en la referencia para el siguiente cambio de imagen o configuración.
Mantén claras las URL internas y externas
El navegador, el cliente de API y Metabase deben coincidir en un único origin. Para conseguirlo, establece MB_SITE_URL en el origin público HTTPS. Conserva el host y el protocolo originales, y mantén el puerto 3000 inaccesible como dirección pública alternativa.
La guía de troubleshooting de sitios caídos ayuda a distinguir entre una ruta inalcanzable y una aplicación que responde. Esa diferencia es importante aquí: falta la base de datos de la aplicación aunque las bases de datos de origen de los dashboards sigan ahí. Solo lo primero se corrige con cambios en el ingress; lo segundo requiere inspeccionar los logs, el estado o la carga de trabajo de Metabase.
Opera Metabase en torno a su cuello de botella real
En Metabase, monitoriza una transacción en lugar de un proceso: conectar una base de datos de ejemplo de solo lectura, guardar una pregunta, crear un dashboard y enviar una suscripción a través del canal de correo configurado. Combina su latencia y tasa de errores con el heap de la JVM, las consultas simultáneas, el caching de resultados y la carga transferida a cada fuente de datos de analytics para que una alerta identifique el componente limitado.
El ensayo de actualización debe cubrir que la base de datos de aplicación de Metabase y las versiones de los plugins deben migrarse juntas; las bases de datos empresariales consultadas no sustituyen ese estado. Restaura, migra y ejecuta la transacción antes de reemplazar el entorno de producción. Si falta la base de datos de aplicación aunque las bases de datos de origen de los dashboards sigan ahí, no borres datos para que el arranque aparezca en verde; compara la versión, las variables, los mounts y la accesibilidad de las dependencias, en ese orden.
Los volúmenes son solo la primera capa de recuperación
Protege el estado de Metabase antes de optimizar su contenedor. El conjunto necesario es la base de datos de aplicación de Metabase, no solo las fuentes de datos consultadas. Monta /metabase-data antes del bootstrap, escribe datos de ejemplo inocuos y reemplaza el contenedor para demostrar que esa ruta es realmente persistente. Si varios almacenes deben mantenerse coherentes, documenta el orden en el que se pausan las escrituras y se realizan los backups.
Conserva copias fuera del servidor de despliegue y cifra el material que contenga credenciales o contenido privado. La recuperación es correcta cuando los usuarios, las colecciones, las preguntas, los filtros de los dashboards y las suscripciones reaparecen y se ejecutan con los metadatos de conexión restaurados. La diferencia entre un mount persistente y una copia independiente se explica en almacenamiento persistente y snapshots.
Despliega Metabase en Dockup sin perder sus límites
Una plantilla de Dockup debería definir la imagen, el puerto 3000, los mounts, los tiempos de health check, el dominio, TLS y la entrega de secretos. Dockup debería mantener separadas, mediante la red interna, las partes privadas de una base de datos de aplicación dedicada en Postgres y las fuentes de datos de analytics, sin exponer ningún puerto público adicional. El mismo despliegue puede dirigirse a servidores de Dockup o a capacidad conectada por el cliente.
Cuando la ruta esté activa, aplica la configuración pública e intenta conectar una base de datos de ejemplo de solo lectura, guardar una pregunta, crear un dashboard y enviar una suscripción a través del canal de correo configurado. Haz backup de la base de datos de aplicación de Metabase, no solo de las fuentes de datos consultadas, y mantén el ejercicio de restauración en el plan operativo; son responsabilidades de Metabase que seguirán siendo visibles después del aprovisionamiento de la infraestructura.
Preguntas frecuentes
¿Qué necesita Metabase para un despliegue de producción?
Enruta el contenedor de Metabase en el puerto 3000 a través de un único origin HTTPS. El requisito de red de soporte es una base de datos de aplicación dedicada en Postgres, separada de las fuentes de datos de analytics. No consideres que Metabase está listo hasta que puedas conectar una base de datos de ejemplo de solo lectura, guardar una pregunta, crear un dashboard y enviar una suscripción a través del canal de correo configurado.
¿Qué datos de Metabase deben incluirse en un backup?
Haz persistir /metabase-data e incluye la base de datos de aplicación de Metabase, no solo las fuentes de datos consultadas, en el mismo manifiesto de recuperación. Una restauración limpia de Metabase solo es correcta cuando los usuarios, las colecciones, las preguntas, los filtros de los dashboards y las suscripciones reaparecen y se ejecutan con los metadatos de conexión restaurados.
¿Metabase necesita HTTPS detrás de un reverse proxy?
Usa HTTPS para el origin público de Metabase y mantén el puerto 3000 en la ruta interna. Aplica correctamente la configuración de Metabase: establece MB_SITE_URL en el origin público HTTPS. En Metabase, HTTPS protege las credenciales o el contenido de los usuarios durante el tránsito y mantiene coherente el comportamiento del cliente sensible al origin.
¿Cómo se debe probar una actualización de Metabase?
Restaura el estado actual de Metabase en un despliegue aislado, aplica la versión candidata y repite su transacción de aceptación. Presta especial atención, porque la base de datos de aplicación de Metabase y las versiones de los plugins deben migrarse juntas; las bases de datos empresariales consultadas no sustituyen ese estado. Conserva la imagen anterior de Metabase hasta comprender los límites de migración de datos y rollback.
