Self-host Tandoor Recipes
A self-hosted recipe manager and meal planner for power users: import recipes from thousands of sites, plan several meals a day, and turn plans into shopping lists shared across a household.
Key facts
Pick Tandoor Recipes when a large or shared recipe collection needs more than a scraper and a calendar: it is a Django (Python) app with a Vue frontend, and the recommended install is Docker Compose with two services — `postgres:16-alpine` and the `vabene1111/recipes` image, which since Tandoor 2 bundles nginx and serves everything on port 80. You get import from thousands of sites that publish ld+json or microdata, importers from other recipe managers (Mealie, Paprika, Nextcloud and more), full-text search with trigram similarity, meal plans with several meals a day, shopping lists from plans or recipes, and households and spaces for sharing. Upstream publishes no RAM figure for Docker; our 1 GB floor is an estimate. The code is AGPL-3.0 with a Commons Clause selling restriction. If you want one container on SQLite instead, Mealie is the catalog's other recipe manager.
What you need
- Any VPS with at least 1024 MB of RAM
- A domain you control — most self-hosted setups need HTTPS in front of them
- Under an hour if you've used Docker before
Paid link — we earn a commission if you shop through it.
Install
Run these commands on your server:
# Tandoor Recipes — upstream's "plain" compose (PostgreSQL 16 + the Tandoor image with its built-in nginx) and .env template
mkdir tandoor && cd tandoor
wget https://raw.githubusercontent.com/TandoorRecipes/recipes/develop/docs/install/docker/plain/docker-compose.yml
wget https://raw.githubusercontent.com/TandoorRecipes/recipes/develop/.env.template -O .env
# edit .env — required: SECRET_KEY (upstream: base64 /dev/urandom | head -c50), POSTGRES_PASSWORD, ALLOWED_HOSTS=your.domain
docker compose up -d
# → http://SERVER_IP (port 80) — wait 2–3 minutes for first-start migrations; the first visit opens /setup to create the adminWhat you take on
Tandoor's docs are candid about what a Docker install leaves to you: