version: '3'

services:
  laravel-app:
    env_file: .env
    build:
      context: .
      dockerfile: Dockerfile
    container_name: ${CONTAINER_NAME:-pcag-laravel}
    volumes:
      - ${PATH_TO_SITE}:/var/www/html
      - ${PATH_TO_STATIC}:/static
      - ./nginx/default.conf:/etc/nginx/sites-available/default
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
    environment:
      TZ: UTC
      PUID: ${UID:-1000}
      PGID: ${GID:-1000}
      REDIS_HOST: redis
      DB_HOST: db
      DB_DATABASE: ${LIVE_DB_DATABASE}
      DB_USERNAME: ${LIVE_DB_USERNAME}
      DB_PASSWORD: ${LIVE_DB_PASSWORD}
      LARAVEL_QUEUE_ENABLED: true
      LARAVEL_QUEUE_OPTIONS: --timeout=60 --tries=3 redis
      LARAVEL_SCHEDULE_ENABLED: true
      PHP_OPEN_BASEDIR: "/var/www/html:/static"
    ports:
      - "8776:80"
    networks:
      - proxy
      - default
    labels:
      - "traefik.enable=true"
      - "traefik.docker.network=proxy"
      # Entry Point for https
      - "traefik.http.routers.podcastartgen-secure.entrypoints=websecure"
      - "traefik.http.routers.podcastartgen-secure.rule=Host(`new.noagendaartgenerator.com`)"
      - "traefik.http.routers.podcastartgen-secure.service=podcastartgen-service"
      - "traefik.http.services.podcastartgen-service.loadbalancer.server.port=80"
    links:
      - db
      - redis
      - static
  static:
    image: nginx:alpine
    volumes:
      - ${PATH_TO_STATIC}:/usr/share/nginx/html
    environment:
      TZ: UTC
      PUID: ${UID:-1000}
      PGID: ${GID:-1000}
    ports:
      - "8777:80"
    networks:
      - proxy
      - default
    labels:
      - "traefik.enable=true"
      - "traefik.docker.network=proxy"
      # Entry Point for https
      - "traefik.http.routers.podcastartstatic-secure.entrypoints=websecure"
      - "traefik.http.routers.podcastartstatic-secure.rule=Host(`static.noagendaartgenerator.com`)"
      - "traefik.http.routers.podcastartstatic-secure.service=podcastartstatic-service"
      - "traefik.http.services.podcastartstatic-service.loadbalancer.server.port=80"
  db:
    image: mariadb:latest
    env_file: .env
    environment:
      TZ: UTC
      MARIADB_ROOT_PASSWORD: ${LIVE_DB_ROOT_PASSWORD}
      MARIADB_USER: ${LIVE_DB_USERNAME}
      MARIADB_DATABASE: ${LIVE_DB_DATABASE}
      MARIADB_PASSWORD: ${LIVE_DB_PASSWORD}
    volumes:
      - "./db/data:/var/lib/mysql"
      - "./db/dump:/docker-entrypoint-initdb.d"
    networks:
      - proxy
      - default
    ports:
      - "51533:3306" # Adjust the external port if needed
    labels:
      - "traefik.enable=true"
      - "traefik.docker.network=proxy"
      - "traefik.http.routers.podcastartdb-secure.entrypoints=websecure"
      - "traefik.http.routers.podcastartdb-secure.rule=Host(`podcastartdb.noagenda.dev`)"
      - "traefik.http.routers.podcastartdb-secure.service=podcastartdb-service"
      - "traefik.http.services.podcastartdb-service.loadbalancer.server.port=3306"
  redis:
    image: redis:alpine
    command: redis-server --appendonly yes --requirepass ${REDIS_SEC_PASSWORD}
    ports:
      - "56379:6379"
    volumes:
      - ./redis/redis.conf:/usr/local/etc/redis/redis.conf
      - ./redis/redis-data:/var/lib/redis
    environment:
      - REDIS_REPLICATION_MODE=master
    labels:
      - "traefik.enable=true"
      - "traefik.docker.network=proxy"
      - "traefik.http.routers.paredis-secure.entrypoints=websecure"
      - "traefik.http.routers.paredis-secure.rule=Host(`paredis.noagenda.dev`)"
      - "traefik.http.routers.paredis-secure.service=paredis-service"
      - "traefik.http.services.paredis-service.loadbalancer.server.port=6379"
  npm:
    image: node:latest
    working_dir: /var/www/html
    entrypoint: ["npm"]
    volumes:
      - ./site:/var/www/html
networks:
  proxy:
    external: true