version: '3.8' services: # PostgreSQL Database postgres: image: postgres:15-alpine container_name: pos-micro-db environment: POSTGRES_USER: pos_micro POSTGRES_PASSWORD: pos_micro_secret POSTGRES_DB: pos_micro_db ports: - "5433:5432" volumes: - pos_micro_data:/var/lib/postgresql/data - ./database/ddl:/docker-entrypoint-initdb.d:ro healthcheck: test: ["CMD-SHELL", "pg_isready -U pos_micro -d pos_micro_db"] interval: 10s timeout: 5s retries: 5 networks: - pos-micro-network # Backend API (NestJS) backend: build: context: ./backend dockerfile: Dockerfile container_name: pos-micro-api environment: NODE_ENV: development PORT: 3071 DB_HOST: postgres DB_PORT: 5432 DB_USERNAME: pos_micro DB_PASSWORD: pos_micro_secret DB_DATABASE: pos_micro_db DB_SCHEMA: pos_micro JWT_SECRET: pos-micro-jwt-secret-change-in-production JWT_EXPIRES_IN: 24h JWT_REFRESH_EXPIRES_IN: 7d ports: - "3071:3071" depends_on: postgres: condition: service_healthy volumes: - ./backend/src:/app/src:ro networks: - pos-micro-network # Frontend PWA (Vite + React) frontend: build: context: ./frontend dockerfile: Dockerfile container_name: pos-micro-web environment: VITE_API_URL: http://localhost:3071/api/v1 ports: - "5173:5173" volumes: - ./frontend/src:/app/src:ro networks: - pos-micro-network volumes: pos_micro_data: networks: pos-micro-network: driver: bridge