services:
  frontend:
    container_name: ca-lose-frontend
    hostname: lose-verkaufen
    build: ./frontend
    depends_on:
      - backend
    networks:
      ca-lose-internal:
        ipv4_address: 172.25.0.2
    restart: unless-stopped

  backend:
    container_name: ca-lose-backend
    hostname: backend
    build: ./backend
    environment:
      NODE_ENV: production
      DB_HOST: ca-lose-mysql
      DB_USER: root
      DB_PASSWORD: ${DB_PASSWORD}
      DB_NAME: ca_lose
    depends_on:
      - database
    networks:
      ca-lose-internal:
        ipv4_address: 172.25.0.3
    restart: unless-stopped

  database:
    container_name: ca-lose-mysql
    hostname: database
    image: mysql:8.0
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
      MYSQL_DATABASE: ca_lose
      TZ: Europe/Berlin
    volumes:
      - ../docker/volumes/ca-lose_mysql:/var/lib/mysql
      - ./mysql-timezone.cnf:/etc/mysql/conf.d/timezone.cnf:ro
    networks:
      ca-lose-internal:
        ipv4_address: 172.25.0.4

  # DNS Server für Hostname-Auflösung innerhalb des VPN
  dnsmasq:
    container_name: ca-lose-dns
    image: andyshinn/dnsmasq:latest
    restart: unless-stopped
    cap_add:
      - NET_ADMIN
    command: >
      --no-daemon
      --log-queries
      --address=/lose-verkaufen/172.25.0.2
      --address=/frontend/172.25.0.2
      --address=/backend/172.25.0.3
      --address=/database/172.25.0.4
      --address=/wireguard/172.25.0.6
    networks:
      ca-lose-internal:
        ipv4_address: 172.25.0.5

  # WireGuard VPN mit Web-UI (wg-easy)
  wireguard:
    build: ./wg-easy-ca-lose
    container_name: ca-lose-wireguard
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    environment:
      LANG: de
      WG_HOST: dus3.the1s.de
      WG_PORT: "51830"
      WG_DEFAULT_DNS: "172.25.0.5"
      WG_ALLOWED_IPS: 172.25.0.0/24
      PORT: "80" # Web-UI Port
      PASSWORD_HASH: ${WIREGUARD_PASSWORD_HASH}
    volumes:
      - ../docker/volumes/ca-lose-wireguard:/etc/wireguard
      - /lib/modules:/lib/modules:ro
    ports:
      - "51830:51830/udp"
      - "51831:80/tcp" # only for short configuration access - remove in production - external: 51831 internal: 80
    sysctls:
      - net.ipv4.ip_forward=1
      - net.ipv4.conf.all.src_valid_mark=1
    restart: unless-stopped
    depends_on:
      - dnsmasq
    networks:
      ca-lose-internal:
        ipv4_address: 172.25.0.6

networks:
  ca-lose-internal:
    driver: bridge
    ipam:
      config:
        - subnet: 172.25.0.0/24
          gateway: 172.25.0.1
