RSS Amplifier

cleberg.net · Jan 23, 2025

Self-Hosting Guide: Tandoor

0
Sign in to vote or save

Christian Cleberg <hello@cleberg.net> · cleberg.net

· Self-hosting Tandoor, an open-source recipe manager.

#linux #self-hosting

1. Overview

Tandoor is a smart recipe manager web application that allows you to:

  • Store your recipes
  • Search for recipes and ingredients
  • Share recipes with a link and permission system
  • Put recipes and ingredients into a shopping list
  • Plan your meals with a built-in calendar
  • Calculate nutritional values
  • Import recipes from websites and apps
  • Load existing recipes

2. Installation

The Tandoor docs contain all of the relevant information needed to get start with the self-hosting process.

This tutorial will use Docker Compose and Nginx on Ubuntu 24.04.1.

2.1. Docker Compose

On your machine, create a directory for Tandoor and copy down the .env and docker-compose.yml templates:

mkdir ~/tandoor cd ~/tandoor wget
https://raw.githubusercontent.com/vabene1111/recipes/develop/.env.template -O .env wget
# Plain version of docker-compose.yml
https://raw.githubusercontent.com/vabene1111/recipes/develop/docs/install/docker/plain/docker-compose.yml

Within these files, customize as needed.

  • .env
    • Add a SECRET_KEY
    • Define the ALLOWED_HOSTS
    • Set the POSTGRES_PASSWORD
  • docker-compose.yml
    • Update the ports since Nginx on my host is already using port 80 (e.g. 8087:80)

Once you've updated and saved the files, you can launch the container.

sudo docker compose up -d

The application is now available at localhost:8087 or ip_address:8087 if accessing via a different machine. If accessing via a different machine, remember to allow port 8087 through any existing firewalls.

2.2. Nginx Reverse Proxy

Now that Tandoor is available locally, let's connect it to the Nginx web server running on the host machine.

Note: I use Nginx configuration files within the conf.d directory, but you may need to use the sites-available directory, depending on your installation of Nginx.

cd /etc/nginx/conf.d/
sudo nano recipes.conf

Within this file, define your website configuration. The example below is my default configuration and utilizes a wildcard certificate for *.example.com that covers all of my subdomains. If you don't have a wildcard certificate, you will need to generate an SSL certificate for your domain.

server {
        listen                  443 ssl;
        listen                  [::]:443 ssl;
        http2                   on;
        server_name             recipes.example.com;
        # SSL
        ssl_certificate         /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key     /etc/letsencrypt/live/example.com/privkey.pem;
        ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
        # reverse proxy
        location / {
                proxy_pass         http://localhost:8087/;
                proxy_set_header   Host $http_host;
                proxy_set_header   X-Forwarded-Proto $scheme;
                proxy_redirect http://127.0.0.1:8080 https://recipes.example.com;
        }
        location /media/ {
                root   /media/;
                index  index.html index.htm;
        }
}
# HTTP redirect
server {
        listen      80;
        listen      [::]:80;
        server_name recipes.example.com;
        include     custom.d/letsencrypt.conf;
        if ($host ~ ^[^.]+\.example\.com$) {
                return 301 https://$host$request_uri;
        }
}

Save and close the configuration file and then restart the web server.

sudo systemctl restart nginx.service

The app is now available on your custom domain!

2.3. Screenshots

Tandoor login page.
Figure 1: Login
Tandoor options to search for recipes.
Figure 2: Recipes
Calendar view to define meal plans.
Figure 3: Meal Plan
Page to create or search for shopping lists.
Figure 4: Shopping Lists
Page to create a visual-style cookbook.
Figure 5: Cook Book
Options to import recipes from other pages and auto-populate images, keywords, steps, and a description.
Figure 6: Import
Django administration options for the web app.
Figure 7: Administration Panel

...or, comment on this post on Bubbles!

Read the original on cleberg.net

Comments

Nothing yet. Say the first thing.

    Sign in to join the conversation.