!!! danger
        Please refer to the [official documentation](https://github.com/linuxserver/docker-swag#usage) for the container setup. This example shows just one setup that may or may not differ from yours in significant ways. This tutorial does not cover security measures, backups, and many other things that you might want to consider.

## Prerequisites

- You have a newly spun-up Ubuntu server with docker (pre-)installed.
- At least one `mydomain.com` and one `mysubdomain.mydomain.com` are pointing to the server's IP. (This tutorial does not cover subfolder installation.)
- You have an ssh terminal session open.

## Installation

### Download and edit Tandoor configuration

```
cd /opt
mkdir recipes
cd recipes
wget https://raw.githubusercontent.com/vabene1111/recipes/develop/.env.template -O .env
base64 /dev/urandom | head -c50
``` 
Copy the response from that last command and paste the key into the `.env` file:
```
nano .env
```
You'll also need to enter a Postgres password into the `.env` file. Then, save the file and exit the editor.

### Install and configure Docker Compose

In keeping with [these instructions](https://docs.linuxserver.io/general/docker-compose):
```
cd /opt
curl -L --fail https://raw.githubusercontent.com/linuxserver/docker-docker-compose/master/run.sh -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
```

Next, create and edit the docker compose file.

```
nano docker-compose.yml
```

Paste the following and adjust your domains, subdomains and time zone.

```
---
version: "2.1"
services:
  swag:
    image: ghcr.io/linuxserver/swag
    container_name: swag
    cap_add:
      - NET_ADMIN
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Berlin # <---- EDIT THIS <----  <---- 
      - URL=mydomain.com # <---- EDIT THIS <----  <---- 
      - SUBDOMAINS=mysubdomain,myothersubdomain # <---- EDIT THIS <----  <---- 
      - EXTRA_DOMAINS=myotherdomain.com # <---- EDIT THIS <----  <---- 
      - VALIDATION=http
    volumes:
      - ./swag:/config
      - ./recipes/media:/media
    ports:
      - 443:443
      - 80:80
    restart: unless-stopped

  db_recipes:
    restart: always
    container_name: db_recipes
    image: postgres:15-alpine
    volumes:
      - ./recipes/db:/var/lib/postgresql/data
    env_file:
      - ./recipes/.env

  recipes:
    image: vabene1111/recipes
    container_name: recipes
    restart: unless-stopped
    env_file:
      - ./recipes/.env
    environment:
      - UID=1000
      - GID=1000
      - TZ=Europe/Berlin # <---- EDIT THIS  <----  <---- 
    volumes:
      - ./recipes/static:/opt/recipes/staticfiles
      - ./recipes/media:/opt/recipes/mediafiles
    depends_on:
      - db_recipes
```

Save and exit.

### Create containers and configure swag reverse proxy

```
docker-compose up -d
```

```
cd /opt/swag/nginx/proxy-confs
cp recipes.subdomain.conf.sample recipes.subdomain.conf
nano recipes.subdomain.conf
```

Change the line `server_name recipes.*;` to `server_name mysubdomain.*;`, save and exit.

### Finalize

```
cd /opt
docker restart swag recipes
```

Go to `https://mysubdomain.mydomain.com`. (If you get a "502 Bad Gateway" error, be patient. It might take a short while until it's functional.)