version: '3'
services:
  wireguard-webadmin:
    container_name: wireguard-webadmin
    restart: unless-stopped
    build:
      context: .
    environment:
      - SERVER_ADDRESS=127.0.0.1
      - DEBUG_MODE=True
      - COMPOSE_VERSION=02r
      - TZ=${TIMEZONE}
    volumes:
      - wireguard:/etc/wireguard
      - static_volume:/app_static_files/
      - .:/app
      - dnsmasq_conf:/etc/dnsmasq
      - app_secrets:/app_secrets/
      - rrd_data:/rrd_data/
    ports:
      # Do not directly expose the Django port to the internet, use some kind of reverse proxy with SSL.
      - "127.0.0.1:8000:8000"
      # Warning: Docker will have a hard time handling large amount of ports. Expose only the ports that you need.
      # Ports for multiple WireGuard instances. (Probably, you just need one)
      - "51820-51839:51820-51839/udp"
      # Ports for port forwarding rules. Add your own ports here if you need them.
      - "8080-8089:8080-8089/tcp"
      
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    sysctls:
      - net.ipv4.conf.all.src_valid_mark=1
      - net.ipv4.ip_forward=1
    command: /bin/bash /app/init.sh

  wireguard-webadmin-cron:
    container_name: wireguard-webadmin-cron
    restart: unless-stopped
    build:
      context: ./cron
      dockerfile: Dockerfile-cron
    environment:
      - TZ=${TIMEZONE}
    depends_on:
      - wireguard-webadmin

  wireguard-webadmin-rrdtool:
    container_name: wireguard-webadmin-rrdtool
    restart: unless-stopped
    build:
      context: ./containers/rrdtool
      dockerfile: Dockerfile-rrdtool
    volumes:
      - app_secrets:/app_secrets/
      - rrd_data:/rrd_data/
    environment:
      - TZ=${TIMEZONE}
    depends_on:
      - wireguard-webadmin

  wireguard-webadmin-dns:
    container_name: wireguard-webadmin-dns
    restart: unless-stopped
    build:
      context: ./containers/dnsmasq
      dockerfile: Dockerfile-dnsmasq
    environment:
      - TZ=${TIMEZONE}
    volumes:
      - dnsmasq_conf:/etc/dnsmasq/

volumes:
  static_volume: 
  wireguard:
  dnsmasq_conf:
  app_secrets:
  rrd_data: