version: '3.8' services: # PostgreSQL Database postgres: image: postgres:16-alpine container_name: hotel_pi_db environment: POSTGRES_USER: ${POSTGRES_USER:-directus} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-directus123} POSTGRES_DB: ${POSTGRES_DB:-directus} volumes: - postgres_data:/var/lib/postgresql/data ports: - '5432:5432' healthcheck: test: ['CMD-SHELL', 'pg_isready -U ${POSTGRES_USER:-directus}'] interval: 10s timeout: 5s retries: 5 restart: unless-stopped networks: - hotel_pi_network # Directus CMS directus: image: directus/directus:latest container_name: hotel_pi_cms depends_on: postgres: condition: service_healthy environment: DB_CLIENT: postgres DB_HOST: postgres DB_PORT: 5432 DB_DATABASE: ${POSTGRES_DB:-directus} DB_USER: ${POSTGRES_USER:-directus} DB_PASSWORD: ${POSTGRES_PASSWORD:-directus123} SECRET: ${SECRET:-your-secret-key-change-in-production} AUTH_SECRET: ${AUTH_SECRET:-your-auth-secret-key-change-in-production} CORS_ORIGIN: ${CORS_ORIGIN:-http://localhost:5173,http://localhost:5000} PUBLIC_URL: http://localhost:8055 volumes: - directus_uploads:/directus/uploads - ./directus/extensions:/directus/extensions ports: - '8055:8055' healthcheck: test: ['CMD', 'wget', '--quiet', '--tries=1', '--spider', 'http://localhost:8055/server/health'] interval: 10s timeout: 5s retries: 5 restart: unless-stopped networks: - hotel_pi_network # Frontend (SvelteKit) frontend: build: context: ./frontend dockerfile: Dockerfile container_name: hotel_pi_frontend environment: VITE_API_URL: ${VITE_API_URL:-http://localhost:8055} VITE_WS_URL: ${VITE_WS_URL:-ws://localhost:3001} VITE_WELCOME_NAME: ${WELCOME_NAME:-Guest} VITE_IDLE_TIMEOUT: ${IDLE_TIMEOUT_MINUTES:-5} ports: - '5173:5173' depends_on: - directus restart: unless-stopped networks: - hotel_pi_network # Control Service (Node.js) control-service: build: context: ./control-service dockerfile: Dockerfile container_name: hotel_pi_control environment: PORT: 3001 CEC_DEVICE: ${CEC_DEVICE:-/dev/ttyAMA0} PLEX_LAUNCH_COMMAND: ${PLEX_LAUNCH_COMMAND:-/usr/bin/plex-htpc} KIOSK_LAUNCH_COMMAND: ${KIOSK_LAUNCH_COMMAND:-/home/pi/scripts/launch-kiosk.sh} ports: - '3001:3001' restart: unless-stopped networks: - hotel_pi_network # Enable device access for Raspberry Pi (CEC) devices: - /dev/ttyAMA0:/dev/ttyAMA0 volumes: postgres_data: driver: local directus_uploads: driver: local networks: hotel_pi_network: driver: bridge