Tandoor Recipe Manager
Tandoor application for managing recipes, meal planning, and shopping lists.
Overview
Tandoor Recipe Manager is a modern, web-based recipe management platform built with Django that transforms how home cooks and professional chefs organize their culinary workflows. Originally developed to address the limitations of traditional recipe storage methods, Tandoor offers comprehensive meal planning, shopping list generation, nutritional analysis, and recipe scaling capabilities. The platform supports recipe imports from over 500+ websites and provides a collaborative environment where multiple users can share and organize recipes within households or cooking groups.
This deployment combines Tandoor's Django application with PostgreSQL for robust recipe data storage and NGINX for optimized static file serving and reverse proxy functionality. PostgreSQL's advanced JSON support perfectly complements Tandoor's complex recipe data structures, including ingredients, instructions, nutritional information, and user ratings, while maintaining ACID compliance for data integrity. NGINX handles the efficient delivery of recipe images, documents, and static assets while providing a production-ready web server layer that can handle concurrent users browsing recipes and meal plans.
Home cooking enthusiasts, meal prep professionals, and families seeking organized kitchen management will find this stack invaluable for centralizing recipe collections, planning weekly meals, and generating automated shopping lists. The combination delivers enterprise-grade reliability for recipe data with the performance needed to handle large recipe collections, multiple simultaneous users, and media-heavy content like recipe photos and cooking videos.
Key Features
- Recipe import support from 500+ cooking websites including AllRecipes, Food Network, and Serious Eats with automatic ingredient parsing
- Advanced meal planning calendar with drag-and-drop recipe scheduling and automatic shopping list generation
- PostgreSQL-powered recipe scaling and nutritional calculation with precise ingredient ratio mathematics
- Multi-user recipe sharing with customizable permissions for family members and cooking groups
- NGINX-optimized recipe image and document storage with efficient caching for faster page loads
- Recipe rating and review system with PostgreSQL full-text search across ingredients and instructions
- Automated shopping list consolidation that combines ingredients across multiple planned meals
- Recipe versioning and modification tracking using PostgreSQL's transaction logging capabilities
Common Use Cases
- 1Family meal planning with shared recipe collections and coordinated shopping lists across household members
- 2Professional meal prep businesses managing client recipes, nutritional requirements, and bulk ingredient purchasing
- 3Cooking enthusiasts digitizing and organizing large physical recipe collections with searchable metadata
- 4Diet-conscious individuals tracking nutritional information and scaling recipes for specific caloric goals
- 5Cooking content creators managing recipe development workflows and sharing test recipes with beta users
- 6Restaurant R&D teams collaborating on menu development and recipe standardization processes
- 7Cooking clubs and community groups sharing seasonal recipes and organizing group meal planning events
Prerequisites
- Minimum 2GB RAM to handle PostgreSQL recipe database and NGINX concurrent connections during peak usage
- Port 8080 available for NGINX web interface access and recipe browsing
- Docker host with at least 10GB free storage for recipe images, documents, and PostgreSQL data growth
- Basic understanding of Django application management for creating superuser accounts and user administration
- NGINX reverse proxy configuration knowledge for customizing static file serving and caching policies
- PostgreSQL backup strategy familiarity to protect recipe collections and user data
For development & testing. Review security settings, change default credentials, and test thoroughly before production use. See Terms
docker-compose.yml
docker-compose.yml
1services: 2 tandoor: 3 image: vabene1111/recipes:latest4 container_name: tandoor5 environment: 6 - SECRET_KEY=${SECRET_KEY}7 - DB_ENGINE=django.db.backends.postgresql8 - POSTGRES_HOST=postgres9 - POSTGRES_PORT=543210 - POSTGRES_USER=${POSTGRES_USER}11 - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}12 - POSTGRES_DB=tandoor13 - ENABLE_SIGNUP=114 volumes: 15 - tandoor_static:/opt/recipes/staticfiles16 - tandoor_media:/opt/recipes/mediafiles17 depends_on: 18 - postgres19 networks: 20 - tandoor-network2122 nginx: 23 image: nginx:alpine24 container_name: tandoor-nginx25 volumes: 26 - tandoor_static:/static:ro27 - tandoor_media:/media:ro28 - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro29 ports: 30 - "8080:80"31 depends_on: 32 - tandoor33 networks: 34 - tandoor-network3536 postgres: 37 image: postgres:16-alpine38 container_name: tandoor-db39 environment: 40 - POSTGRES_USER=${POSTGRES_USER}41 - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}42 - POSTGRES_DB=tandoor43 volumes: 44 - postgres_data:/var/lib/postgresql/data45 networks: 46 - tandoor-network4748volumes: 49 tandoor_static: 50 tandoor_media: 51 postgres_data: 5253networks: 54 tandoor-network: 55 driver: bridge.env Template
.env
1# Tandoor2SECRET_KEY=your-secret-key-at-least-50-chars3POSTGRES_USER=tandoor4POSTGRES_PASSWORD=tandoor_passwordUsage Notes
- 1UI at http://localhost:8080
- 2Create nginx.conf for reverse proxy
- 3Create superuser via manage.py
- 4Import from various recipe sites
- 5Multiple user support
Individual Services(3 services)
Copy individual services to mix and match with your existing compose files.
tandoor
tandoor:
image: vabene1111/recipes:latest
container_name: tandoor
environment:
- SECRET_KEY=${SECRET_KEY}
- DB_ENGINE=django.db.backends.postgresql
- POSTGRES_HOST=postgres
- POSTGRES_PORT=5432
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=tandoor
- ENABLE_SIGNUP=1
volumes:
- tandoor_static:/opt/recipes/staticfiles
- tandoor_media:/opt/recipes/mediafiles
depends_on:
- postgres
networks:
- tandoor-network
nginx
nginx:
image: nginx:alpine
container_name: tandoor-nginx
volumes:
- tandoor_static:/static:ro
- tandoor_media:/media:ro
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
ports:
- "8080:80"
depends_on:
- tandoor
networks:
- tandoor-network
postgres
postgres:
image: postgres:16-alpine
container_name: tandoor-db
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=tandoor
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- tandoor-network
Quick Start
terminal
1# 1. Create the compose file2cat > docker-compose.yml << 'EOF'3services:4 tandoor:5 image: vabene1111/recipes:latest6 container_name: tandoor7 environment:8 - SECRET_KEY=${SECRET_KEY}9 - DB_ENGINE=django.db.backends.postgresql10 - POSTGRES_HOST=postgres11 - POSTGRES_PORT=543212 - POSTGRES_USER=${POSTGRES_USER}13 - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}14 - POSTGRES_DB=tandoor15 - ENABLE_SIGNUP=116 volumes:17 - tandoor_static:/opt/recipes/staticfiles18 - tandoor_media:/opt/recipes/mediafiles19 depends_on:20 - postgres21 networks:22 - tandoor-network2324 nginx:25 image: nginx:alpine26 container_name: tandoor-nginx27 volumes:28 - tandoor_static:/static:ro29 - tandoor_media:/media:ro30 - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro31 ports:32 - "8080:80"33 depends_on:34 - tandoor35 networks:36 - tandoor-network3738 postgres:39 image: postgres:16-alpine40 container_name: tandoor-db41 environment:42 - POSTGRES_USER=${POSTGRES_USER}43 - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}44 - POSTGRES_DB=tandoor45 volumes:46 - postgres_data:/var/lib/postgresql/data47 networks:48 - tandoor-network4950volumes:51 tandoor_static:52 tandoor_media:53 postgres_data:5455networks:56 tandoor-network:57 driver: bridge58EOF5960# 2. Create the .env file61cat > .env << 'EOF'62# Tandoor63SECRET_KEY=your-secret-key-at-least-50-chars64POSTGRES_USER=tandoor65POSTGRES_PASSWORD=tandoor_password66EOF6768# 3. Start the services69docker compose up -d7071# 4. View logs72docker compose logs -fOne-Liner
Run this command to download and set up the recipe in one step:
terminal
1curl -fsSL https://docker.recipes/api/recipes/tandoor-recipes/run | bashTroubleshooting
- Tandoor static files not loading: Verify NGINX volume mounts for tandoor_static and tandoor_media are properly configured in nginx.conf
- Recipe import failing from websites: Check Tandoor container logs for SSL certificate issues and ensure outbound HTTPS connectivity
- PostgreSQL connection refused errors: Confirm POSTGRES_HOST environment variable matches the postgres service name in docker-compose
- NGINX 502 Bad Gateway when accessing recipes: Ensure Tandoor container is fully initialized by checking Django migration completion in logs
- Recipe images not displaying: Verify tandoor_media volume permissions and check that NGINX has read access to media files
- Slow recipe search performance: Monitor PostgreSQL container memory usage and consider increasing shared_buffers for better full-text search performance
Community Notes
Loading...
Loading notes...
Download Recipe Kit
Get all files in a ready-to-deploy package
Includes docker-compose.yml, .env template, README, and license
Components
tandoorpostgresnginx
Tags
#tandoor#recipes#meal-planning#cooking#food
Category
Home Lab & Self-HostingAd Space
Shortcuts: C CopyF FavoriteD Download