version: '3.8' services: db: image: postgres:15-alpine restart: unless-stopped ports: - "5432:5432" environment: - POSTGRES_USER=${DB_USER:-turftracker} - POSTGRES_PASSWORD=${DB_PASSWORD:-password123} - POSTGRES_DB=${DB_NAME:-turftracker} volumes: - postgres_data_dev:/var/lib/postgresql/data - ./database/init.sql:/docker-entrypoint-initdb.d/init.sql healthcheck: test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-turftracker} -d ${DB_NAME:-turftracker} -h 127.0.0.1 -p 5432"] interval: 5s timeout: 5s retries: 20 migrations: image: flyway/flyway:9 restart: "no" depends_on: db: condition: service_healthy environment: - FLYWAY_URL=jdbc:postgresql://db:5432/${DB_NAME:-turftracker} - FLYWAY_USER=${DB_USER:-turftracker} - FLYWAY_PASSWORD=${DB_PASSWORD:-password123} - FLYWAY_LOCATIONS=filesystem:/migrations - FLYWAY_BASELINE_ON_MIGRATE=true command: migrate volumes: - ./database/migrations:/migrations:ro backend: build: context: ./backend args: NODE_ENV: development command: ./scripts/docker-dev-entry.sh restart: unless-stopped 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} - WEATHER_API_KEY=${WEATHER_API_KEY:-} - AUTHENTIK_CLIENT_ID=${AUTHENTIK_CLIENT_ID:-} - AUTHENTIK_CLIENT_SECRET=${AUTHENTIK_CLIENT_SECRET:-} - AUTHENTIK_BASE_URL=${AUTHENTIK_BASE_URL:-} - AUTHENTIK_CALLBACK_URL=${AUTHENTIK_CALLBACK_URL:-http://localhost:5000/api/auth/authentik/callback} - GMAIL_OAUTH_USER=${GMAIL_OAUTH_USER:-} - GMAIL_OAUTH_CLIENT_ID=${GMAIL_OAUTH_CLIENT_ID:-} - GMAIL_OAUTH_CLIENT_SECRET=${GMAIL_OAUTH_CLIENT_SECRET:-} - GMAIL_OAUTH_REFRESH_TOKEN=${GMAIL_OAUTH_REFRESH_TOKEN:-} - GMAIL_OAUTH_REDIRECT_URI=${GMAIL_OAUTH_REDIRECT_URI:-https://developers.google.com/oauthplayground} - EMAIL_FROM_NAME=${EMAIL_FROM_NAME:-TurfTracking} - EMAIL_FROM_ADDRESS=${EMAIL_FROM_ADDRESS:-} - FRONTEND_URL=http://localhost:3000 volumes: - ./backend:/app - backend_node_modules:/app/node_modules ports: - "5001:5000" depends_on: db: condition: service_healthy migrations: condition: service_completed_successfully frontend: build: context: ./frontend dockerfile: Dockerfile.dev command: ./scripts/docker-dev-entry.sh restart: unless-stopped environment: - VITE_API_URL=http://localhost:5001/api - CHOKIDAR_USEPOLLING=true volumes: - ./frontend:/app - frontend_node_modules:/app/node_modules ports: - "3000:3000" depends_on: backend: condition: service_started volumes: postgres_data_dev: backend_node_modules: frontend_node_modules: