Dokploy

Tandoor Recipes

Tandoor Recipes is a self-hosted recipe manager, meal planner, and shopping list application.

Tandoor Recipes logo

Configuration

services:
  tandoor-db:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: ${POSTGRES_DB}
    volumes:
      - tandoor_db_data:/var/lib/postgresql/data

  tandoor-recipes:
    image: vabene1111/recipes:2.6.11
    restart: unless-stopped
    depends_on:
      - tandoor-db
    environment:
      SECRET_KEY: ${SECRET_KEY}
      TANDOOR_PORT: "8080"
      DB_ENGINE: django.db.backends.postgresql
      POSTGRES_HOST: tandoor-db
      POSTGRES_PORT: 5432
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: ${POSTGRES_DB}
      ALLOWED_HOSTS: ${ALLOWED_HOSTS}
      CSRF_TRUSTED_ORIGINS: ${CSRF_TRUSTED_ORIGINS}
    volumes:
      - tandoor_staticfiles:/opt/recipes/staticfiles
      - tandoor_mediafiles:/opt/recipes/mediafiles
    ports:
      - "8080"

volumes:
  tandoor_db_data:
  tandoor_staticfiles:
  tandoor_mediafiles:
[variables]
main_domain = "${domain}"
secret_key = "${password:64}"
postgres_password = "${password:32}"

[config]
mounts = []

[[config.domains]]
serviceName = "tandoor-recipes"
port = 8080
host = "${main_domain}"

[config.env]
SECRET_KEY = "${secret_key}"
ALLOWED_HOSTS = "${main_domain}"
CSRF_TRUSTED_ORIGINS = "https://${main_domain}"
POSTGRES_PASSWORD = "${postgres_password}"
POSTGRES_USER = "tandoor"
POSTGRES_DB = "tandoor"

Base64

To import this template in Dokploy: create a Compose service → AdvancedBase64 import and paste the content below:

ewogICJjb21wb3NlIjogInNlcnZpY2VzOlxuICB0YW5kb29yLWRiOlxuICAgIGltYWdlOiBwb3N0Z3JlczoxNi1hbHBpbmVcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIGVudmlyb25tZW50OlxuICAgICAgUE9TVEdSRVNfVVNFUjogJHtQT1NUR1JFU19VU0VSfVxuICAgICAgUE9TVEdSRVNfUEFTU1dPUkQ6ICR7UE9TVEdSRVNfUEFTU1dPUkR9XG4gICAgICBQT1NUR1JFU19EQjogJHtQT1NUR1JFU19EQn1cbiAgICB2b2x1bWVzOlxuICAgICAgLSB0YW5kb29yX2RiX2RhdGE6L3Zhci9saWIvcG9zdGdyZXNxbC9kYXRhXG5cbiAgdGFuZG9vci1yZWNpcGVzOlxuICAgIGltYWdlOiB2YWJlbmUxMTExL3JlY2lwZXM6Mi42LjExXG4gICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWRcbiAgICBkZXBlbmRzX29uOlxuICAgICAgLSB0YW5kb29yLWRiXG4gICAgZW52aXJvbm1lbnQ6XG4gICAgICBTRUNSRVRfS0VZOiAke1NFQ1JFVF9LRVl9XG4gICAgICBUQU5ET09SX1BPUlQ6IFwiODA4MFwiXG4gICAgICBEQl9FTkdJTkU6IGRqYW5nby5kYi5iYWNrZW5kcy5wb3N0Z3Jlc3FsXG4gICAgICBQT1NUR1JFU19IT1NUOiB0YW5kb29yLWRiXG4gICAgICBQT1NUR1JFU19QT1JUOiA1NDMyXG4gICAgICBQT1NUR1JFU19VU0VSOiAke1BPU1RHUkVTX1VTRVJ9XG4gICAgICBQT1NUR1JFU19QQVNTV09SRDogJHtQT1NUR1JFU19QQVNTV09SRH1cbiAgICAgIFBPU1RHUkVTX0RCOiAke1BPU1RHUkVTX0RCfVxuICAgICAgQUxMT1dFRF9IT1NUUzogJHtBTExPV0VEX0hPU1RTfVxuICAgICAgQ1NSRl9UUlVTVEVEX09SSUdJTlM6ICR7Q1NSRl9UUlVTVEVEX09SSUdJTlN9XG4gICAgdm9sdW1lczpcbiAgICAgIC0gdGFuZG9vcl9zdGF0aWNmaWxlczovb3B0L3JlY2lwZXMvc3RhdGljZmlsZXNcbiAgICAgIC0gdGFuZG9vcl9tZWRpYWZpbGVzOi9vcHQvcmVjaXBlcy9tZWRpYWZpbGVzXG4gICAgcG9ydHM6XG4gICAgICAtIFwiODA4MFwiXG5cbnZvbHVtZXM6XG4gIHRhbmRvb3JfZGJfZGF0YTpcbiAgdGFuZG9vcl9zdGF0aWNmaWxlczpcbiAgdGFuZG9vcl9tZWRpYWZpbGVzOlxuIiwKICAiY29uZmlnIjogIlt2YXJpYWJsZXNdXG5tYWluX2RvbWFpbiA9IFwiJHtkb21haW59XCJcbnNlY3JldF9rZXkgPSBcIiR7cGFzc3dvcmQ6NjR9XCJcbnBvc3RncmVzX3Bhc3N3b3JkID0gXCIke3Bhc3N3b3JkOjMyfVwiXG5cbltjb25maWddXG5tb3VudHMgPSBbXVxuXG5bW2NvbmZpZy5kb21haW5zXV1cbnNlcnZpY2VOYW1lID0gXCJ0YW5kb29yLXJlY2lwZXNcIlxucG9ydCA9IDgwODBcbmhvc3QgPSBcIiR7bWFpbl9kb21haW59XCJcblxuW2NvbmZpZy5lbnZdXG5TRUNSRVRfS0VZID0gXCIke3NlY3JldF9rZXl9XCJcbkFMTE9XRURfSE9TVFMgPSBcIiR7bWFpbl9kb21haW59XCJcbkNTUkZfVFJVU1RFRF9PUklHSU5TID0gXCJodHRwczovLyR7bWFpbl9kb21haW59XCJcblBPU1RHUkVTX1BBU1NXT1JEID0gXCIke3Bvc3RncmVzX3Bhc3N3b3JkfVwiXG5QT1NUR1JFU19VU0VSID0gXCJ0YW5kb29yXCJcblBPU1RHUkVTX0RCID0gXCJ0YW5kb29yXCJcbiIKfQ==

Tags

recipes, meal-planning, self-hosted


Version: 2.6.11

On this page