services: postgres: image: postgres:16-alpine environment: POSTGRES_USER: tracker POSTGRES_PASSWORD: tracker POSTGRES_DB: time_tracker ports: - '55432:5432' volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ['CMD-SHELL', 'pg_isready -U tracker -d time_tracker'] interval: 5s timeout: 5s retries: 10 redis: image: redis:7-alpine ports: - '56379:6379' volumes: - redis_data:/data healthcheck: test: ['CMD', 'redis-cli', 'ping'] interval: 5s timeout: 5s retries: 10 backend: build: context: . dockerfile: Dockerfile env_file: - .env environment: DATABASE_HOST: postgres REDIS_URL: redis://redis:6379 depends_on: postgres: condition: service_healthy redis: condition: service_healthy ports: - '3000:3000' frontend: build: context: ./frontend dockerfile: Dockerfile environment: VITE_API_URL: http://localhost:3000 depends_on: - backend ports: - '5173:5173' volumes: postgres_data: redis_data: