Mealie sur GKE Autopilot
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 GKE Autopilot en s'appuyant sur le socle App_GKE, qui provisionne et gère l'infrastructure Google Cloud et Kubernetes 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 GKE — Workload Identity, entrée, autoscaling, 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_GKE plutôt que de les répéter ici.
1. Vue d'ensemble
Mealie s'exécute sous forme d'une unique charge de travail web FastAPI/Vue. Le déploiement assemble un ensemble restreint et ciblé de services Google Cloud :
| Fonctionnalité | Service Google Cloud | Remarques |
|---|---|---|
| Calcul | GKE Autopilot | Pod FastAPI, 1 vCPU / 512 MiB par défaut |
| Base de données | Cloud SQL for PostgreSQL 15 | Mealie lit des variables d'environnement POSTGRES_* distinctes, et non un DSN construit |
| Stockage d'objets | Cloud Storage | Un bucket data est créé pour les images des recettes et monté automatiquement sur /app/data |
| Cache et file d'attente | aucun | Mealie ne dépend ni de Redis ni d'une file d'attente |
| Secrets | Secret Manager | Mot de passe de la base de données uniquement — Mealie n'a aucun identifiant administrateur configurable par variable d'environnement |
| Entrée | Cloud Load Balancing | LoadBalancer externe, domaine personnalisé + certificat géré en option |
Valeurs par défaut judicieuses à connaître d'emblée :
- PostgreSQL est le moteur standardisé.
Mealie_Commonfixedatabase_type = "POSTGRES_15"et définit explicitementDB_ENGINE=postgres. - Aucun build de conteneur personnalisé. L'image officielle préconstruite
(
ghcr.io/mealie-recipes/mealie) est utilisée directement. - Un compte administrateur par défaut, et non une première inscription — et il
n'est PAS configurable. Depuis la v3.x, l'identifiant initial de Mealie ne
peut plus être défini via des variables d'environnement (voir le
guide Common). 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 effectuez la réinitialisation du mot de passe imposée. workload_type = "Deployment", et nonStatefulSet. Mealie ne conserve aucun état local au-delà de ce qui se trouve déjà dans Cloud SQL — aucun PVC ni montage NFS n'est requis.- Les images des recettes sont persistées par défaut.
Mealie_Commondéclare une entréegcs_volumesqui monte le bucket GCSdatasur/app/data, afin que les images de recettes téléversées survivent au redémarrage d'un pod.
2. Services Google Cloud et comment les explorer
Toutes les commandes supposent que vous avez exécuté
gcloud container clusters get-credentials <cluster> --region <region> --project <project>
et que PROJECT, REGION et NAMESPACE sont définis.
A. GKE Autopilot — la charge de travail Mealie
- CLI :
kubectl get pods,svc -n "$NAMESPACE"
kubectl logs -n "$NAMESPACE" deploy/<service-name> --tail=100
B. Cloud SQL for PostgreSQL 15
Les pods joignent la base de données de manière privée via le sidecar
cloud-sql-proxy sur 127.0.0.1.
- CLI :
gcloud sql instances list --project "$PROJECT"
gcloud sql connect <instance-name> --user=<db-user> --database=<db-name> --project "$PROJECT"
C. Cloud Storage
- 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 :
kubectl get svc -n "$NAMESPACE" -o wide
F. Cloud Logging et Monitoring
- CLI :
kubectl logs -n "$NAMESPACE" deploy/<service-name> --tail=100 -f
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, 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 de pod.
- Identifiant administrateur par défaut fixe — non configurable. Mealie crée
changeme@example.com/MyPasswordlors 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. - Inspecter l'exécution des jobs :
kubectl get jobs -n "$NAMESPACE"
kubectl logs -n "$NAMESPACE" job/<job-name>
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_GKE avec leur comportement standard.
Groupe 3 — Identité de l'application
| Variable | Valeur par défaut | Description |
|---|---|---|
application_name | mealie | Nom de base des ressources. |
application_version | latest | Mealie publie un véritable tag latest. |
Groupe 4 — Exécution et mise à l'échelle
| Variable | Valeur par défaut | Description |
|---|---|---|
container_image_source | prebuilt | Aucun build personnalisé nécessaire. |
container_port | 9000 | Port natif par défaut de Mealie. |
min_instance_count / max_instance_count | 0 / 1 | Bornes de mise à l'échelle du HPA. |
Groupe 11 — Stockage et système de fichiers
| Variable | Valeur par défaut | Description |
|---|---|---|
storage_buckets | un bucket data | Créé et monté automatiquement sur /app/data. |
stateful_pvc_enabled | null (auto, désactivé) | Non utilisé — Mealie est sans état au niveau du pod. |
Groupe 12 (16) — Backend de base de données
| Variable | Valeur par défaut | Description |
|---|---|---|
database_type | POSTGRES_15 | Fixé par Mealie_Common. |
db_host_env_var_name | POSTGRES_SERVER | Expose la variable DB_HOST de la plateforme sous le nom attendu par Mealie. |
db_user_env_var_name | POSTGRES_USER | Alias de DB_USER. |
db_password_env_var_name | POSTGRES_PASSWORD | Alias de DB_PASSWORD. |
db_name_env_var_name | POSTGRES_DB | Alias de DB_NAME. |
db_port_env_var_name | POSTGRES_PORT | Alias de DB_PORT. |
Groupe 14 — Observabilité et santé
| Variable | Valeur par défaut | Description |
|---|---|---|
startup_probe_config / health_check_config | HTTP /api/app/about | Les sondes ciblent le véritable point de terminaison d'information de Mealie. |
5. Sorties
| Sortie | Description |
|---|---|
service_name / service_url / service_external_ip | Identité et adresse du Service Kubernetes. |
database_instance_name / database_name / database_user / database_host / database_port | Détails de connexion Cloud SQL. |
storage_buckets | Le bucket data des images des recettes. |
kubernetes_ready | Indique si la charge de travail a atteint l'état Ready. |
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ètre | Valeur judicieuse | Risque | Conséquence en cas d'erreur |
|---|---|---|---|
application_database_name / application_database_user | À définir une fois | Critique | Immuables 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_source | prebuilt (par défaut) | Élevé | "custom" déclenche un Cloud Build inutile sans Dockerfile dans ce module. |
Identifiant administrateur par défaut (changeme@example.com / MyPassword) | Connectez-vous et modifiez-le immédiatement après le premier déploiement | Critique | Il 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 recettes | Laisser vide (utiliser le propre montage /app/data du module) | Moyen | Mealie_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 du pod et ne survivent pas à un redémarrage. |
Variables db_*_env_var_name | Les laisser à leurs valeurs par défaut propres à Mealie | Critique | Les modifier ou les vider casse la connexion Postgres de Mealie — il lit POSTGRES_*, et non DB_*. |
Pour le comportement du socle évoqué tout au long de ce guide — Workload Identity, entrée, autoscaling, CI/CD, Cloud Armor, IAP, Binary Authorization, VPC-SC, sauvegardes et mise en miroir des images — voir App_GKE. La configuration applicative propre à Mealie, partagée avec la variante Cloud Run, est décrite dans Mealie_Common.
Guides associés
- Lab pratique : Mealie sur GKE Autopilot — déployez-le étape par étape, avec les écrans de la console et les commandes à chaque étape.
- Mealie sur Google Cloud Run — la même application sur Cloud Run, lorsque vous avez besoin de l'autre cible de déploiement.
- Mealie Common — Configuration applicative partagée — la configuration partagée par les deux cibles de déploiement.
- Déployé aux côtés de Grocy sur GKE Autopilot, Homebox sur GKE Autopilot, Wallos sur GKE Autopilot et LubeLogger sur GKE Autopilot dans la solution Home & Life Management.
Need RAD to do something it does not do yet? Request it on the roadmap, or vote on what is already there.