פורסם

Mealie

מנהל מתכונים ומתכנן ארוחות: מייבאים מתכונים מכל אתר לפי URL, מסדרים אותם בתגיות ובקטגוריות, מתכננים ארוחות בלוח שנה ובונים רשימות קניות משותפות. מתאים למשקי בית ולקבוצות קטנות שרוצים ספריית מתכונים פרטית אחת, עם SQLite כברירת מחדל או PostgreSQL ליותר משתמשים בו-זמנית.

משאבים לפי רמת עומס

מה האפליקציה עצמה צריכה בכל רמה, לצד מה שאנחנו ממליצים לשרת שמריץ רק אותה.

רמהמה זה אומרדרישות האפליקציהמומלץ
קלהערכהמשק בית אחד של עד 5 אנשים, עד 500 מתכונים עם תמונות, תכנון ארוחות שבועי ורשימות קניות, כמה ייבואים מ-URL ביום; SQLite.1 vCPU · 1 GiB RAM · 3.023 GiB דיסק1.32 vCPU · 2.7 GiB RAM · 12.907 GiB דיסק
בינוניהערכהעד 20 משתמשים בכמה משקי בית (הטווח של SQLite בתיעוד), עד 2,000 מתכונים עם תמונות, תכנון ארוחות יומי, רשימות קניות משותפות וייבואים.1 vCPU · 1 GiB RAM · 7.417 GiB דיסק1.32 vCPU · 2.7 GiB RAM · 17.96 GiB דיסק
כבדהערכהעד 50 משתמשים בכמה משקי בית, עד 5,000 מתכונים עם תמונות, ייבואים וגיבויים תכופים במקביל; מומלץ PostgreSQL, ‏worker אחד.2 vCPU · 2 GiB RAM · 16.206 GiB דיסק2.52 vCPU · 3.9 GiB RAM · 28.067 GiB דיסק

מומלץ = דרישות האפליקציה + baseline של המערכת + מרווח ביטחון (headroom), לפי מדיניות ה-sizing ‏2026.10.0. האפשרויות נשארות בברירת המחדל. ״הערכה״ פירושה שהמקורות לא נותנים מספר למקרה הזה, ולכן הוא מחושב מהם בשיטה שמפורטת תחת רכיבים. איך המספרים נבנים

לחישוב ב-Stack Sizer

קבצים מוכנים להפעלה

רמת תמיכה נתמך

תבנית Compose מהמקורות הרשמיים; עוד לא נבדקה בהרצה.

צור docker-compose

רכיבים

מה כל רכיב צריך בכל רמת עומס, לפני baseline ו-headroom.

vCPU / GiB RAM / GiB דיסק
רכיבקלבינוניכבדמקורות
Mealie (web UI and API) (app)1 / 1 / 3.0231 / 1 / 7.4172 / 2 / 16.206[4][7][10][17][20][23][25]
PostgreSQL (database)———
איך ההערכות מחושבות
  • Mealie (web UI and API) · קל: RAM: מגבלת הזיכרון של 1000M ב-compose שבתיעוד, ל-worker יחיד של Uvicorn כברירת מחדל, מעוגלת ל-1 GiB. ‏vCPU: תהליך Python אחד (UVICORN_WORKERS 1). Disk: ‏image של 1.521 GiB ‏(0.398 דחוס ועוד 1.123 פרוס, ה-containerd image store שומר את שניהם) ועוד 500 מתכונים × 1 MiB עם תמונות (הנחה של ANAROQ) × 3 לנתונים החיים ולשני קובצי zip של גיבוי ב-/app/data/backups = ‏1.465, ועוד 0.037 GiB ללוגים מסובבים = ‏3.023.
  • Mealie (web UI and API) · בינוני: RAM ו-vCPU כמו ב-light: עדיין worker אחד של Uvicorn בתוך מגבלת ה-1000M שבתיעוד (מעוגלת ל-1 GiB), שהתיעוד מתאים ל-SQLite עם 1-20 משתמשים. Disk: ‏image של 1.521 GiB ‏(0.398 דחוס ועוד 1.123 פרוס, ה-containerd image store שומר את שניהם) ועוד 2,000 מתכונים × 1 MiB עם תמונות (הנחה של ANAROQ) × 3 לנתונים החיים ולשני קובצי zip של גיבוי ב-/app/data/backups = ‏5.859, ועוד 0.037 GiB ללוגים מסובבים = ‏7.417.
  • Mealie (web UI and API) · כבד: מעבר לטווח של 20 משתמשים ב-SQLite אין בתיעוד מספר; ‏ANAROQ מכפיל את מגבלת ה-1000M ‏(2 GiB) ומקצה 2 vCPU לייבואים מ-URL, לעיבוד תמונות (ffmpeg) ולקובצי zip של גיבוי במקביל לבקשות, עדיין עם worker אחד. Disk: ‏image של 1.521 GiB ‏(0.398 דחוס ועוד 1.123 פרוס, ה-containerd image store שומר את שניהם) ועוד 5,000 מתכונים × 1 MiB עם תמונות (הנחה של ANAROQ) × 3 לנתונים החיים ולשני קובצי zip של גיבוי ב-/app/data/backups = ‏14.648, ועוד 0.037 GiB ללוגים מסובבים = ‏16.206.
  • database · PostgreSQL: מסד הנתונים של Mealie מחזיק את טקסט המתכונים, התכנונים והרשימות (התמונות נשארות ב-/app/data), וה-pool ברירת המחדל של SQLAlchemy פותח לכל היותר 5 ועוד 10 חיבורי overflow, בתוך מעטפת 20 החיבורים של ה-sidecar. מסד metadata מובנה בהגדרות ברירת המחדל של ה-image: שווה ל-preset ה-light של פרופיל PostgreSQL ‏(עד 5 GB נתונים, עד 20 חיבורים בו-זמנית) בכל רמת עומס. שיטת ה-light: ‏shared_buffers ‏25% מה-RAM, תקציב work_mem ו-maintenance_work_mem למקרה הגרוע, 0.5 GiB ל-image ‏+ 5 GiB נתונים + 1 GiB ל-WAL.

אפשרויות שמשנות משאבים

database

מנוע מסד הנתונים. ‏SQLite (ברירת המחדל) נשמר ב-/app/data בתוך ה-container של Mealie ומתאים ל-1-20 משתמשים; ‏PostgreSQL מוסיף container נפרד להרבה משתמשים בו-זמנית ומפעיל חיפוש fuzzy. אל תשימו SQLite על אחסון רשת.

ברירת מחדל: sqlite

פורטים

פורטים ציבוריים נועדו לגישה מחוץ ל-stack, בדרך כלל דרך reverse proxy; פורטים פנימיים נשארים ברשת של ה-stack עצמו.

רכיבפורטחשיפהשימושמקורות
Mealie (web UI and API)9000/tcpציבורי, דרך proxyWeb UI and REST API (HTTP; put behind a TLS reverse proxy)[4][7][15]
PostgreSQL5432/tcpפנימי בלבדPostgreSQL connections from Mealie (database=postgres only)[5]

כל הפורטים בקטלוג, עם התנגשויות בין אפליקציות

משתמש והרשאות (UID/GID)

המשתמש שהתהליך של כל קונטיינר רץ תחתיו, והנתיבים שהוא כותב אליהם. ‏bind mount לאחד הנתיבים האלה חייב להיות ניתן לכתיבה על ידי ה-UID:GID הזה.

רכיבUID:GIDמשתמשמתחיל כ-rootכותב אלמקורות
Mealie (web UI and API)1000:1000abcכן, מכין את התיקיות שלו ואז עובר למשתמש הזה/app/data[3][4][15]
PostgreSQL999:999postgresכן, מכין את התיקיות שלו ואז עובר למשתמש הזה/var/lib/postgresql/var/run/postgresql[26][27][33]
  • Mealie (web UI and API): ה-image יוצר את המשתמש abc ‏(uid 911) ומתחיל כ-root: ‏entry.sh ממפה את abc ל-PUID/PGID ‏(911 כברירת מחדל; 1000:1000 ב-compose שבתיעוד ובתבנית הזו), מעביר את /app לבעלותו ויורד להרשאות עם gosu. לכן bind mount של /app/data לא צריך chown ידני.

צמיחת אחסון

בכמה הנתונים של כל רכיב גדלים בחודש בכל רמת עומס, מעבר לדיסק שבפרופיל. ערך שמסומן ״הנחה״ הוא הנחה מוצהרת של ANAROQ ולא מספר מהמקורות; ההערות מפרטות על מה היא נשענת.

GiB לחודש
רכיבקלבינוניכבדמקורות
Mealie (web UI and API)הנחה0.1220.4881.221[10][17]
PostgreSQLהנחה0.0010.0030.008
על מה מספרי הצמיחה נשענים
  • Mealie (web UI and API): ‏upstream לא מפרסם קצב גידול. ההנחה: ‏500 המתכונים של הרמה (1 MiB כל אחד עם תמונות) נוספים במשך 12 חודשים, ונשמרים שני קובצי zip של גיבוי ב-/app/data/backups ‏(Mealie לא מוחק אותם בעצמו): ‏500 × 1 MiB × 3 / 12 = ‏0.122 GiB.
  • Mealie (web UI and API): ‏upstream לא מפרסם קצב גידול. ההנחה: ‏2,000 המתכונים של הרמה (1 MiB כל אחד עם תמונות) נוספים במשך 12 חודשים, ונשמרים שני קובצי zip של גיבוי ב-/app/data/backups ‏(Mealie לא מוחק אותם בעצמו): ‏2,000 × 1 MiB × 3 / 12 = ‏0.488 GiB.
  • Mealie (web UI and API): ‏upstream לא מפרסם קצב גידול. ההנחה: ‏5,000 המתכונים של הרמה (1 MiB כל אחד עם תמונות) נוספים במשך 12 חודשים, ונשמרים שני קובצי zip של גיבוי ב-/app/data/backups ‏(Mealie לא מוחק אותם בעצמו): ‏5,000 × 1 MiB × 3 / 12 = ‏1.221 GiB.
  • PostgreSQL: רק עם database=postgres. אין מספר מ-upstream; ‏ANAROQ מניח 20 KiB של שורות ואינדקסים למתכון (התמונות הן קבצים ולא שורות), ו-500 המתכונים של הרמה נוספים במשך 12 חודשים: ‏500 / 12 × 20 KiB ≈ ‏0.001 GiB.
  • PostgreSQL: רק עם database=postgres. אין מספר מ-upstream; ‏ANAROQ מניח 20 KiB של שורות ואינדקסים למתכון (התמונות הן קבצים ולא שורות), ו-2,000 המתכונים של הרמה נוספים במשך 12 חודשים: ‏2,000 / 12 × 20 KiB ≈ ‏0.003 GiB.
  • PostgreSQL: רק עם database=postgres. אין מספר מ-upstream; ‏ANAROQ מניח 20 KiB של שורות ואינדקסים למתכון (התמונות הן קבצים ולא שורות), ו-5,000 המתכונים של הרמה נוספים במשך 12 חודשים: ‏5,000 / 12 × 20 KiB ≈ ‏0.008 GiB.

שדרוג וחזרה לאחור

איך עוברים לגרסה חדשה בבטחה, ואיך חוזרים אחורה אם משהו נכשל.

קודם גיבוי

צרו והורידו גיבוי מ-/admin/backups. עם SQLite, עצרו גם את ה-container והעתיקו את ה-volume ‏/app/data (התיעוד מגדיר זאת כגיבוי הטוב ביותר); עם PostgreSQL, קחו גם pg_dump. רשמו את ה-tag הנוכחי של ה-image. [9][10]

