Tandoor Recipes
I stumbled across Tandoor Recipes recently and I think it would be really cool to have our own shopping list and digital recipe application. I like the idea of it tracking when we cook a recipe so we can tell if we've fallen into a rut of just a few recipes, and what we might not have made in some time.
Create Virtual Machine
Steps performed on HV-03 via Windows Admin Center
- Navigate to
Virtual Machines - I click on
AddthenNew- Name:
TANDOOR-01 - Generation:
2 (Recommended) - Virtual Processors:
2 - Memory:
2GB - Storage Add:
50GB - I click on
Create
- Name:
- I select
TANDOOR-01 - I click on
Settings- I navigate to
DiskAdd Disk- I select
Use an existing virtual hard disk or ISO image fileand choosec:\Images\Debian\debian=12.1.0-amd64-netinst.iso - I click
Save disk settings
- I navigate to
Boot OrderDVDHard DiskNetwork Adapter- I click
Save boot order
- Navigate to
Security- I check
Enable Secure Boot - Template:
Microsoft UEFI Certificate Authority - I click
Save security settings
- I check
- I click
Close
- I navigate to
- I click on
Powerand thenStart
Install Operating System
Steps performed on TANDOOR-01 console
- I work my way through the Debian installation wizard
- When the installation completes I reboot the system
Configure Operating System
Configure Network
Steps performed on TANDOOR-01 console
nano /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug eth0
iface eth0 inet static
address 10.10.10.XXX
gateway 10.10.10.254
netmask 255.255.255.0
- I save the file
interfaces
Steps performed on DC-02 via Windows Admin Center
- I navigate to
DNS - I select
domain.local - I click
Create a new DNS record- DNS record type:
Host (A) - Record Name:
TANDOOR - FQDN:
TANDOOR.domain.local - IP Address:
10.10.10.XXX - Time to live:
3600 - I click
Create
- DNS record type:
Configure Sudo
Steps performed on TANDOOR-01
apt install sudo/sbin/adduser david sudoAdding user 'david' to group 'sudo' ...Done.
Configure SSH Key
Steps performed on desktop via Windows Terminal
ssh-keygen -t ed25519Move-Item -Path c:\Users\david\filename* -Destination c:\Users\david\.ssh -Force- I open Windows Terminal
Settings - I open the
JSONfile and add the following:
{
"colorScheme": "Ubuntu-ColorScheme",
"commandline": "ssh -i \"~/.ssh/tandoor-01\" [email protected]",
"experimental.retroTerminalEffect": false,
"font":
{
"face": "Cascadia Code"
},
"guid": "{0caa0dad-35be-5f56-a8ff-XXXXXXXXXXXX}",
"hidden": false,
"name": "TANDOOR-01",
"tabTitle": "TANDOOR-01"
},
- I verify the
GUIDis unique and save theJSONfile
Configure SSH
Steps performed on TANDOOR-01
mkdir /home/david/.sshnano /home/david/.ssh/authorized_keys- I paste in the public key and save
authorized_keys chmod 600 /home/david/.ssh/authorized_keyssudo nano /etc/ssh/sshd_configPermitRootLogin noPubkeyAuthentication yesPubkeyAcceptedKeyTypes ssh-ed25519PasswordAuthentication noAuthorizedKeysFile /home/david/.ssh/authorized_keys
- I save the file
sshd_config sudo sshd -tsudo systemctl restart ssh
Configure UFW
Steps performed on TANDOOR-01
sudo apt install ufwsudo ufw allow 22sudo ufw enable
Install Fail2Ban
Steps performed on TANDOOR-01
sudo apt install fail2bansudo nano /etc/fail2ban/jail.local
[DEFAULT]
bantime = 100m
findtime = 5m
maxretry = 5
ignoreip = 10.10.10.XXX
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
- I save the
jail.localfile sudo systemctl enable fail2bansudo systemctl start fail2ban
Install Tandoor Recipes' Dependencies
Steps taken on TANDOOR-01
sudo apt install dockersudo apt install docker-compose
Install Tandoor
Steps performed on TANDOOR-01
sudo mkdir /appssudo mkdir /apps/Tandoorcd /apps/Tandoorsudo nano docker-compose.yml
version: "3"
services:
db_recipes:
restart: always
image: postgres:15-alpine
volumes:
- ./postgresql:/var/lib/postgresql/data
env_file:
- ./.env
web_recipes:
restart: always
image: vabene1111/recipes
env_file:
- ./.env
volumes:
- staticfiles:/opt/recipes/staticfiles
# Do not make this a bind mount, see https://docs.tandoor.dev/install/docker/#volumes-vs-bind-mounts
- nginx_config:/opt/recipes/nginx/conf.d
- ./mediafiles:/opt/recipes/mediafiles
depends_on:
- db_recipes
nginx_recipes:
image: nginx:mainline-alpine
restart: always
ports:
- 80:80
env_file:
- ./.env
depends_on:
- web_recipes
volumes:
# Do not make this a bind mount, see https://docs.tandoor.dev/install/docker/#volumes-vs-bind-mounts
- nginx_config:/etc/nginx/conf.d:ro
- staticfiles:/static:ro
- ./mediafiles:/media:ro
volumes:
nginx_config:
staticfiles:
- I save the
docker-compose.ymlfile wget https://raw.githubusercontent.com/vabene1111/recipes/develop/.env.template -O .envsudo nano .env- Set
SECRET_KEY= - Set
TIMEZONE=America/Detroit - Set
POSTGRES_PASSWORD= - Set
EMAIL_HOST= - Set
EMAIL_PORT=465 - Set
EMAIL_HOST_USER= - Set
EMAIL_HOST_PASSWORD= - Set
DEFAULT_FROM_EMAIL=
- Set
- I save the
.envfile sudo docker-compose pullsudo docker-compose up -d
When I test the website at http://tandoor.domain.local it loads successfully. I quickly create an administrator account to match up with Authentik Security so I should be able to get them linked together easily in the future. I don't have much time to tackle anything else today so this is where I will leave things until tomorrow.