# DataHub Base Path Configuration This document describes how to configure DataHub to run from a custom base path (e.g., `/my-app/` instead of `/`). ## Overview DataHub now supports serving from a custom base path, allowing you to: - Serve DataHub from a subdirectory (e.g., `https://company.com/datahub/`) - Deploy multiple DataHub instances on the same domain - Integrate DataHub behind reverse proxies with path-based routing ## Configuration ### Environment Variables Set the following environment variable to configure the base path: ```bash export DATAHUB_BASE_PATH="/my-app" ``` **Important Notes:** - The base path should start with `/` but not end with `/` - Examples: `/datahub`, `/my-app`, `/tools/datahub` - Leave empty or unset for root path deployment ### Component Configuration The base path configuration affects three main components: #### 1. Frontend (datahub-web-react) The frontend determines the base path using multiple detection methods (in priority order): 1. **Environment Variable** (highest priority): ```bash # Set in .env file or environment REACT_APP_BASE_PATH=/my-app ``` 2. **Server Configuration** (fetched from `/config` endpoint): - The React app fetches base path from the backend's configuration - Most reliable for production deployments 3. **URL Analysis** (fallback): - Analyzes current URL to detect base path - Used when server config is unavailable **Development Configuration:** ```bash # Method 1: Environment variable (recommended for development) echo "REACT_APP_BASE_PATH=/my-app" >> .env yarn start # Development server at http://localhost:3000/my-app # Method 2: Using Vite preview (for testing production builds) yarn build npx vite preview --port 3001 # Uses base path from REACT_APP_BASE_PATH # Accessible at: http://localhost:3001/my-app # Method 3: Override base path via command line npx vite preview --port 3001 --base /custom-path ``` **Production Behavior:** - Automatically fetches base path from server configuration - Falls back to URL detection if server config unavailable - Provides console warnings to help with debugging #### 2. DataHub Frontend Service (Play Framework) The Play Framework application supports base path through: - `datahub.basePath` configuration in `application.conf` - `play.http.context` for Play Framework native support - Environment variable: `DATAHUB_BASE_PATH` #### 3. Metadata Service (Spring Boot) The metadata service (GMS) supports base path through: - `server.servlet.context-path` in `application.yaml` - Environment variable: `DATAHUB_BASE_PATH` ## Deployment Examples ### Docker Compose ```yaml version: "3.8" services: datahub-frontend: environment: - DATAHUB_BASE_PATH=/datahub - PLAY_HTTP_CONTEXT=/datahub datahub-gms: environment: - DATAHUB_BASE_PATH=/datahub ``` ### Kubernetes ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: datahub-frontend spec: template: spec: containers: - name: datahub-frontend env: - name: DATAHUB_BASE_PATH value: "/datahub" - name: DATAHUB_GMS_BASE_PATH value: "/datahub" - name: PLAY_HTTP_CONTEXT value: "/datahub" --- apiVersion: apps/v1 kind: Deployment metadata: name: datahub-gms spec: template: spec: containers: - name: datahub-frontend env: - name: DATAHUB_BASE_PATH value: "/datahub" - name: DATAHUB_GMS_BASE_PATH value: "/datahub" ``` ## Limitations - Base path must be consistent across all DataHub components - Changing base path requires restat of GMS and front end deployments. - Testing of multiple DataHub environments served by the same URL, e.g. http://example.com/datahub1, http://example.com/datahub2, hasn't been extensively validated.