If you’re tired of recipe websites cluttered with ads, popup videos, and life stories before the ingredients, it’s time to take control with Tandoor Recipes. This self-hosted recipe manager lets you import, organize, and share your recipes without the noise. With features like automated meal planning, shopping lists, and cookbook imports, Tandoor transforms your kitchen workflow into something actually enjoyable.

💡 This article contains affiliate links. If you buy through them, we earn a small commission at no extra cost to you. Learn more.

In this guide, I’ll walk you through setting up Tandoor Recipes on Docker, configuring it properly, and exploring its powerful features. Whether you’re running a mini PC homelab or a full server, this setup takes less than 15 minutes.

What is Tandoor Recipes?

Tandoor Recipes is an open-source recipe manager designed for home cooks who want complete control over their kitchen data. Unlike commercial alternatives like Paprika or Copy Me That, Tandoor is completely free, privacy-focused, and runs entirely on your own hardware.

Key Features:

  • Recipe Import: Scrape recipes from any website automatically
  • Meal Planning: Plan your week with drag-and-drop calendar interface
  • Shopping Lists: Auto-generate lists from planned meals
  • Cookbook Management: Organize recipes into custom cookbooks
  • Multi-User Support: Share recipes with family members
  • Recipe Scaling: Adjust ingredient quantities on the fly
  • Nutrition Information: Track macros and calories
  • Mobile-Friendly: Responsive design works great on tablets
  • API Access: Integrate with home automation systems

Why Self-Host Your Recipe Manager?

Privacy First: Your recipes, meal plans, and shopping lists stay on your server. No tracking, no data mining, no selling your eating habits to advertisers.

No Subscriptions: Commercial recipe managers charge $5-15/month. Tandoor runs on hardware you already own for free.

Full Control: Customize everything. Back up your data. Export whenever you want. No vendor lock-in.

Better Performance: No slow ad-laden websites. Your recipes load instantly from your local network.

Family Sharing: Give everyone in your household their own account without paying per-user fees.

Prerequisites

Before we begin, you’ll need:

  • A server running Linux (Ubuntu, Debian, or similar)
  • Docker and Docker Compose installed
  • At least 2GB RAM and 10GB storage
  • Basic command line knowledge
  • A reverse proxy (optional but recommended for HTTPS)

If you’re setting up a new homelab server, I recommend checking out budget mini PCs with Intel N100 processors — they’re perfect for lightweight services like Tandoor.

Step 1: Create the Docker Compose File

First, create a directory for Tandoor and navigate to it:

1
2
mkdir -p ~/docker/tandoor
cd ~/docker/tandoor

Create a docker-compose.yml file:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
version: "3"
services:
  db_recipes:
    image: postgres:16-alpine
    restart: unless-stopped
    volumes:
      - ./postgresql:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: tandoor_password
      POSTGRES_USER: tandoor
      POSTGRES_DB: tandoor

  web_recipes:
    image: vabene1111/recipes:latest
    restart: unless-stopped
    environment:
      SECRET_KEY: "changeme_to_random_string_at_least_50_chars_long_abcdef123456"
      DB_ENGINE: django.db.backends.postgresql
      POSTGRES_HOST: db_recipes
      POSTGRES_PORT: 5432
      POSTGRES_USER: tandoor
      POSTGRES_PASSWORD: tandoor_password
      POSTGRES_DB: tandoor
      TIMEZONE: America/New_York
      GUNICORN_MEDIA: 0
      REVERSE_PROXY_AUTH: 0
    volumes:
      - ./staticfiles:/opt/recipes/staticfiles
      - ./mediafiles:/opt/recipes/mediafiles
    ports:
      - "8080:8080"
    depends_on:
      - db_recipes

  nginx_recipes:
    image: nginx:mainline-alpine
    restart: unless-stopped
    ports:
      - "8000:80"
    environment:
      NGINX_ENVSUBST_OUTPUT_DIR: /etc/nginx
    volumes:
      - ./nginx/nginx-conf:/etc/nginx/templates:ro
      - ./staticfiles:/static:ro
      -./mediafiles:/media:ro
    depends_on:
      - web_recipes

Important Configuration Notes:

  • SECRET_KEY: Generate a random 50+ character string. You can use openssl rand -base64 48 to generate one.
  • POSTGRES_PASSWORD: Change this to a strong password.
  • TIMEZONE: Set to your local timezone (e.g., Europe/London, Asia/Tokyo).
  • Ports: Port 8000 will be your main access port. Port 8080 is internal.

Step 2: Create the Nginx Configuration

Tandoor requires an Nginx reverse proxy to serve static files efficiently. Create the configuration:

1
mkdir -p nginx/nginx-conf

Create nginx/nginx-conf/recipes.conf.template:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
server {
    listen 80;
    server_name localhost;
    client_max_body_size 128M;

    # Serve media files
    location /media/ {
        alias /media/;
    }

    # Serve static files
    location /static/ {
        alias /static/;
    }

    # Proxy to Tandoor
    location / {
        proxy_set_header Host $http_host;
        proxy_pass http://web_recipes:8080;
        proxy_set_header X-Forwarded-Proto $http_x_proto;
    }
}

Step 3: Launch Tandoor

Start the containers:

1
docker-compose up -d

Wait about 30 seconds for the database to initialize, then check the logs:

1
docker-compose logs -f web_recipes

You should see messages indicating the server is running. Look for:

Booting worker with pid: X

Step 4: Create Your Admin Account

Access Tandoor at http://your-server-ip:8000. You’ll see a login screen.

Create an admin user from the command line:

1
docker-compose exec web_recipes python manage.py createsuperuser

Enter a username, email (optional), and password when prompted.

Now log in through the web interface with your new credentials.

Step 5: Configure Tandoor Settings

Once logged in, click your profile icon → SettingsSystem.

Essential Settings to Configure:

  1. Recipe Import: Enable automatic recipe scraping under “Recipe Scrapers”
  2. Allowed Hosts: Add your domain or IP address
  3. Shopping List: Configure your preferred grocery store layout
  4. Units: Set preferred measurement system (metric/imperial)
  5. Language: Choose your interface language

Step 6: Import Your First Recipe

Let’s test the recipe import feature:

  1. Click RecipesImport
  2. Choose URL Import
  3. Paste a recipe URL (try NYT Cooking, AllRecipes, or Serious Eats)
  4. Click Import

Tandoor will scrape the ingredients, instructions, timing, and even images automatically. Review the imported data and click Save.

Advanced Features

Meal Planning

The meal planner is where Tandoor truly shines:

  1. Navigate to Meal Plan in the sidebar
  2. Drag recipes from your collection onto calendar days
  3. Set meal types (breakfast, lunch, dinner, snack)
  4. Add serving sizes for each meal

Pro Tip: Use the “Shopping List” button to automatically generate a grocery list from your planned meals. Tandoor groups ingredients by category and consolidates quantities.

Recipe Cookbooks

Organize recipes into themed collections:

  1. Go to BooksCreate Book
  2. Name it (e.g., “Quick Weeknight Dinners”, “Vegan Meals”)
  3. Add recipes by clicking the book icon on any recipe

Nutrition Tracking

Enable nutrition calculations in Settings → System → Nutrition. Tandoor will attempt to calculate calories and macros for recipes with standard ingredients.

For more accurate tracking, integrate with USDA FoodData Central by adding your API key in the settings.

Recipe Sharing

Tandoor supports multi-user installations:

  1. Go to SystemUsers
  2. Click Create User
  3. Set permissions (view-only, editor, admin)

Share specific recipes or entire cookbooks with family members. Great for collaborative meal planning.

Keyword & Tag System

Create a taxonomy for your recipes:

  • Keywords: Searchable tags like “gluten-free”, “under-30-minutes”, “one-pot”
  • Foods: Ingredient-based tags that help with shopping list organization
  • Units: Custom measurement units for regional recipes

Backup Strategy

Tandoor stores everything in PostgreSQL and media files. Back up regularly:

1
2
3
4
5
# Backup database
docker-compose exec db_recipes pg_dump -U tandoor tandoor > backup_$(date +%Y%m%d).sql

# Backup media files
tar -czf mediafiles_backup_$(date +%Y%m%d).tar.gz mediafiles/

Automate this with a cron job for weekly backups. Store backups on a separate NAS drive or cloud storage.

Troubleshooting Common Issues

Recipe Import Fails

If imports aren’t working:

  1. Check docker-compose logs web_recipes for errors
  2. Verify the website isn’t blocking scrapers
  3. Try manual import instead (copy/paste ingredients and steps)

Static Files Not Loading

If CSS/images are broken:

  1. Run docker-compose exec web_recipes python manage.py collectstatic
  2. Restart containers: docker-compose restart

Slow Performance

For large recipe collections (500+ recipes):

  1. Increase PostgreSQL memory in docker-compose.yml:
    1
    
    command: postgres -c shared_buffers=256MB -c max_connections=200
    
  2. Add database indexes: docker-compose exec web_recipes python manage.py migrate

Expose Tandoor with HTTPS (Optional)

For secure remote access, use a reverse proxy like Traefik or Caddy.

Quick Caddy setup:

Create a Caddyfile:

recipes.yourdomain.com {
    reverse_proxy localhost:8000
}

Run Caddy:

1
caddy run

Caddy automatically handles HTTPS certificates via Let’s Encrypt.

Mobile Access

Tandoor’s responsive design works well on phones and tablets, but for an app-like experience:

  1. Open Tandoor in your mobile browser
  2. Tap ShareAdd to Home Screen
  3. This creates a progressive web app (PWA) icon

Now you have kitchen-friendly access to recipes without installing anything.

Integration with Home Assistant

Tandoor’s API enables smart home automation. Example uses:

  • Voice Commands: “Alexa, what’s for dinner tonight?”
  • Smart Displays: Show today’s meal plan on a kitchen tablet
  • Shopping List Sync: Push grocery lists to your phone automatically

Access the API at http://your-server:8000/docs for full documentation.

Alternatives to Tandoor

If Tandoor doesn’t fit your needs, consider:

  • Mealie: Similar features, slightly different UI approach
  • Recipe Sage: More minimalist, great for simple collections
  • Grocy: Kitchen management focused on inventory and expiration tracking

Tandoor strikes the best balance between features and usability for most home cooks.

Hardware Recommendations

Tandoor is lightweight but benefits from decent specs if you’re importing hundreds of recipes:

Minimum:

  • 2GB RAM
  • Dual-core CPU
  • 10GB storage

Recommended:

  • 4GB RAM
  • Quad-core CPU (Intel N100 is perfect)
  • 20GB SSD storage

If you’re building a dedicated homelab server, consider a small form factor PC that can run multiple Docker services alongside Tandoor.

Final Thoughts

Tandoor Recipes proves you don’t need a subscription service to manage your kitchen digitally. It’s fast, privacy-focused, and feature-rich enough to replace any commercial alternative.

The hardest part of self-hosting is getting started. Once Tandoor is running, it just works. Import your favorite recipes, plan next week’s meals, and enjoy ad-free cooking instructions on your tablet without supporting another surveillance-based business model.

Your recipes, your data, your kitchen.

Quick Reference Commands

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# Start Tandoor
docker-compose up -d

# Stop Tandoor
docker-compose down

# View logs
docker-compose logs -f

# Update Tandoor
docker-compose pull
docker-compose up -d

# Backup database
docker-compose exec db_recipes pg_dump -U tandoor tandoor > backup.sql

# Create admin user
docker-compose exec web_recipes python manage.py createsuperuser

Related Articles:

  • How to Set Up Nextcloud on Docker — Complete Guide
  • Best Self-Hosted Alternatives to Google Photos in 2026
  • Docker Compose Best Practices for Self-Hosters