version: '3.8' services: # PostgreSQL Database postgres: image: postgres:15 environment: POSTGRES_DB: university_portal POSTGRES_USER: user POSTGRES_PASSWORD: password volumes: - postgres_data:/var/lib/postgresql/data ports: - "5432:5432" networks: - university-network # Redis for caching and sessions redis: image: redis:7-alpine ports: - "6379:6379" volumes: - redis_data:/data networks: - university-network # Next.js Application app: build: context: . dockerfile: Dockerfile ports: - "3000:3000" environment: - NODE_ENV=production - DATABASE_URL=postgresql://user:password@postgres:5432/university_portal - REDIS_URL=redis://redis:6379 - NEXT_PUBLIC_SUPABASE_URL=${NEXT_PUBLIC_SUPABASE_URL} - NEXT_PUBLIC_SUPABASE_ANON_KEY=${NEXT_PUBLIC_SUPABASE_ANON_KEY} - SUPABASE_SERVICE_ROLE_KEY=${SUPABASE_SERVICE_ROLE_KEY} - OPENAI_API_KEY=${OPENAI_API_KEY} - NEXTAUTH_URL=http://localhost:3000 - NEXTAUTH_SECRET=${NEXTAUTH_SECRET} - AZURE_COMPUTER_VISION_KEY=${AZURE_COMPUTER_VISION_KEY} - AZURE_COMPUTER_VISION_ENDPOINT=${AZURE_COMPUTER_VISION_ENDPOINT} depends_on: - postgres - redis networks: - university-network volumes: - ./uploads:/app/uploads # Grafana for analytics dashboard grafana: image: grafana/grafana:latest ports: - "3001:3000" environment: - GF_SECURITY_ADMIN_PASSWORD=admin volumes: - grafana_data:/var/lib/grafana - ./grafana/provisioning:/etc/grafana/provisioning depends_on: - postgres networks: - university-network volumes: postgres_data: redis_data: grafana_data: networks: university-network: driver: bridge