version: "3.8" services: postgres: image: postgres:16-alpine container_name: petmaster-postgres restart: unless-stopped environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: petmaster_dev ports: - "5432:5432" volumes: - postgres-data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 10s timeout: 5s retries: 5 redis: image: redis:7-alpine container_name: petmaster-redis restart: unless-stopped ports: - "6379:6379" volumes: - redis-data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 node-dev: image: node:22-alpine container_name: petmaster-node-dev restart: unless-stopped working_dir: /app ports: - "9229:9229" volumes: - ./node-data:/tmp/node-tmp command: sh -c "while true; do sleep 3600; done" depends_on: postgres: condition: service_healthy redis: condition: service_healthy react-frontend: image: node:22-alpine container_name: petmaster-react-frontend restart: unless-stopped working_dir: /app ports: - "3000:3000" volumes: - ./node-data:/tmp/node-tmp command: sh -c "while true; do sleep 3600; done" depends_on: postgres: condition: service_healthy redis: condition: service_healthy volumes: postgres-data: redis-data: