Índice del diarioDockup / nota de campo
Note / self-host-mealie

Cómo alojar Mealie por tu cuenta en 2026: importación de recetas, usuarios y backups

Guía práctica para alojar Mealie por tu cuenta, con Docker, puertos, datos persistentes, TLS, seguridad, backups y los fallos que impiden usarlo en producción. Paso a paso.

La demostración más sencilla de Mealie solo demuestra que un proceso escucha en el puerto 9000. La producción necesita pruebas más sólidas. Debe superar este escenario incluso después de reemplazar el contenedor: importar una URL de receta, verificar su imagen, añadirla a un plan de comidas y generar una lista de la compra a partir de varias recetas.

Mealie se despliega con un propósito claro: recetas, planes de comidas y listas de la compra. El problema más habitual en su despliegue es que las imágenes de las recetas desaparecen porque /app/data no es persistente, por lo que la gestión de las URL públicas y el estado duradero requieren la misma atención que el arranque de la imagen.

Delimitar la frontera de ejecución de Mealie

La topología mínima responsable de Mealie contiene un listener privado en el puerto 9000, una ruta de ingress y una frontera de estado documentada. El contrato de red de Mealie requiere Postgres para un despliegue de producción multiusuario y SMTP para las invitaciones. Mantén los endpoints privados en el DNS interno, permite únicamente las llamadas salientes necesarias y asigna a Mealie una credencial de servicio con permisos limitados.

Valida la topología pidiendo a un cliente limpio que importe una URL de receta, verifique su imagen, la añada a un plan de comidas y genere una lista de la compra a partir de varias recetas. Mientras se ejecuta, observa las importaciones de recetas, el almacenamiento de imágenes, las consultas a la base de datos, las tareas en segundo plano y los usuarios simultáneos del hogar. El resultado te indica si la siguiente mejora corresponde a la memoria, el almacenamiento, la red o un worker independiente, en lugar de fomentar un dimensionamiento arbitrario del contenedor.

Comprobaciones de capacidad y actualización

Una comprobación de healthcheck en reposo dice muy poco sobre Mealie. Observa las importaciones de recetas, el almacenamiento de imágenes, las consultas a la base de datos, las tareas en segundo plano y los usuarios simultáneos del hogar; después, genera alertas sobre el síntoma que experimentan los usuarios: el fallo de la acción «importar una URL de receta, verificar su imagen, añadirla a un plan de comidas y generar una lista de la compra a partir de varias recetas». Mantén el liveness local y económico; deja que el readiness informe de las migraciones o la inicialización sin provocar un restart storm.

La zona de riesgo de una actualización es que las migraciones de la base de datos y los cambios en el ingredient parser pueden afectar a las recetas almacenadas, así que prueba las importaciones y los registros existentes. Lee las notas de la versión, crea un snapshot del estado, despliega la versión objetivo contra una copia restaurada y repite la acción de aceptación. Si las imágenes de las recetas desaparecen porque /app/data no es persistente, correlaciona la solicitud del cliente con el primer log relevante de la aplicación en lugar de eliminar el estado o añadir redirecciones a ciegas.

La release gate de Mealie

Una release candidate de Mealie consigue tráfico al completar un escenario fijo: importar una URL de receta, verificar su imagen, añadirla a un plan de comidas y generar una lista de la compra a partir de varias recetas. Captura el digest de la imagen, la configuración efectiva no secreta, el origen público y las marcas de tiempo de ese escenario. Los datos de prueba deben ser desechables, pero lo bastante realistas como para recorrer el mismo flujo que usan los usuarios.

Ejecútalo después de reemplazar el runtime y, a continuación, reconstruye el servicio a partir de la base de datos, las imágenes de las recetas, los assets y la configuración de la aplicación. La recuperación se supera cuando vuelven las recetas, las imágenes, los usuarios, los planes de comidas y las listas de la compra, y una receta conocida se muestra correctamente. Compara las mediciones de recursos de las importaciones de recetas, el almacenamiento de imágenes, las consultas a la base de datos, las tareas en segundo plano y los usuarios simultáneos del hogar con la versión anterior, e investiga cualquier desviación significativa antes de promocionar la versión.

Por último, ejecuta este fallo controlado: deniega temporalmente a la identidad de prueba el acceso a Postgres para un despliegue de producción multiusuario y a SMTP para las invitaciones. Verifica que Mealie explica el fallo, no daña el estado existente y se reanuda cuando vuelve a cumplirse la condición válida. Guarda un extracto de log redactado y el tiempo de recuperación. En conjunto, estas comprobaciones cubren el comportamiento, la durabilidad y la operabilidad, no solo el uptime del proceso.

Crear un contenedor de Mealie reemplazable

Mantén la invocación inicial de Mealie lo bastante reproducible como para revisarla en un pull request.

docker run -d \
  --name mealie \
  --restart unless-stopped \
  -p 127.0.0.1:9000:9000 \
  -v mealie-data:/app/data \
  -e BASE_URL=https://app.example.com \
  ghcr.io/mealie-recipes/mealie:latest

No dependas de latest cuando ya existan datos reales. Captura el digest que funciona, el usuario del contenedor y la propiedad del mount. Sigue el log de la aplicación durante una prueba completa —importar una URL de receta, verificar su imagen, añadirla a un plan de comidas y generar una lista de la compra a partir de varias recetas— y anota las migraciones antes de poner la ruta detrás del tráfico de producción.

Encontrar cada byte persistente de Mealie

Haz un inventario de todos los artefactos persistentes: la base de datos, las imágenes de las recetas, los assets y la configuración de la aplicación. Monta /app/data antes del bootstrap, escribe datos de muestra inocuos y reemplaza el contenedor para demostrar que esa ruta es realmente persistente. Incluye la configuración que cambia la forma en que se interpretan los datos almacenados, no solo el directorio más grande.

Define la retención, copia los backups fuera del host y ejecuta una restauración en un entorno limpio. El simulacro de Mealie termina cuando vuelven las recetas, las imágenes, los usuarios, los planes de comidas y las listas de la compra, y una receta conocida se muestra correctamente. Si los snapshots forman parte del plan, utiliza la guía sobre PITR frente a snapshots para documentar qué puede recuperar cada mecanismo.

Enrutar Mealie sin falsear el HTTPS

Establece BASE_URL con el origen HTTPS externo. Envía el hostname elegido al puerto 9000 del contenedor, reenvía el host original y el esquema HTTPS, y evita publicar un segundo origen directo.

Prueba Mealie desde un cliente externo limpio. Separa el fallo del ingress de la frontera conocida de la aplicación —las imágenes de las recetas desaparecen porque /app/data no es persistente—. Un error de certificado, DNS o 502 pertenece al routing; una solicitud que llega a Mealie y falla después pertenece al estado de la aplicación, la capacidad o uno de sus requisitos de soporte. La guía de TLS para dominios personalizados cubre el primer grupo.

Reducir la autoridad de Mealie

Después del primer login, revisa qué puede hacer un visitante anónimo, un usuario normal y un administrador. El fallo de Mealie que debes evitar es dejar abierto el registro o mantener sin cambios la primera contraseña de administrador. La política prevista es sustituir la primera contraseña de administrador, cerrar el registro cuando termine el proceso de alta y proteger los datos privados del hogar.

BASE_URL es configuración, no un secreto; mantén su valor explícito y protege las credenciales independientes que utiliza Mealie. Mantén separadas las cuentas de dependencias y las cuentas humanas, deniega el egress que no se utilice cuando sea viable y limita el trabajo influido por las importaciones de recetas, el almacenamiento de imágenes, las consultas a la base de datos, las tareas en segundo plano y los usuarios simultáneos del hogar.

Un despliegue con Dockup también necesita una prueba de aceptación de Mealie

El routing, los certificados, el reemplazo del servicio y el almacenamiento asociado son objetivos razonables para la automatización. Dockup se encarga de ello para Mealie y puede aprovisionar la base de datos gestionada relacionada o conectarse a servicios del servidor del propio cliente.

Lo que no debe inventar es la política de confianza de Mealie. Después del despliegue, establece BASE_URL con el origen HTTPS externo, aplica esta frontera —sustituir la primera contraseña de administrador, cerrar el registro cuando termine el proceso de alta y proteger los datos privados del hogar— y verifica el resultado de este escenario: importar una URL de receta, verificar su imagen, añadirla a un plan de comidas y generar una lista de la compra a partir de varias recetas. El resultado es una infraestructura de un clic con una prueba de aceptación específica de la aplicación.

Preguntas frecuentes

¿Qué necesita Mealie para un despliegue de producción?

Enruta el contenedor de Mealie en el puerto 9000 a través de un único origen HTTPS. El requisito de red de soporte es Postgres para un despliegue de producción multiusuario y SMTP para las invitaciones. No des Mealie por listo hasta que puedas importar una URL de receta, verificar su imagen, añadirla a un plan de comidas y generar una lista de la compra a partir de varias recetas.

¿Qué datos de Mealie deben incluirse en un backup?

Haz persistente /app/data e incluye la base de datos, las imágenes de las recetas, los assets y la configuración de la aplicación en el mismo manifiesto de recuperación. Una restauración limpia de Mealie solo se supera cuando vuelven las recetas, las imágenes, los usuarios, los planes de comidas y las listas de la compra, y una receta conocida se muestra correctamente.

¿Mealie necesita HTTPS detrás de un reverse proxy?

Usa HTTPS para el origen público de Mealie y mantén el puerto 9000 en la ruta interna. Aplica correctamente la configuración de Mealie: establece BASE_URL con el origen HTTPS externo. En Mealie, HTTPS protege las credenciales o el contenido de los usuarios durante el tránsito y mantiene coherente el comportamiento del cliente sensible al origen.

¿Cómo debe probarse una actualización de Mealie?

Restaura el estado actual de Mealie en un despliegue aislado, aplica la versión candidata y repite su transacción de aceptación. Presta especial atención porque las migraciones de la base de datos y los cambios en el ingredient parser pueden afectar a las recetas almacenadas, así que prueba las importaciones y los registros existentes. Conserva la imagen anterior de Mealie hasta comprender sus límites de migración de datos y rollback.