services: backend: build: ./server container_name: dashboard-backend expose: - "3001" # Remove public port, keep internal only environment: - HOST_BROWSE_ROOT=${HOST_BROWSE_ROOT} - HOST_MOUNT_ROOT=/host - DASHBOARD_DB_PATH=/app/data/dashboard.db volumes: - type: bind source: ./server target: /app - db_data:/app/data - type: bind source: ${HOST_BROWSE_ROOT} target: /host restart: unless-stopped frontend: build: ./dashboard container_name: dashboard-frontend expose: - "5173" # Remove public port, keep internal only depends_on: - backend restart: unless-stopped nginx: image: nginx:alpine container_name: dashboard-nginx ports: - "80:80" # Single public entry point volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro depends_on: - backend - frontend restart: unless-stopped volumes: db_data: