version: '3.8' networks: proxy: external: true turftracker: driver: bridge services: frontend: build: context: ./frontend dockerfile: Dockerfile environment: - REACT_APP_API_URL=https://turftracker.kaspers.us/api volumes: - ./frontend:/app - /app/node_modules depends_on: - backend networks: - proxy - turftracker labels: - "traefik.enable=true" - "traefik.http.routers.turftracker-frontend.rule=Host(`turftracker.kaspers.us`)" - "traefik.http.routers.turftracker-frontend.entrypoints=websecure" - "traefik.http.routers.turftracker-frontend.tls.certresolver=letsencrypt" - "traefik.http.services.turftracker-frontend.loadbalancer.server.port=3000" - "traefik.docker.network=proxy" - "traefik.constraint=proxy-public" restart: unless-stopped backend: build: context: ./backend dockerfile: Dockerfile environment: - NODE_ENV=development - DB_HOST=db - DB_PORT=5432 - DB_NAME=${DB_NAME:-turftracker} - DB_USER=${DB_USER:-turftracker} - DB_PASSWORD=${DB_PASSWORD:-password123} - JWT_SECRET=${JWT_SECRET:-dev-secret-key-change-in-production-12345} - AUTHENTIK_CLIENT_ID=${AUTHENTIK_CLIENT_ID:-} - AUTHENTIK_CLIENT_SECRET=${AUTHENTIK_CLIENT_SECRET:-} - AUTHENTIK_BASE_URL=${AUTHENTIK_BASE_URL:-} - AUTHENTIK_CALLBACK_URL=${AUTHENTIK_CALLBACK_URL:-https://turftracker.kaspers.us/api/auth/authentik/callback} - WEATHER_API_KEY=${WEATHER_API_KEY:-} - FRONTEND_URL=https://turftracker.kaspers.us volumes: - ./backend:/app - /app/node_modules depends_on: - db networks: - proxy - turftracker labels: - "traefik.enable=true" - "traefik.http.routers.turftracker-backend.rule=Host(`turftracker.kaspers.us`) && PathPrefix(`/api`)" - "traefik.http.routers.turftracker-backend.entrypoints=websecure" - "traefik.http.routers.turftracker-backend.tls.certresolver=letsencrypt" - "traefik.http.services.turftracker-backend.loadbalancer.server.port=5000" - "traefik.docker.network=proxy" restart: unless-stopped db: image: postgres:15-alpine environment: - POSTGRES_USER=${DB_USER:-turftracker} - POSTGRES_PASSWORD=${DB_PASSWORD:-password123} - POSTGRES_DB=${DB_NAME:-turftracker} volumes: - postgres_data:/var/lib/postgresql/data - ./database/init.sql:/docker-entrypoint-initdb.d/init.sql networks: - turftracker restart: unless-stopped # Database should not be exposed to proxy network for security volumes: postgres_data: