# Piped - YouTube frontend
# Port: 8080
# Privacy-respecting YouTube

services:
  piped-frontend:
    image: 1337kavin/piped-frontend:latest
    restart: unless-stopped
    depends_on:
      - piped
    environment:
      BACKEND_HOSTNAME: api.vp.vish.gg
      HTTP_MODE: https
    container_name: piped-frontend
  piped-proxy:
    image: 1337kavin/piped-proxy:latest
    restart: unless-stopped
    environment:
      - UDS=1
    volumes:
      - piped-proxy:/app/socket
    container_name: piped-proxy
  piped:
    image: 1337kavin/piped:latest
    restart: unless-stopped
    volumes:
      - ./config/config.properties:/app/config.properties:ro
    depends_on:
      - postgres
    container_name: piped-backend
  bg-helper:
    image: 1337kavin/bg-helper-server:latest
    restart: unless-stopped
    container_name: piped-bg-helper
  nginx:
    image: nginx:mainline-alpine
    restart: unless-stopped
    ports:
      - "8080:80"
    volumes:
      - ./config/nginx.conf:/etc/nginx/nginx.conf:ro
      - ./config/pipedapi.conf:/etc/nginx/conf.d/pipedapi.conf:ro
      - ./config/pipedproxy.conf:/etc/nginx/conf.d/pipedproxy.conf:ro
      - ./config/pipedfrontend.conf:/etc/nginx/conf.d/pipedfrontend.conf:ro
      - ./config/ytproxy.conf:/etc/nginx/snippets/ytproxy.conf:ro
      - piped-proxy:/var/run/ytproxy
    container_name: nginx
    depends_on:
      - piped
      - piped-proxy
      - piped-frontend
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.piped.rule=Host(`FRONTEND_HOSTNAME`, `BACKEND_HOSTNAME`, `PROXY_HOSTNAME`)"
      - "traefik.http.routers.piped.entrypoints=websecure"
      - "traefik.http.services.piped.loadbalancer.server.port=8080"
  postgres:
    image: pgautoupgrade/pgautoupgrade:16-alpine
    restart: unless-stopped
    volumes:
      - ./data/db:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=piped
      - POSTGRES_USER=piped
      - POSTGRES_PASSWORD="REDACTED_PASSWORD"
    container_name: postgres
  watchtower:
    image: containrrr/watchtower
    restart: unless-stopped
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /etc/timezone:/etc/timezone:ro
    environment:
      - WATCHTOWER_CLEANUP=true
      - WATCHTOWER_INCLUDE_RESTARTING=true
    container_name: watchtower
    command: piped-frontend piped-backend piped-proxy piped-bg-helper varnish nginx postgres watchtower
volumes:
  piped-proxy: null
