services: backend: build: ./server container_name: dashboard-backend expose: - "3001" # Remove public port, keep internal only environment: # Root path on the Docker host to mount inside the container. # Linux VM: HOST_BROWSE_ROOT=/home/wnc # Windows Docker Desktop: HOST_BROWSE_ROOT=C:/Users # Then enter paths under /host/... in the dashboard settings. - HOST_BROWSE_ROOT=${HOST_BROWSE_ROOT} - HOST_MOUNT_ROOT=/host volumes: - type: bind source: ./server target: /app - 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