Новые релизы
Сравнение версии рецепта с последним известным релизом upstream. Это номер версии, а не разбор изменений.
Tandoor хранит домашние рецепты с ингредиентами, шагами приготовления и фотографиями, планирует блюда в календаре и превращает меню в общие списки покупок. Рецепт запускает Tandoor с PostgreSQL, постоянными медиафайлами и пересоздаваемой статикой; внешние AI-сервисы и хранилища необязательны и не настроены.
Tandoor хранит домашние рецепты с ингредиентами, шагами приготовления, фотографиями и книгами рецептов, планирует меню в календаре и ведёт общие списки покупок. Он подходит семье, которая хочет готовить по общей коллекции на своём сервере. Приложение заменяет часть возможностей Paprika Recipe Manager, Recipe Keeper и AnyList, но не включает их платные клиенты и облачные сервисы. По сравнению с Mealie это другой подход к организации рецептов, меню и покупок, с другой лицензией.
Tandoor — source-available, а не одобренное OSI открытое ПО. Его лицензия — GNU AGPL v3 с ограничением продажи Commons Clause. Личное и внутреннее использование разрешено, однако лицензия не предоставляет право продавать ПО и услуги, ценность которых существенно основана на нём, включая хостинг и связанные консультации или поддержку. До предложения услуг изучите саму лицензию. Файлы рецепта установки — MIT; исходные уведомление и лицензия логотипа сохранены в assets/NOTICE и assets/LICENSE.
Рецепт использует официальный образ Tandoor 2.7.2, PostgreSQL 18.6 и помощник Alpine 3.22.2 для инициализации и архивов. Образ включает Nginx и Gunicorn; приложение работает от UID/GID 65534. Инициализация готовит только корни томов медиа и статики. База и медиа постоянны, а статика пересоздаётся из закреплённого образа при запуске. Внешние AI-провайдеры, хранилища, социальный вход и SMTP не настроены.
Веб-интерфейс поддерживает русский и английский. Официальный список связанных проектов содержит сторонний клиент kitshn для Android и iOS; здесь он не устанавливается и не проверяется. Настольного клиента в рецепте нет. Untare обозначен upstream как прекративший развитие и не рекомендуется как основной мобильный вариант.
Локальный вход по имени и паролю использует браузерный API аутентификации. Встроенные провайдеры django-allauth поддерживают OIDC и SAML; также существует режим заголовка пользователя от прокси. Все три режима выключены в рецепте. Встроенный второй фактор в этой сборке не включён. Если нужен MFA, используйте правильно настроенный провайдер личности; не включайте remote-user за прокси, принимающим заголовок личности от посетителя.
В оценке безопасности зафиксированы предупреждения. Первый посетитель /setup/ может создать владельца: завершите настройку через loopback или SSH-туннель до открытия прокси и доступа из сети. Обычная регистрация явно выключена. Допускайте доверенные аккаунты, ограничивайте доступ импорта к чувствительным внутренним сервисам, защищайте тома и шифруйте внешние архивы.
Изображения отдаёт Nginx без проверки прав на каждый файл. Приватность рецепта защищает API рецепта, но не делает известный URL фотографии приватным. Не храните чувствительные фотографии. Рецепты, участники семьи, меню и секреты интеграций находятся в PostgreSQL и резервных копиях; архив медиа и .env тоже чувствительны.
В upstream 2.7.2 есть известная ошибка перенаправления настройки (#4907): повторное открытие /setup/ после создания владельца возвращает HTTP 500. Для обычного доступа используйте /account/login/. Рецепт не патчит аутентификацию upstream и не считает эту ошибку успешной проверкой защиты: smoke-тест проверяет действующую конфигурацию закрытой регистрации.
Сценарий восстановления на amd64 создаёт владельца через штатную CSRF-форму, проверяет вход, сохраняет приватный рецепт с ингредиентом, инструкциями, тегом и изображением, удаляет все три тома и проверяет восстановленные данные и хеш сохранённой фотографии. arm64, сроки меню, синхронизация покупок, импорт URL, провайдеры личности, почта, AI и мобильные клиенты не проверялись. В снимке безопасности сохранены пять CRITICAL-находок в пакетах закреплённых образов.
Ориентир ресурсов — от 1 CPU, 1 ГиБ RAM и 5 ГиБ диска; 2 ГиБ RAM оставляют больше места для PostgreSQL и двух воркеров Gunicorn. Это ориентиры установки, а не гарантия нагрузочного теста. Домашний и VPS-уровни поддерживаются после безопасного создания владельца; надёжный уровень остаётся частичным, поскольку внешний мониторинг, лимиты ресурсов и расписание резервирования настраивает оператор.
Источники: Docker, параметры, аутентификация, провайдер SAML и изменения 2.7.2.
Это сохранённые результаты отдельных проверок, а не данные в реальном времени. Неизвестный статус означает, что проверка ещё не выполнялась.
Сравнение версии рецепта с последним известным релизом upstream. Это номер версии, а не разбор изменений.
Результат отдельного сканирования Docker-образов, а не проверки Compose.
Новый major находится сравнением номеров версий. Вердикт о совместимости заносится вручную после чтения release notes и порядка миграции.
Изменения upstream Compose относительно проверенного рецепта.
Проверка закреплённых тегов образов на наличие новых версий.
От наблюдения к действию
Рецепт уже закрепляет последний известный релиз. Ниже показаны сохранённые основания для этой версии.
2.7.22.7.2Открыть релиз на GitHub ↗ Ссылка нужна для ревизии и сама по себе не доказывает совместимость.
Номера версий не пересекают major-границу совместимости. Вердикт о совместимости не записан.
Смена тегов образов сейчас не планируется.
Смена тега и перезапуск. Шаги конкретного релиза всё равно берутся из release notes и инструкции по установке.
Смена версии сейчас не планируется. Рецепт содержит процедуру backup. Restore проверен.
Точная проверка уровня «Проверен полностью» для этой версии записана 2026-10-29.
Статус показывает, насколько опубликованный рецепт покрывает требования каждого уровня.
Минимальная конфигурация для локальной сети или доступа через VPN.
Рецепт закрывает все требования этого уровня.
Публичная установка с защищённым доступом и резервными копиями.
Рецепт закрывает все требования этого уровня.
Конфигурация для предсказуемой эксплуатации и наблюдаемости.
Нужно добавить вручную: внешний мониторинг, лимиты cpu и памяти.
Собрать под свой сервер
Ответьте на пять вопросов и скачайте готовый комплект Tandoor.
Сначала прочитайте полную инструкцию: в ней описаны доступ извне, backup и расположение данных.
cp .env.example .envdocker compose up -ddocker compose psПодойдут Ubuntu 24.04/26.04 LTS или Debian 12/13 с Docker Engine и Compose от v2.24, установленными по инструкции Docker. Выполняйте команды из каталога рецепта. Установите openssl; Python 3 и curl нужны для smoke-теста. Доступ к Docker даёт административный контроль над хостом.
cp .env.example .env
chmod 600 .env
openssl rand -hex 32 # TANDOOR_SECRET_KEY
openssl rand -hex 24 # TANDOOR_DB_PASSWORD
Вставьте разные сгенерированные значения в .env. Entrypoint веб-приложения отклоняет шаблонные секреты и ключ короче 50 символов до запуска HTTP. Пароль владельца создаётся в штатной форме настройки. Оставьте порт на loopback до создания владельца.
docker compose --env-file .env config --quiet
docker compose --env-file .env pull
docker compose --env-file .env up -d --wait --wait-timeout 600
docker compose ps --all
Оставьте публичный прокси закрытым. Откройте туннель со своего компьютера:
ssh -L 8089:127.0.0.1:8089 user@server
Откройте http://localhost:8089/setup/, создайте владельца с уникальным паролем, затем используйте http://localhost:8089/account/login/. Настройка создаёт начальное пространство. Начальный email шаблонный; для подтверждения настоящего адреса и почтового сброса пароля сначала настройте SMTP. Обычная публичная регистрация выключена. Не возвращайтесь на /setup/: в upstream 2.7.2 после создания пользователя там есть ошибка перенаправления. До открытия HTTPS настройте firewall, обновления ОС и зашифрованные внешние копии.
Первую настройку выполните через туннель. Затем замените 127.0.0.1 в пробросе веб-порта на частный адрес сервера. Добавьте адрес в TANDOOR_ALLOWED_HOSTS, а в TANDOOR_CSRF_TRUSTED_ORIGINS укажите точный origin, например http://192.168.1.10:8089. Пересоздайте сервисы и разрешите доступ только доверенным клиентам или VPN. Обычный HTTP передаёт учётные и домашние данные без шифрования.
Направьте recipes.example.com на сервер. Оставьте приложение на loopback, задайте TANDOOR_ALLOWED_HOSTS=localhost,127.0.0.1,recipes.example.com и TANDOOR_CSRF_TRUSTED_ORIGINS=https://recipes.example.com, затем выполните docker compose up -d --wait --wait-timeout 600. Передавайте исходный Host и X-Forwarded-Proto. Tandoor доверяет заголовку протокола, поэтому не допускайте недоверенный прямой доступ к backend. Оставляйте remote-user выключенным, если нет доверенного аутентифицирующего прокси, удаляющего подставленные клиентом заголовки личности.
proxy/Caddyfile получает HTTPS-сертификат и направляет домен на loopback. Для proxy/nginx.conf укажите пути сертификатов; до перезагрузки выполните nginx -t. proxy/traefik.yaml — динамическая конфигурация file provider для существующего Traefik с его certificate resolver. Примеры предполагают прокси на Docker-хосте. Контейнерному прокси нужна контролируемая общая сеть или доступный адрес хоста: его loopback указывает на него самого. Отдельный прокси статики и медиа не нужен: официальный образ уже включает Nginx.
Создаются три тома проекта: database в /var/lib/postgresql, media в /opt/recipes/mediafiles и static в /opt/recipes/staticfiles. PostgreSQL хранит рецепты, пользователей, пространства, меню, покупки и настройки интеграций. Изображения и пользовательские файлы находятся в media. Статика создаётся при каждом запуске и не является пользовательскими данными. Инициализатор назначает корням media/static UID/GID 65534; приложение работает без root. Не меняйте UID и владельцев томов вслепую.
| Переменная | Назначение |
|---|---|
TANDOOR_VERSION |
Закреплённая версия приложения 2.7.2. |
TANDOOR_PORT |
Веб-порт loopback, 8089. |
TANDOOR_SECRET_KEY |
Случайный Django-секрет от 50 символов; храните вместе с архивами. |
TANDOOR_DB_PASSWORD |
Уникальный пароль PostgreSQL, заданный до первого запуска; правка только .env не меняет пароль существующей роли БД. |
TANDOOR_ALLOWED_HOSTS |
Имена и IP через запятую, без схем и портов; сохраняйте loopback для healthcheck. |
TANDOOR_CSRF_TRUSTED_ORIGINS |
Точные origin через запятую, со схемой и нестандартным портом, без wildcard. |
TZ |
IANA-часовой пояс приложения, стандартно UTC. |
Скрипты также принимают FOSSARY_ENV_FILE, COMPOSE_PROJECT_NAME и TANDOOR_BACKUP_DIR, по умолчанию .env, проект tandoor и backups/. Если запускали docker compose -p с другим именем, экспортируйте тот же COMPOSE_PROJECT_NAME для резервирования и восстановления. SMTP, AI, внешние хранилища и провайдеры личности не настроены; рецепт не требует их ключей.
bash backup.sh
Дождитесь окончания инициализации. Скрипт останавливает приложение, делает дамп PostgreSQL и сохраняет полный том media, .env и Compose. Приложение запускается обратно только если работало до копирования. Архивы имеют приватные права и уникальные имена; шифруйте внешнюю копию и репетируйте восстановление. Экспорт рецептов не сохраняет аккаунты, меню, покупки и все настройки. Статика пересоздаётся и в архив не входит.
Используйте доверенные архивы и совпадающие версии приложения, базы и секреты. На новой машине подготовьте конфигурацию без запуска приложения:
docker compose up -d --wait database
docker compose create --no-deps tandoor initialize
bash restore.sh /absolute/path/tandoor-<timestamp>.tar
Восстановление проверяет состав архива, делает страховочную копию, останавливает запись, пересоздаёт базу приложения, заменяет media и ждёт healthcheck. Архивный .env автоматически не активируется. Проверьте вход, инструкции рецептов, фотографии, меню и покупки до открытия доступа. При сбое оставьте запись остановленной и изучите журналы до новой попытки. Для другой машины также исправьте параметры host/origin.
Прочитайте release notes и описание параметров. Сохраните старые .env, Compose и проверенный архив, остановите приложение, выберите изученный закреплённый TANDOOR_VERSION и перезапустите:
bash backup.sh
docker compose stop tandoor
# Измените TANDOOR_VERSION в .env; сохраняйте мажорную версию PostgreSQL.
docker compose pull tandoor
docker compose up -d --wait --wait-timeout 600
docker compose logs --tail=100 tandoor
При запуске мигрирует PostgreSQL и пересоздаётся статика. Проверьте рецепты, медиа, права, меню и покупки. Для мажорного обновления PostgreSQL нужен отдельный план экспорта и импорта; не используйте каталог данных с другой мажорной версией образа.
tandoor..env и Compose, сохраняя совпадающий секрет и мажорную версию базы; укажите старый TANDOOR_VERSION.docker compose create --no-deps tandoor initialize. Не запускайте старое приложение поверх новой схемы.bash restore.sh /path/to/pre-upgrade.tar. Страховочная копия сохранит текущее состояние до замены старой базой и media; статика пересоздастся.docker compose down сохраняет тома. После проверки внешней копии docker compose down --volumes --remove-orphans уничтожает базу, все загрузки и статику. .env и локальные архивы удаляйте отдельно, когда они больше не нужны.
Сообщить о проблеме с рецептом
Рассказать, как прошло на вашем сервере
Откроется предзаполненный issue на GitHub. Нужен аккаунт GitHub; после отправки сообщение будет публичным.
Начните с docker compose ps --all, docker compose logs --tail=200 tandoor database initialize, docker compose --env-file .env config --quiet и curl -i http://127.0.0.1:8089/accounts/login/. Не публикуйте секреты, сессионные cookie и домашние данные.
TANDOOR_SECRET_KEY должен иметь от 50 символов. При восстановлении существующей установки сохраняйте её ключ..env или осознанно смените пароль роли; удаление томов уничтожает данные.TANDOOR_ALLOWED_HOSTS принимает имена/IP без схемы и порта, TANDOOR_CSRF_TRUSTED_ORIGINS — полные origin. Укажите настоящий адрес, схему и нестандартный порт, передавайте Host/protocol и пересоздайте приложение. Доступ к backend оставляйте только через доверенные пути./setup/ после создания владельца: это upstream #4907, сохраняющийся в 2.7.2. Используйте /account/login/; не удаляйте базу и не создавайте владельца заново. Обычный headless-вход и API рецептов работают независимо от старого перенаправления.docker compose exec tandoor /opt/recipes/venv/bin/python manage.py changepassword <username>. Она запрашивает пароль интерактивно; не помещайте его в историю команд. До использования подтверждения email и почтового сброса настройте SMTP.Источники: Docker, параметры, аутентификация и upstream issues.
Fossary — независимый информационный каталог, не связанный с разработчиками представленных приложений. Мы собираем сведения из открытых источников и проверяем опубликованные рецепты, но не разрабатываем, не распространяем и не контролируем эти приложения.
Публикация карточки или статус проверки не являются требованием, навязыванием либо персональной рекомендацией использовать приложение. Вы самостоятельно решаете, подходит ли оно вам, и используете его на свой риск. Мы не гарантируем безопасность, доступность или пригодность приложения и, в пределах, допускаемых законом, не отвечаем за вызванные им потери или ущерб. До установки проверьте лицензию, настройки безопасности, обработку данных и резервное копирование.