Индекс журналаDockup / заметка с места
Note / self-host-mealie

Как развернуть Mealie самостоятельно в 2026 году: импорт рецептов, пользователи и резервные копии

Практическое руководство по самостоятельному размещению Mealie: Docker, порты, постоянное хранение данных, TLS, безопасность, резервные копии и проблемы, которые мешают использовать сервис в production. Пошаговая инструкция.

Самая короткая демонстрация Mealie доказывает лишь то, что процесс слушает порт 9000. Для production нужны более убедительные подтверждения. Сценарий должен выполняться даже после замены контейнера: импортировать рецепт по URL, проверить его изображение, добавить рецепт в план питания и создать список покупок из нескольких рецептов.

Mealie разворачивают для конкретной цели: работы с рецептами, планами питания и списками покупок. Самая распространённая проблема при развёртывании — изображения рецептов исчезают, потому что /app/data не сохраняется. Поэтому обработке публичных URL и долговечному хранению состояния нужно уделить столько же внимания, сколько и запуску image.

Определите границы среды выполнения Mealie

Минимальная ответственная топология Mealie включает один private listener на 9000, маршрут ingress и документированную границу хранения состояния. Для multi-user production deployment сетевой контракт Mealie предусматривает Postgres, а для приглашений — SMTP. Держите private endpoints во внутреннем DNS, разрешайте только необходимые исходящие вызовы и выдайте Mealie service credential с ограниченной областью доступа.

Проверьте топологию с помощью чистого клиента: импортируйте рецепт по URL, проверьте его изображение, добавьте рецепт в план питания и создайте список покупок из нескольких рецептов. Во время выполнения отслеживайте импорт рецептов, хранение изображений, запросы к базе данных, background tasks и одновременную работу нескольких пользователей в доме. Результат покажет, что именно требует улучшения — память, хранилище, сеть или отдельный worker, — вместо того чтобы произвольно увеличивать размер контейнера.

Проверки производительности и обновления

Проверка состояния в режиме простоя мало что говорит о Mealie. Отслеживайте импорт рецептов, хранение изображений, запросы к базе данных, background tasks и одновременную работу нескольких пользователей в доме, а оповещения настраивайте по симптому, который видит пользователь: сбою действия «импортировать рецепт по URL, проверить его изображение, добавить рецепт в план питания и создать список покупок из нескольких рецептов». Liveness-проверка должна быть локальной и дешёвой; readiness должна сообщать о миграциях или инициализации, не вызывая restart storm.

Рискованная часть обновления связана с тем, что миграции базы данных и изменения ingredient parser могут повлиять на сохранённые рецепты, поэтому тестируйте импорт и существующие записи. Изучите release notes, создайте snapshot состояния, разверните целевую версию поверх восстановленной копии и повторите приёмочный сценарий. Если изображения рецептов исчезают из-за того, что /app/data не сохраняется, сопоставьте запрос клиента с первой релевантной записью в application log, а не удаляйте состояние и не добавляйте redirects вслепую.

Критерии выпуска Mealie

Release candidate для Mealie получает трафик только после выполнения фиксированного сценария: импортировать рецепт по URL, проверить его изображение, добавить рецепт в план питания и создать список покупок из нескольких рецептов. Зафиксируйте image digest, эффективную конфигурацию без секретов, public origin и временные метки этого сценария. Тестовые данные должны быть одноразовыми, но достаточно реалистичными, чтобы пройти тот же путь, что и пользовательские данные.

Запустите этот сценарий после замены runtime, а затем восстановите сервис из базы данных, изображений рецептов, assets и application settings. Восстановление считается успешным, если вернулись рецепты, изображения, пользователи, планы питания и списки покупок, а известный рецепт отображается корректно. Сравните показатели ресурсов для импорта рецептов, хранения изображений, запросов к базе данных, background tasks и одновременной работы нескольких пользователей в доме с предыдущей версией и до выпуска разберитесь с существенными отклонениями.

Наконец, выполните контролируемый сбой: временно запретите test identity доступ к Postgres для multi-user production deployment и к SMTP для приглашений. Убедитесь, что Mealie объясняет причину сбоя, не повреждает существующее состояние и продолжает работу после восстановления корректного условия. Сохраните обезличенный фрагмент log и время восстановления. Вместе эти проверки охватывают поведение, сохранность данных и эксплуатационные характеристики, а не только доступность процесса.

Соберите заменяемый контейнер Mealie

Сделайте первоначальный запуск Mealie достаточно воспроизводимым, чтобы его можно было проверить в 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

Не полагайтесь на latest, когда в системе уже появились реальные данные. Зафиксируйте рабочий digest, пользователя контейнера и владельца mount. Проследите за application log в течение полного теста — импортируйте рецепт по URL, проверьте его изображение, добавьте рецепт в план питания и создайте список покупок из нескольких рецептов — и отметьте все миграции до того, как направлять на маршрут production traffic.

