version: '3.8' services: # Development environment - Control Plane (Rust backend + Vite frontend) app: build: context: . dockerfile: Dockerfile volumes: - ..:/workspace:cached - /var/run/docker.sock:/var/run/docker.sock environment: - DATABASE_URL=postgres://postgres:postgres@postgres:5432/nxmesh - RUST_LOG=debug - RUST_BACKTRACE=1 - NODE_ENV=development ports: - "3000:3000" # Vite dev server - "8080:8080" # Rust backend (Control Plane) depends_on: postgres: condition: service_healthy command: sleep infinity networks: - nxmesh-network group_add: - docker pid: "service:nginx" # Data Plane - Nginx (controlled by agent via PID namespace sharing) nginx: image: nginx:alpine container_name: nxmesh-nginx restart: unless-stopped volumes: - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro - ./nginx/conf.d:/etc/nginx/conf.d:ro ports: - "80:80" - "443:443" networks: - nxmesh-network # Database postgres: image: postgres:16-alpine restart: unless-stopped volumes: - postgres-data:/var/lib/postgresql/data environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: nxmesh ports: - "5432:5432" healthcheck: test: [ "CMD-SHELL", "pg_isready -U postgres" ] interval: 5s timeout: 5s retries: 5 networks: - nxmesh-network volumes: postgres-data: networks: nxmesh-network: