services: postgres: image: postgres:16-alpine environment: POSTGRES_USER: ${POSTGRES_USER:-techxcar} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-techxcar} POSTGRES_DB: ${POSTGRES_DB:-techxcar} volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-techxcar}"] interval: 5s timeout: 5s retries: 5 ports: - "5432:5432" redis: image: redis:7-alpine command: redis-server --appendonly yes volumes: - redis_data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 5s retries: 5 ports: - "6379:6379" backend: build: context: ./backend dockerfile: Dockerfile env_file: .env environment: DATABASE_URL: postgres://${POSTGRES_USER:-techxcar}:${POSTGRES_PASSWORD:-techxcar}@postgres:5432/${POSTGRES_DB:-techxcar}?sslmode=disable REDIS_URL: redis://redis:6379 ports: - "8080:8080" depends_on: postgres: condition: service_healthy redis: condition: service_healthy volumes: - pdf_storage:/app/storage healthcheck: test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8080/api/v1/health"] interval: 10s timeout: 5s retries: 5 start_period: 10s frontend: build: context: ./frontend dockerfile: Dockerfile ports: - "3000:8080" depends_on: - backend volumes: postgres_data: redis_data: pdf_storage: