Aller au contenu principal

Mealie sur Google Cloud Run

Mealie sur Google Cloud Run

Mealie est un gestionnaire de recettes et planificateur de repas open source et auto-hébergé, doté d'un backend FastAPI et d'un frontend Vue, qui propose l'import automatique de recettes par URL en plus d'un éditeur manuel dans l'interface. Ce module déploie Mealie sur Cloud Run v2 en s'appuyant sur le socle App_CloudRun, qui provisionne et gère l'infrastructure Google Cloud partagée.

Ce guide se concentre sur les services cloud utilisés par Mealie et sur la manière de les explorer et de les exploiter depuis la console Google Cloud et la ligne de commande. Pour les mécanismes communs à toutes les applications Cloud Run — identité du service, entrée et équilibrage de charge, mise à l'échelle et concurrence, CI/CD, Cloud Armor, IAP, Binary Authorization, VPC Service Controls, sauvegardes et cycle de vie du déploiement — reportez-vous au guide du socle App_CloudRun plutôt que de les répéter ici.


1. Vue d'ensemble​

Mealie s'exécute sous forme d'un unique conteneur FastAPI/Vue sur Cloud Run v2. Le déploiement assemble un ensemble restreint et ciblé de services Google Cloud :

FonctionnalitéService Google CloudRemarques
CalculCloud Run v2Service FastAPI, 1 vCPU / 512 MiB par défaut, mise à l'échelle à zéro
Base de donnéesCloud SQL for PostgreSQL 15Mealie lit des variables d'environnement POSTGRES_* distinctes, et non un DSN construit
Stockage d'objetsCloud StorageUn bucket data est créé pour les images des recettes et monté automatiquement sur /app/data
Cache et file d'attenteaucunMealie ne dépend ni de Redis ni d'une file d'attente
SecretsSecret ManagerMot de passe de la base de données uniquement — Mealie n'a aucun identifiant administrateur configurable par variable d'environnement
EntréeURL Cloud RunURL run.app par défaut ; équilibreur de charge HTTPS externe + domaine personnalisé en option

Valeurs par défaut judicieuses à connaître d'emblée :

  • PostgreSQL 15 est le moteur standardisé. Mealie_Common fixe database_type = "POSTGRES_15" et définit explicitement DB_ENGINE=postgres — sinon, Mealie utilise par défaut SQLite embarqué.
  • Aucun build de conteneur personnalisé. Les variables d'environnement Postgres distinctes de Mealie ne nécessitent aucune construction de DSN ; l'image officielle préconstruite (ghcr.io/mealie-recipes/mealie) est donc utilisée directement.
  • Un compte administrateur par défaut, et non une première inscription — et il n'est PAS configurable. Contrairement à certaines applications de ce catalogue, Mealie ne permet pas au premier visiteur de s'inscrire lui-même en tant qu'administrateur, et contrairement aux versions antérieures de Mealie, son identifiant initial ne peut plus être défini via des variables d'environnement (les paramètres sous-jacents sont des champs privés, non liables à l'environnement, depuis la v3.x — voir le guide Common pour le détail au niveau du code source). Chaque déploiement démarre avec le même compte bien connu : changeme@example.com / MyPassword. Connectez-vous immédiatement après le premier déploiement et modifiez à la fois le mot de passe et, idéalement, l'adresse e-mail de l'administrateur — Mealie impose une réinitialisation du mot de passe à la première connexion, ce qui constitue ici la véritable barrière de sécurité, et non le secret de l'identifiant initial.
  • Les images des recettes sont persistées par défaut. Mealie_Common déclare une entrée gcs_volumes qui monte le bucket GCS data sur le chemin /app/data de Mealie, afin que les images de recettes téléversées survivent au redémarrage d'une révision. Les données textuelles des recettes ne sont pas concernées dans un cas comme dans l'autre (elles sont stockées dans PostgreSQL).
  • Facturation à la requête par défaut. cpu_always_allocated = false, min_instance_count = 0 — l'extraction des recettes importées par URL dans Mealie s'exécute de manière synchrone dans la requête qui la déclenche, et non en tant que job d'arrière-plan.

2. Services Google Cloud et comment les explorer​

Toutes les commandes supposent que PROJECT et REGION sont définis. Les noms des services et des ressources figurent dans les sorties du déploiement.

A. Cloud Run — le service Mealie​

  • Console : Cloud Run → sélectionnez le service pour consulter les révisions, le trafic, les journaux et les métriques.
  • CLI :
    gcloud run services list --project "$PROJECT" --region "$REGION"
    gcloud run services describe <service-name> --project "$PROJECT" --region "$REGION"

Voir App_CloudRun pour la mise à l'échelle, la concurrence et la répartition du trafic.

B. Cloud SQL for PostgreSQL 15​

Mealie stocke toutes les recettes, tous les plans de repas et toutes les données utilisateur dans une instance Cloud SQL for PostgreSQL 15 gérée, à laquelle il se connecte de manière privée via le Cloud SQL Auth Proxy par un socket Unix. Au premier déploiement, un job d'initialisation crée la base de données et l'utilisateur de l'application.

  • Console : SQL → sélectionnez l'instance pour consulter les connexions, les sauvegardes, les flags et les métriques.
  • CLI :
    gcloud sql instances list --project "$PROJECT"
    gcloud sql connect <instance-name> --user=<db-user> --database=<db-name> --project "$PROJECT"

C. Cloud Storage​

Un bucket data est provisionné automatiquement pour les images des recettes et est monté par défaut dans le conteneur sur /app/data.

  • CLI :
    gcloud storage buckets list --project "$PROJECT" --filter="name~mealie"

D. Secret Manager​

  • CLI :
    gcloud secrets list --project "$PROJECT" --filter="name~mealie"
    gcloud secrets versions access latest --secret=<secret-name> --project "$PROJECT"

E. Réseau et entrée​

  • CLI :
    gcloud run services describe <service-name> --region "$REGION" --format='value(status.url)'

F. Cloud Logging et Monitoring​

  • CLI :
    gcloud run services logs read <service-name> --project "$PROJECT" --region "$REGION" --limit 50

3. Comportement de l'application Mealie​

  • Configuration de la base de données au premier déploiement. Un job d'initialisation exécute create-db-and-user.sh avec postgres:15-alpine, ce qui crée de manière idempotente le rôle et la base de données de l'application.
  • Migrations du schéma au démarrage. Mealie applique automatiquement ses propres migrations internes à chaque démarrage.
  • Identifiant administrateur par défaut fixe — non configurable. Mealie crée changeme@example.com / MyPassword lors de la première initialisation de la base de données. Il s'agit d'une valeur par défaut codée en dur en amont (aucune variable d'environnement ne la remplace depuis la v3.x), et non d'un secret généré — une réinitialisation du mot de passe est imposée à la première connexion, et les opérateurs doivent l'effectuer immédiatement après le déploiement.
  • Chemin de santé. Les sondes de démarrage et d'activité ciblent /api/app/about — le véritable point de terminaison d'information non authentifié de Mealie.
  • Inspecter l'exécution des jobs :
    gcloud run jobs executions list --job <job-name> --project "$PROJECT" --region "$REGION"

4. Variables de configuration​

Les variables sont regroupées exactement comme elles apparaissent sur la plateforme de déploiement. Seuls les paramètres propres à Mealie ou notables pour lui sont listés ; toutes les autres entrées sont héritées d'App_CloudRun avec leur comportement standard.

Groupe 3 — Identité de l'application​

VariableValeur par défautDescription
application_namemealieNom de base des ressources.
application_versionlatestMealie publie un véritable tag latest — aucune réassociation nécessaire.

Groupe 4 — Exécution et mise à l'échelle​

VariableValeur par défautDescription
container_image_sourceprebuiltAucun build personnalisé nécessaire — les variables d'environnement Postgres distinctes ne nécessitent aucune construction de DSN.
container_port9000Port natif par défaut de Mealie.
cpu_always_allocatedfalseFacturation à la requête.
min_instance_count / max_instance_count0 / 1Mise à l'échelle à zéro par défaut.

Groupe 11 — Stockage et système de fichiers​

VariableValeur par défautDescription
storage_bucketsun bucket dataCréé et monté automatiquement sur /app/data pour les images des recettes.
gcs_volumes[]Une liste vide signifie « utiliser le propre montage /app/data de Mealie_Common » ; une liste non vide le remplace.

Groupe 12 — Backend de base de données​

VariableValeur par défautDescription
database_typePOSTGRES_15Fixé par Mealie_Common.
db_host_env_var_namePOSTGRES_SERVERExpose la variable DB_HOST de la plateforme sous le nom attendu par Mealie.
db_user_env_var_namePOSTGRES_USERAlias de DB_USER.
db_password_env_var_namePOSTGRES_PASSWORDAlias de DB_PASSWORD.
db_name_env_var_namePOSTGRES_DBAlias de DB_NAME.
db_port_env_var_namePOSTGRES_PORTAlias de DB_PORT.

Groupe 14 — Observabilité et santé​

VariableValeur par défautDescription
startup_probe / liveness_probeHTTP /api/app/about, délai de 30sLes sondes ciblent le véritable point de terminaison d'information de Mealie.

5. Sorties​

SortieDescription
service_name / service_urlNom du service Cloud Run et URL run.app par défaut.
database_instance_name / database_name / database_user / database_host / database_portDétails de connexion Cloud SQL.
storage_bucketsLe bucket data des images des recettes.
deployment_id / tenant_id / resource_prefixIdentifiants de nommage.
project_id / project_numberIdentifiants du projet.

6. Pièges de configuration et valeurs par défaut judicieuses​

Risque : Critique (perte de données / panne / sécurité) — Élevé (service dégradé) — Moyen (coût ou dégradation partielle) — Faible (mineur).

ParamètreValeur judicieuseRisqueConséquence en cas d'erreur
application_database_name / application_database_userÀ définir une foisCritiqueImmuables après le premier déploiement ; les renommer recrée la base de données/l'utilisateur et détruit toutes les données.
container_image_sourceprebuilt (par défaut)Élevé"custom" déclenche un Cloud Build inutile sans Dockerfile dans ce module — le build échoue.
Identifiant administrateur par défaut (changeme@example.com / MyPassword)Connectez-vous et modifiez-le immédiatement après le premier déploiementCritiqueIl s'agit d'une valeur par défaut amont fixe et documentée publiquement — et non d'un secret généré — dès que la base de données est initialisée, quiconque connaît l'identifiant par défaut de Mealie peut se connecter tant que vous n'avez pas effectué la réinitialisation du mot de passe imposée à la première connexion.
gcs_volumes pour les images des recettesLaisser vide (utiliser le propre montage /app/data du module)MoyenMealie_Common monte déjà le bucket data sur /app/data. Fournir une liste gcs_volumes non vide remplace entièrement ce montage — si le remplacement ne couvre pas aussi /app/data, les images de recettes téléversées retombent sur le système de fichiers éphémère de Cloud Run et ne survivent pas au redémarrage d'une révision. Le texte des recettes n'est pas concerné.
Variables db_*_env_var_nameLes laisser à leurs valeurs par défaut propres à MealieCritiqueLes modifier ou les vider casse entièrement la connexion Postgres de Mealie — il lit POSTGRES_*, et non DB_*.

Pour le comportement du socle évoqué tout au long de ce guide — identité du service, mise à l'échelle et concurrence, entrée et équilibrage de charge, CI/CD, Cloud Armor, IAP, Binary Authorization, VPC-SC, sauvegardes et mise en miroir des images — voir App_CloudRun. La configuration applicative propre à Mealie, partagée avec la variante GKE, est décrite dans Mealie_Common.

Need RAD to do something it does not do yet? Request it on the roadmap, or vote on what is already there.