version: '3.8' services: server: build: context: . dockerfile: server/Dockerfile container_name: task-receipts-server ports: - "4000:4000" environment: - NODE_ENV=production # Printer configuration - PRINTER_DRIVER=serial volumes: # Mount database directory for persistence - ./server/data/prod.sqlite3:/app/server/prod.sqlite3:rw # Mount USB devices for printer access # /dev/bus/usb:/dev/bus/usb:rw devices: # Mount USB devices specifically - /dev/bus/usb:/dev/bus/usb privileged: true # Required for USB device access restart: unless-stopped healthcheck: test: ["CMD", "node", "-e", "require('http').get('http://localhost:4000/graphql', (res) => { process.exit(res.statusCode === 200 ? 0 : 1) })"] interval: 30s timeout: 10s retries: 3 start_period: 40s networks: - task-receipts-network client: build: context: . dockerfile: client/Dockerfile container_name: task-receipts-client ports: - "80:80" depends_on: server: condition: service_healthy restart: unless-stopped networks: - task-receipts-network networks: task-receipts-network: driver: bridge volumes: server-data: driver: local