Найдите каждый сохраняемый байт в Mealie

Составьте перечень всех сохраняемых артефактов: базы данных, изображений рецептов, assets и application settings. Подключите /app/data до bootstrap, запишите безвредные тестовые данные и замените контейнер, чтобы убедиться, что этот путь действительно сохраняется. Учитывайте конфигурацию, которая меняет интерпретацию сохранённых данных, а не только самый большой каталог.

Настройте retention, копируйте резервные данные за пределы хоста и выполните восстановление в clean room. Проверка Mealie считается завершённой, когда возвращаются рецепты, изображения, пользователи, планы питания и списки покупок, а известный рецепт отображается корректно. Если в плане предусмотрены snapshots, используйте рекомендации по PITR и snapshots, чтобы задокументировать, что именно можно восстановить с помощью каждого механизма.

Настройте маршрутизацию Mealie без ложного HTTPS

Укажите в BASE_URL внешний HTTPS origin. Направьте выбранное имя хоста на порт контейнера 9000, передавайте исходные host и HTTPS scheme и не публикуйте второй прямой origin.

Проверьте Mealie с чистого внешнего клиента. Отделяйте сбой ingress от известной границы приложения — изображения рецептов исчезают из-за того, что /app/data не сохраняется. Ошибка сертификата, DNS или 502 относится к маршрутизации; запрос, который доходит до Mealie и завершается сбоем позднее, указывает на состояние приложения, capacity или его supporting requirement. Первую группу проблем разбирает руководство по TLS для custom domain.

Сократите полномочия Mealie

После первого входа проверьте, какие действия доступны анонимному посетителю, обычному пользователю и администратору. Проблема Mealie, которой следует избежать, — открытая регистрация или неизменённый пароль первого администратора. Целевая политика такова: заменить пароль первого администратора, закрыть регистрацию после завершения набора пользователей и защитить личные данные домохозяйства.

BASE_URL — это конфигурация, а не секрет; храните его значение явно, защищая при этом отдельные credentials, используемые Mealie. Разделяйте учётные записи зависимостей и пользователей, по возможности запрещайте неиспользуемый egress и ограничивайте нагрузку, связанную с импортом рецептов, хранением изображений, запросами к базе данных, background tasks и одновременной работой нескольких пользователей в доме.

Для deployment через Dockup всё равно нужен приёмочный тест Mealie

Маршрутизация, сертификаты, замена сервисов и подключённое хранилище — подходящие цели для автоматизации. Dockup выполняет эти задачи для Mealie и может подготовить связанную managed database либо подключиться к сервисам на собственном сервере клиента.

Но Dockup не должен самостоятельно придумывать policy доверия Mealie. После deployment укажите в BASE_URL внешний HTTPS origin, обеспечьте эту границу — замените пароль первого администратора, закройте регистрацию после завершения набора пользователей и защитите личные данные домохозяйства — и проверьте результат сценария: импортируйте рецепт по URL, проверьте его изображение, добавьте рецепт в план питания и создайте список покупок из нескольких рецептов. В результате получается инфраструктура в один клик с application-specific acceptance test.

Часто задаваемые вопросы

Что нужно Mealie для production deployment?

Маршрутизируйте контейнер Mealie на порту 9000 через один HTTPS origin. Требованиями поддерживающей сети являются Postgres для multi-user production deployment и SMTP для приглашений. Не объявляйте Mealie готовым, пока не сможете импортировать рецепт по URL, проверить его изображение, добавить рецепт в план питания и создать список покупок из нескольких рецептов.

Какие данные Mealie нужно включать в резервную копию?

Сохраняйте /app/data и включайте базу данных, изображения рецептов, assets и application settings в один recovery manifest. Чистое восстановление Mealie считается успешным только тогда, когда возвращаются рецепты, изображения, пользователи, планы питания и списки покупок, а известный рецепт отображается корректно.

Нужен ли Mealie HTTPS за reverse proxy?

Используйте HTTPS для public origin Mealie, а порт 9000 оставляйте во внутреннем маршруте. Корректно задайте настройку Mealie: укажите в BASE_URL внешний HTTPS origin. Для Mealie HTTPS защищает credentials и пользовательский контент при передаче и обеспечивает единообразное поведение клиента, зависящее от origin.

Как тестировать обновление Mealie?

Восстановите текущее состояние Mealie в изолированном deployment, примените candidate version и повторите acceptance transaction. Уделите этому особое внимание: миграции базы данных и изменения ingredient parser могут повлиять на сохранённые рецепты, поэтому тестируйте импорт и существующие записи. Храните предыдущий image Mealie, пока не будут понятны границы миграции данных и rollback.