שלבי השדרוג

  1. קראו את ה-release notes של כל גרסה שאתם מדלגים עליה כדי לאתר breaking changes או פעולות ידניות, ואז צרו גיבוי ב-/admin/backups והורידו אותו. [9][10]
  2. הגדירו בקובץ ה-Compose את ה-tag המוצמד החדש ghcr.io/mealie-recipes/mealie:vX.Y.Z, ואז הריצו docker compose pull ו-docker compose up -d. ה-volume של הנתונים מתחבר מחדש, ו-migrations של Alembic שממתינים רצים כש-Mealie עולה. [6][9][19]
  3. עם database=postgres, השאירו את גרסת ה-major של PostgreSQL כשאתם משדרגים את Mealie: ‏major חדש דורש dump ושחזור (התיעוד מפנה ל-docker-library/postgres#37). [5]

חזרה לאחור

עצרו את Mealie, החזירו את העותק של /app/data מלפני השדרוג (ועם PostgreSQL שחזרו את ה-pg_dump), ואז פרסו שוב את ה-tag הקודם. אל תריצו Mealie ישן על נתונים שגרסה חדשה יותר העבירה migration; גיבוי מהממשק משוחזר רק לגרסה שיצרה אותו. [10][19]נגזרהתיעוד לא מתאר downgrade. נגזר מה-migrations של Alembic ש-Mealie מריץ בעלייה, ומהאזהרה בתיעוד ששחזור גיבוי מגרסה לא תואמת נכשל בשגיאה.

שינויים שוברים ידועים

  • בגרסה 3.23.0: ייבוא מתכונים עם AI עבר ל-/api/recipes/create/ai; ‏/recipes/create/image עדיין עובד אבל מוסתר מתיעוד ה-API. ‏overrides של prompts מותאמים ל-recipes/scrape-recipe.txt ול-parse-recipe-image.txt נדחים, ובמקומם compile-source.txt ו-build-recipe.txt. [14]
  • בגרסה 3.21.0: התחברות OIDC דורשת שספק הזהות ישלח email_verified = true; אם הוא לא שולח את ה-claim, ההתחברות נכשלת עד שתגדירו אותו או תגדירו OIDC_REQUIRES_EMAIL_VERIFICATION=false. [13]
  • בגרסה 2.0.0: נוספו משקי בית (households) מתחת לקבוצות, כמה endpoints ליצירת מתכונים זזו (למשל /recipes/create-url ל-/recipes/create/url), ו-updateAt הפך ל-updatedAt; צריך לעדכן אינטגרציות API. [14]

מגבלות

  • ‏SQLite מתאים ל-1-20 משתמשים עם כתיבות מקבילות מוגבלות. יותר משתמשים בו-זמנית, או חיפוש fuzzy (רק ב-PostgreSQL), דורשים database=postgres; עוברים בין השניים בגיבוי ושחזור מהממשק. אל תשמרו SQLite על אחסון רשת: הוא עלול להשחית או לנעול את מסד הנתונים. [4][5][6][11]
  • רץ עם worker אחד של Uvicorn. התיעוד מזהיר שיותר workers ‏(UVICORN_WORKERS) עלולים לגרום לדליפת זיכרון, והמספרים כאן מניחים worker אחד. יש images ל-linux/amd64 ול-arm64 בלבד, בלי ARM של 32 ביט. [6][7]
  • ייבוא מתכון לפי URL דורש גישה יוצאת לאינטרנט. יכולות ה-AI האופציונליות קוראות ל-API חיצוני או מקומי שתואם OpenAI, והוא לא נכלל במספרים האלה. [7][8]

אבטחה

  • התחברו מיד אחרי ההפעלה הראשונה עם מנהל ברירת המחדל [email protected] / MyPassword, ושנו מיד את המייל והסיסמה שלו: כל מי שמגיע לדף ראשון יכול להתחבר איתם. [6][16]
  • השאירו ALLOW_SIGNUP=false (ברירת המחדל, מוגדרת כאן במפורש) והזמינו משתמשים מדפי הניהול. חשפו את פורט 9000 רק דרך reverse proxy עם HTTPS, עם BASE_URL שמוגדר לכתובת ה-https. [4][7][8]
  • ה-API לא מוגבל בקצב, וייבוא לפי URL גורם לשרת למשוך כל כתובת שמשתמש נותן (סיכון SSRF ומניעת שירות). הוסיפו הגבלת קצב ב-proxy, ותנו חשבונות רק לאנשים שאתם סומכים עליהם. [8]

גיבוי

  • הגיבוי המובנה של Mealie ‏(/admin/backups) כותב קובץ zip עם מסד הנתונים כ-JSON ועם תיקיית הנתונים ל-/app/data/backups. הוא רץ רק כשמפעילים אותו, וקובצי ה-zip נשארים על אותו דיסק: הורידו אותם ושמרו אותם מחוץ לשרת. [6][10][17]
  • גבו גם את ה-volume ‏/app/data: עם SQLite יש בו את כל האתר (מסד הנתונים, התמונות, קובצי ה-.secret), והתיעוד מגדיר עצירה של ה-container והעתקה שלו כגיבוי הטוב ביותר. עם PostgreSQL הוסיפו pg_dump; שחזור גיבוי מהממשק שם דורש superuser (המשתמש mealie של ה-sidecar הוא כזה). [5][10][16][33]

גרסה אחרונה

הגרסה האחרונה של הפרויקט
Mealie 3.28.0 [4][22]
הפרופיל נבדק מול

Mealie 3.28.0

הפרופיל נבדק מול הגרסה האחרונה.

נבדק ב-
14 באוק׳ 2026
מצב
נבדק ב-90 הימים האחרונים
איפה הגרסאות מתפרסמות
GitHub Releases

הגרסאות האחרונות של כל האפליקציות

גרסה

סטטוס הפרופיל
פורסם
נבדק מול גרסה
Mealie 3.28.0
גרסת הפרופיל
1.0.0
המספרים אומתו
14 באוק׳ 2026
גרסת הקטלוג
2026.10.10
מדיניות sizing
2026.10.0
קובץ Compose
לא אומת
האתר הרשמי
mealie.io
חלופות
Tandoor Recipes

מקורות

  1. Docker Docs: Control startup order in Compose (pg_isready healthcheck, service_healthy) (תיעוד רשמי · נקרא 11 באוק׳ 2026)
  2. mealie v3.28.0 docker/healthcheck.sh: curl -fsk http://127.0.0.1:${API_PORT:-9000}/api/app/about (מאגר רשמי · נקרא 14 באוק׳ 2026)
  3. mealie v3.28.0 docker/entry.sh: remaps user abc to PUID/PGID (default 911), chowns /app, then gosu (מאגר רשמי · נקרא 14 באוק׳ 2026)
  4. Mealie Docs: Installing with SQLite (compose: v3.28.0, 9925:9000, memory limit 1000M, /app/data, ALLOW_SIGNUP false, PUID/PGID, TZ, BASE_URL; 1-20 users) (Compose רשמי · נקרא 14 באוק׳ 2026)
  5. Mealie Docs: Installing with PostgreSQL (compose with postgres:17, DB_ENGINE and POSTGRES_* variables, many concurrent users) (Compose רשמי · נקרא 14 באוק׳ 2026)
  6. Mealie Docs: Installation Checklist (default credentials [email protected] / MyPassword, http://localhost:9925, UI backups, pin a vX.Y.Z tag) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  7. Mealie Docs: Backend Configuration (PUID/PGID 911, BASE_URL, TZ, ALLOW_SIGNUP, DB_ENGINE, UVICORN_WORKERS 1, API_PORT 9000) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  8. Mealie Docs: Security Considerations (API not rate limited, SSRF via URL import, disable sign-ups) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  9. Mealie Docs: Updating Mealie (read the release notes, back up from the UI, change the tag, pull, up -d) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  10. Mealie Docs: Backups and Restores (/admin/backups, copy /app/data for SQLite, Postgres restore needs a superuser) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  11. Mealie Docs: FAQ (fuzzy search only on PostgreSQL; move by backup and restore) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  12. Mealie Docs: Logs (written to /app/data/mealie.log and to stdout) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  13. Mealie Docs: OpenID Connect (breaking change in v3.21.0: email_verified claim required) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  14. Mealie Docs: Migration Guide (v3.23.0 AI import endpoint and prompt files; V1 to V2 households and endpoint moves) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  15. mealie v3.28.0 docker/Dockerfile (user abc uid 911, VOLUME /app/data, APP_PORT 9000, HEALTHCHECK healthcheck.sh, curl and gosu installed) (מאגר רשמי · נקרא 14 באוק׳ 2026)
  16. mealie v3.28.0 core/settings/settings.py (ALLOW_SIGNUP false, default admin [email protected], .secret files in the data dir, UVICORN_WORKERS 1) (מאגר רשמי · נקרא 14 באוק׳ 2026)
  17. mealie v3.28.0 services/backups_v2/backup_v2.py (zip of database.json and the data dir, backups and .temp excluded, .secret restored) (מאגר רשמי · נקרא 14 באוק׳ 2026)
  18. mealie v3.28.0 db/db_setup.py (create_engine with SQLAlchemy's default pool; SQLite journal_mode MEMORY unless WAL) (מאגר רשמי · נקרא 14 באוק׳ 2026)
  19. mealie v3.28.0 db/init_db.py (Alembic upgrade to head at startup; CREATE EXTENSION pg_trgm on PostgreSQL) (מאגר רשמי · נקרא 14 באוק׳ 2026)
  20. mealie v3.28.0 core/logger/logconf.prod.json (mealie.log rotated at 10,000,000 B, 3 backups) (מאגר רשמי · נקרא 14 באוק׳ 2026)
  21. mealie v3.28.0 .github/workflows/test-backend.yml (backend tests on sqlite and on the untagged postgres service image) (מאגר רשמי · נקרא 14 באוק׳ 2026)
  22. mealie v3.28.0 pyproject.toml (version 3.28.0, license AGPL-3.0-only) (מאגר רשמי · נקרא 14 באוק׳ 2026)
  23. GHCR manifest of ghcr.io/mealie-recipes/mealie:v3.28.0 (linux/amd64, anonymous pull token): 427,358,439 B compressed; 14 layers decompressed and counted: 1,206,041,600 B (מדידה · נקרא 14 באוק׳ 2026)
  24. SQLAlchemy 2.0: Connection Pooling (QueuePool default pool_size 5, max_overflow 10) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  25. Docker: the containerd image store keeps image layers both compressed and uncompressed (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  26. docker-library/postgres 18/trixie Dockerfile (postgres user 999:999, VOLUME /var/lib/postgresql) (מאגר רשמי · נקרא 14 באוק׳ 2026)
  27. docker-library/postgres 18/trixie docker-entrypoint.sh (chown, then gosu postgres) (מאגר רשמי · נקרא 14 באוק׳ 2026)
  28. PostgreSQL 18 documentation: 19.4 Resource Consumption (תיעוד רשמי · נקרא 10 באוק׳ 2026)
  29. PostgreSQL 18 documentation: 19.3 Connections and Authentication (תיעוד רשמי · נקרא 10 באוק׳ 2026)
  30. PostgreSQL 18 documentation: 19.10 Vacuuming (autovacuum settings) (תיעוד רשמי · נקרא 10 באוק׳ 2026)
  31. PostgreSQL 18 documentation: 19.5 Write Ahead Log (max_wal_size) (תיעוד רשמי · נקרא 10 באוק׳ 2026)
  32. PostgreSQL 18 documentation: 51.2 How Connections Are Established (תיעוד רשמי · נקרא 10 באוק׳ 2026)
  33. Docker Official Image postgres: documentation (docker-library/docs) (תיעוד רשמי · נקרא 10 באוק׳ 2026)
  34. Docker Hub: library/postgres tag 18.6 (compressed image sizes) (מאגר רשמי · נקרא 10 באוק׳ 2026)

כל אפליקציות ה-self-hosted