MAATRIX / Блог / Как установить и настроить Mealie на VPS

Как установить и настроить Mealie на VPS

MAATRIX

Если у вас разрослась коллекция рецептов в закладках браузера, заметках телефона и десятке скриншотов из Instagram, а список покупок вы всё равно каждый раз составляете по памяти — Mealie решает именно эту проблему. Это self-hosted менеджер рецептов с импортом по ссылке, планировщиком меню на неделю и автоматическим списком покупок. Дальше — пошаговая установка на VPS через Docker Compose, с доменом, HTTPS и базовыми настройками для реальной эксплуатации.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Что такое Mealie и зачем его хостить самому

Mealie — открытый проект на FastAPI (бэкенд) и Vue (фронтенд), который хранит рецепты в собственной базе, а не в облаке стороннего сервиса. Ключевые функции:

  • импорт рецепта по URL (парсер вытаскивает ингредиенты, шаги, время готовки с большинства кулинарных сайтов);
  • ручной ввод рецептов с фото, тегами, категориями и кухнями;
  • планировщик меню — раскладка блюд по дням недели;
  • автогенерация списка покупок из плана меню, с группировкой по категориям продуктов;
  • мультипользовательский доступ — можно завести отдельные аккаунты для всей семьи;
  • REST API и мобильное веб-приложение (PWA), которое ставится на телефон как обычное приложение.

Самостоятельный хостинг здесь оправдан не только принципом «мои данные — мой сервер». Бесплатные тарифы облачных клонов часто ограничивают число рецептов или блокируют экспорт, а держать личную базу рецептов в чужом облаке без гарантий сохранности — сомнительная идея. VPS с Docker снимает эти ограничения: диск и производительность — ваши, обновления — по расписанию, которое устраивает вас.

Для Mealie достаточно скромного VPS: 1 vCPU, 1-2 ГБ RAM и 10-20 ГБ диска (в основном под фото рецептов) хватает с большим запасом даже на семью из нескольких активных пользователей.

Требования к серверу и подготовка

Перед установкой понадобится:

  • VPS с Ubuntu 24.04 (в этой статье все команды под неё; на Debian 12 отличия минимальны);
  • домен или поддомен, направленный на IP сервера (A-запись), если хотите доступ по имени и HTTPS;
  • установленный Docker и Docker Compose plugin.

Если Docker ещё не стоит, разверните его с нуля — есть отдельный разбор: установка Docker на Ubuntu 24.04. Проверить, что всё установилось, можно так:

docker --version
docker compose version

Если планируете HTTPS-домен — сначала настройте DNS-запись и убедитесь, что она резолвится на сервер, прежде чем выпускать сертификат. Разбор процесса от покупки домена до рабочего A-record есть здесь: настройка домена и DNS с нуля на Ubuntu 24.04.

Создайте рабочую директорию и структуру каталогов для постоянного хранения данных:

mkdir -p ~/mealie/mealie-data
cd ~/mealie

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Docker Compose файл для Mealie

Mealie распространяется одним образом с встроенной SQLite-базой по умолчанию — для домашнего или семейного использования этого достаточно, отдельный PostgreSQL не обязателен. Создайте docker-compose.yml:

services:
  mealie:
    image: ghcr.io/mealie-recipes/mealie:latest
    container_name: mealie
    restart: unless-stopped
    ports:
      - "127.0.0.1:9925:9000"
    volumes:
      - mealie-data:/app/data/
    environment:
      - TZ=Europe/Moscow
      - MAX_WORKERS=1
      - WEB_CONCURRENCY=1
      - BASE_URL=https://recipes.example.com
      - ALLOW_SIGNUP=false
      - PUID=1000
      - PGID=1000

volumes:
  mealie-data:
    driver: local

Пояснения по значимым параметрам:

  • порт публикуется только на 127.0.0.1, наружу сервис отдаёт обратный прокси (см. ниже) — так контейнер не торчит в интернет напрямую;
  • MAX_WORKERS и WEB_CONCURRENCY выставлены в 1 — на VPS с 1-2 ГБ RAM это разумный баланс, при большем числе одновременных пользователей можно поднять;
  • BASE_URL — обязательно укажите реальный домен, иначе ссылки в UI и, что важнее, в письмах приглашений будут некорректны;
  • ALLOW_SIGNUP=false — самостоятельная регистрация выключена, пользователей заводит администратор из админки; для личного/семейного инстанса это правильный дефолт;
  • PUID/PGID — если на хосте у вас есть пользователь с нестандартным UID, подставьте его значения (id -u, id -g), иначе можно не трогать.

Замените домен на свой и запустите контейнер:

docker compose up -d
docker compose logs -f mealie

Первый старт создаёт схему базы и занимает 10-20 секунд. В логе должна появиться строка о запуске Uvicorn на порту 9000.

Настройка обратного прокси и HTTPS

Проксировать Mealie наружу с автоматическим HTTPS проще всего через Caddy — конфиг занимает пять строк, сертификат Let's Encrypt выпускается и продлевается сам. Если Caddy ещё не установлен, есть пошаговая инструкция: Caddy с авто-SSL на Ubuntu 24.04.

Добавьте блок в /etc/caddy/Caddyfile:

recipes.example.com {
    reverse_proxy 127.0.0.1:9925
}

Перезапустите сервис:

sudo systemctl reload caddy

Через несколько секунд домен должен открыться по HTTPS с валидным сертификатом. Если предпочитаете Nginx или Traefik — оба варианта тоже работают, разница только в объёме конфига; сравнение подходов разобрано в статье Traefik или Nginx Proxy Manager — что выбрать.

Если сайт после настройки прокси открывается по IP, но не по домену — почти всегда проблема в DNS-записи, которая ещё не обновилась или указывает не туда; разбор типичных причин есть в статье сайт открывается по IP, но не по домену.

Первый запуск: администратор и базовые настройки

Откройте https://recipes.example.com. При первом заходе Mealie предлагает создать администраторский аккаунт — укажите email и пароль (это ваш личный сервер, но пароль всё равно стоит выбрать нормальный, а не admin123).

После входа зайдите в Settings → Site Settings и проверьте:

  • Recipe Card Options — какие поля показывать на карточке рецепта в списке;
  • Webhooks (при необходимости) — можно отправлять уведомления о новом плане меню в Discord/Slack через webhook URL;
  • Backup — встроенный экспорт базы в архив, который можно скачать вручную из UI.

Если инстанс семейный, добавьте пользователей: Admin → Users → Create User. У Mealie есть роли — обычный пользователь может редактировать рецепты и планы, права администратора нужны только для управления группой и настройками сайта.

Импорт рецептов и настройка планировщика

Основной сценарий использования — импорт по ссылке. В разделе Recipes → Create → From URL вставьте ссылку на рецепт с любого сайта, поддерживающего разметку schema.org/Recipe (это большинство современных кулинарных блогов) — Mealie сам вытащит ингредиенты, шаги и фото.

Если сайт не парсится (нестандартная вёрстка или сайт активно блокирует автоматические запросы), рецепт можно ввести вручную или вставить текст — Mealie попробует распознать структуру через встроенный парсер.

Дальше два рабочих модуля:

  • Meal Planner — перетаскиваете рецепты на дни недели, план виден всей семье, если у них есть доступ;
  • Shopping Lists — создаётся отдельно или автоматически из плана меню; ингредиенты группируются по категориям (овощи, молочка, бакалея), галочки синхронизируются между устройствами в реальном времени — открыли список на телефоне в магазине, отметили купленное, дома на компьютере список уже обновлён.

Для удобства на телефоне добавьте PWA на домашний экран — большинство мобильных браузеров предлагают это сами при открытии сайта, либо вручную через «Добавить на главный экран» в меню браузера.

Резервное копирование и обновление

Данные Mealie — это SQLite-база и папка с загруженными изображениями рецептов, всё лежит в volume mealie-data. Регулярный бэкап volume — обязательная практика, особенно если рецепты вводились вручную и нигде больше не сохранены. Общие подходы к бэкапу Docker-томов и типичные ошибки разобраны в статье бэкап Docker volume на сервере.

Минимальный вариант — cron-задача с архивированием volume раз в сутки:

0 3 * * * docker run --rm -v mealie_mealie-data:/data -v /root/backups:/backup alpine tar czf /backup/mealie-$(date +\%F).tar.gz -C /data .

Обратите внимание на реальное имя volume — Docker Compose добавляет к нему префикс имени проекта (docker volume ls покажет точное имя). Если нужна настройка cron с нуля — есть отдельный разбор: установка и настройка cron-задач на VPS.

Обновление образа делается стандартно для Docker Compose:

docker compose pull
docker compose up -d

Перед крупным обновлением (смена мажорной версии) стоит свериться с release notes проекта на GitHub — иногда меняется формат хранения данных, и разработчики явно указывают, нужна ли миграция. Для рутинных минорных обновлений можно настроить Watchtower, чтобы образ подтягивался автоматически — как это сделать, описано в статье автообновление Watchtower на VPS, но для базы данных лично проверяйте бэкап перед каждым таким обновлением.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

Нужна ли для Mealie отдельная база PostgreSQL?

Нет, встроенной SQLite достаточно для личного и семейного использования — на десятках или даже сотнях пользователей с активной одновременной работой производительность SQLite станет узким местом, но для домашнего сценария это не актуально.

Можно ли пригласить родственников с других устройств без домена?

Технически можно открыть порт напрямую по IP, но тогда трафик и пароли пользователей идут без шифрования — для доступа больше чем с одного устройства домен с HTTPS стоит настроить сразу, это недорого и небыстро, но один раз.

Парсер не смог разобрать рецепт с конкретного сайта — что делать?

Часть сайтов либо не используют стандартную разметку schema.org, либо блокируют автоматические запросы — в этом случае проще скопировать текст рецепта и вставить его в форму ручного создания, где Mealie тоже пытается распознать структуру, либо ввести поля вручную.

Сколько места занимают фотографии рецептов?

Зависит от количества и разрешения загружаемых фото — на практике коллекция из нескольких сотен рецептов с фотографиями редко превышает 1-2 ГБ, так что диска в 10-20 ГБ хватает с большим запасом на годы использования.

Что будет, если сервер выйдет из строя без бэкапов?

Вы потеряете все рецепты, план меню и списки покупок — именно поэтому регулярный бэкап volume в отдельное хранилище (не на том же диске) обязателен с первого дня, а не «когда-нибудь потом».

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →