Индекс на дневникаDockup / бележка от практиката
Note / self-host-mealie

Как да хоствате Mealie самостоятелно през 2026 г.: импортиране на рецепти, потребители и резервни копия

Практическо ръководство за самостоятелно хостване на Mealie с Docker, портове, persistent данни, TLS, сигурност, резервни копия и проблемите, които пречат на използването в production. Стъпка по стъпка.

Най-кратката демонстрация на Mealie доказва, че даден процес слуша на порт 9000. Production средата изисква по-сериозни доказателства. Тя трябва да преминава този сценарий дори след подмяна на container-а: импортирайте URL адрес на рецепта, проверете изображението ѝ, добавете я към план за хранене и генерирайте списък за пазаруване от няколко рецепти.

Mealie се внедрява с ясна цел: рецепти, планове за хранене и списъци за пазаруване. Най-честият проблем при внедряването му е изчезването на изображенията на рецептите, защото /app/data не е persistent, затова обработката на публичните URL адреси и надеждното съхранение на състоянието трябва да получат същото внимание като стартирането на изображението.

Очертайте runtime границата на Mealie

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

Валидирайте топологията, като накарате чист client да импортира URL адрес на рецепта, да провери изображението ѝ, да я добави към план за хранене и да генерира списък за пазаруване от няколко рецепти. Наблюдавайте импортирането на рецепти, съхранението на изображения, заявките към базата данни, background задачите и едновременните потребители от домакинството, докато сценарият се изпълнява. Резултатът ще покаже дали следващото подобрение трябва да бъде в memory, storage, networking или отделен worker, вместо да насърчава произволно оразмеряване на container-а.

Проверки за capacity и upgrade

Health check в idle състояние казва малко за Mealie. Наблюдавайте импортирането на рецепти, съхранението на изображения, заявките към базата данни, background задачите и едновременните потребители от домакинството, след което създайте alert за симптома, който потребителите изпитват: неуспешно изпълнение на действието „импортирайте URL адрес на рецепта, проверете изображението ѝ, добавете я към план за хранене и генерирайте списък за пазаруване от няколко рецепти“. Дръжте liveness проверката локална и евтина; нека readiness отчита migrations или initialization, без да предизвиква restart storm.

Рисковата зона при upgrade е, че migrations на базата данни и промените в ingredient parser-а могат да засегнат съхранените рецепти, затова тествайте импортирането и съществуващите записи. Прочетете release notes, създайте snapshot на състоянието, внедрете target версията върху възстановено копие и повторете acceptance действието. Ако изображенията на рецептите изчезват, защото /app/data не е persistent, свържете client заявката с първия релевантен application log, вместо да изтривате състоянието или сляпо да добавяте redirects.

Gate за release на Mealie

Release candidate за Mealie заслужава трафик, когато изпълни фиксиран сценарий: импортирайте URL адрес на рецепта, проверете изображението ѝ, добавете я към план за хранене и генерирайте списък за пазаруване от няколко рецепти. Запишете image digest-а, effective non-secret конфигурацията, публичния origin и timestamp-ите за този сценарий. Тестовите данни трябва да могат да бъдат изтрити, но да са достатъчно реалистични, за да упражняват същия път като потребителите.

Изпълнете го след подмяна на runtime-а, след което изградете услугата отново от базата данни, изображенията на рецептите, assets и application settings. Възстановяването е успешно, когато рецептите, изображенията, потребителите, плановете за хранене и списъците за пазаруване се върнат и позната рецепта се визуализира правилно. Сравнете измерванията на ресурсите за импортиране на рецепти, съхранение на изображения, заявки към базата данни, background задачи и едновременни потребители от домакинството с предишния release и проучете съществените отклонения преди promotion.

Накрая изпълнете този контролиран отказ: временно забранете на тестовата identity достъпа до Postgres при production внедряване с множество потребители и до SMTP за покани. Проверете дали Mealie обяснява грешката, не поврежда съществуващото състояние и възобновява работа след връщане на валидното условие. Запазете редактиран откъс от log-а и времето за възстановяване. Заедно тези проверки обхващат поведението, надеждността на данните и operability, а не само това дали процесът работи.

Изградете заменяем Mealie container

Поддържайте първоначалното извикване на 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, потребителя на container-а и ownership-а на mount-овете. Проследете application log-а през пълен тест — импортирайте URL адрес на рецепта, проверете изображението ѝ, добавете я към план за хранене и генерирайте списък за пазаруване от няколко рецепти — и отбележете всички migrations, преди да поставите маршрута зад production трафик.

Открийте всеки persistent byte в Mealie

Направете инвентаризация на всеки persistent артефакт: база данни, изображения на рецепти, assets и application settings. Mount-нете /app/data преди bootstrap, запишете безвредни примерни данни и подменете container-а, за да докажете, че този path действително е persistent. Включете конфигурацията, която променя начина, по който се интерпретират съхранените данни, а не само най-голямата директория.

Задайте retention, копирайте резервните копия извън host-а и изпълнете restore в clean-room среда. Проверката на Mealie е завършена, когато рецептите, изображенията, потребителите, плановете за хранене и списъците за пазаруване се върнат и позната рецепта се визуализира правилно. Ако snapshot-ите са част от плана, използвайте ръководството за PITR спрямо snapshot, за да документирате какво може да бъде възстановено чрез всеки механизъм.

Насочете Mealie, без да подвеждате относно HTTPS

Задайте BASE_URL към външния HTTPS origin. Насочете избраното hostname към container port 9000, препратете оригиналния host и HTTPS scheme и не публикувайте втори директен origin.

Тествайте Mealie от чист външен client. Разграничете ingress проблема от познатата граница на приложението — изображенията на рецептите изчезват, защото /app/data не е persistent. Проблем със сертификат, DNS или 502 принадлежи на routing-а; заявка, която достига до Mealie и се проваля по-късно, принадлежи на application state, capacity или на поддържащото изискване. Ръководството за TLS с custom domain обхваща първата група.

Ограничете правомощията на Mealie

След първото влизане прегледайте какво може да прави анонимен посетител, обикновен потребител и администратор. Проблемът с Mealie, който трябва да избегнете, е да оставите регистрацията отворена или да запазите непроменена първоначалната admin парола. Желаната политика е да смените първоначалната admin парола, да затворите регистрацията след приключване на enrollment-а и да защитите личните данни на домакинството.

BASE_URL е конфигурация, а не secret; дръжте стойността му изрично зададена, като защитите отделните credentials, използвани от Mealie. Дръжте dependency акаунтите отделно от човешките акаунти, забранете неизползвания egress, когато е практично, и ограничете работата, повлияна от импортирането на рецепти, съхранението на изображения, заявките към базата данни, background задачите и едновременните потребители от домакинството.

Deployment в Dockup все още се нуждае от acceptance тест за Mealie

Routing-ът, сертификатите, подмяната на услугата и прикаченото storage са разумни цели за automation. Dockup се грижи за тях при Mealie и може да provision-не съответната managed база данни или да се свърже с услуги на собствения сървър на клиента.

Това, което не трябва да измисля, е trust policy-то на Mealie. След deployment задайте BASE_URL към външния HTTPS origin, наложете тази граница — сменете първоначалната admin парола, затворете регистрацията след приключване на enrollment-а и защитете личните данни на домакинството — и проверете резултата от този сценарий: импортирайте URL адрес на рецепта, проверете изображението ѝ, добавете я към план за хранене и генерирайте списък за пазаруване от няколко рецепти. Резултатът е инфраструктура с one-click deployment и application-specific acceptance тест.

Често задавани въпроси

Какво е необходимо на Mealie за production deployment?

Насочете Mealie container-а на порт 9000 през един HTTPS origin. Поддържащото мрежово изискване е Postgres при production deployment с множество потребители и SMTP за покани. Не обявявайте Mealie за готов, докато не можете да импортирате URL адрес на рецепта, да проверите изображението ѝ, да я добавите към план за хранене и да генерирате списък за пазаруване от няколко рецепти.

Кои данни на Mealie трябва да бъдат включени в backup?

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

Необходим ли е HTTPS на Mealie зад reverse proxy?

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

Как трябва да бъде тестван upgrade на Mealie?

Възстановете текущото състояние на Mealie в изолирано deployment, приложете candidate версията и повторете acceptance транзакцията. Обърнете специално внимание, защото migrations на базата данни и промените в ingredient parser-а могат да засегнат съхранените рецепти, затова тествайте импортирането и съществуващите записи. Запазете предишното Mealie image, докато не изясните границите на data migration-а и rollback-а.