| # |
| # Licensed to the Apache Software Foundation (ASF) under one or more |
| # contributor license agreements. See the NOTICE file distributed with |
| # this work for additional information regarding copyright ownership. |
| # The ASF licenses this file to You under the Apache License, Version 2.0 |
| # (the "License"); you may not use this file except in compliance with |
| # the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # |
| |
| # ----------------------------------------------------------------------- |
| # Lightweight docker-compose for running multiple Superset instances |
| # This includes only essential services: database, Redis, and Superset app |
| # |
| # IMPORTANT: To run multiple instances in parallel: |
| # - Use different project names: docker-compose -p project1 -f docker-compose-light.yml up |
| # - Use different NODE_PORT values: NODE_PORT=9002 docker-compose -p project2 -f docker-compose-light.yml up |
| # - Volumes are isolated by project name (e.g., project1_db_home_light, project2_db_home_light) |
| # - Database name is intentionally different (superset_light) to prevent accidental cross-connections |
| # |
| # For verbose logging during development: |
| # - Set SUPERSET_LOG_LEVEL=debug in docker/.env-local for detailed Superset logs |
| # ----------------------------------------------------------------------- |
| x-superset-user: &superset-user root |
| x-superset-volumes: &superset-volumes |
| # /app/pythonpath_docker will be appended to the PYTHONPATH in the final container |
| - ./docker:/app/docker |
| - ./superset:/app/superset |
| - ./superset-frontend:/app/superset-frontend |
| - superset_home_light:/app/superset_home |
| - ./tests:/app/tests |
| x-common-build: &common-build |
| context: . |
| target: ${SUPERSET_BUILD_TARGET:-dev} # can use `dev` (default) or `lean` |
| cache_from: |
| - apache/superset-cache:3.10-slim-bookworm |
| args: |
| DEV_MODE: "true" |
| INCLUDE_CHROMIUM: ${INCLUDE_CHROMIUM:-false} |
| INCLUDE_FIREFOX: ${INCLUDE_FIREFOX:-false} |
| BUILD_TRANSLATIONS: ${BUILD_TRANSLATIONS:-false} |
| |
| services: |
| db-light: |
| env_file: |
| - path: docker/.env # default |
| required: true |
| - path: docker/.env-local # optional override |
| required: false |
| image: postgres:16 |
| restart: unless-stopped |
| # No host port mapping - only accessible within Docker network |
| volumes: |
| - db_home_light:/var/lib/postgresql/data |
| - ./docker/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d |
| environment: |
| # Override database name to avoid conflicts |
| POSTGRES_DB: superset_light |
| |
| superset-light: |
| env_file: |
| - path: docker/.env # default |
| required: true |
| - path: docker/.env-local # optional override |
| required: false |
| build: |
| <<: *common-build |
| command: ["/app/docker/docker-bootstrap.sh", "app"] |
| restart: unless-stopped |
| # No host port mapping - accessed via webpack dev server proxy |
| extra_hosts: |
| - "host.docker.internal:host-gateway" |
| user: *superset-user |
| depends_on: |
| superset-init-light: |
| condition: service_completed_successfully |
| volumes: *superset-volumes |
| environment: |
| # Override DB connection for light service |
| DATABASE_HOST: db-light |
| DATABASE_DB: superset_light |
| POSTGRES_DB: superset_light |
| EXAMPLES_HOST: db-light |
| EXAMPLES_DB: superset_light |
| EXAMPLES_USER: superset |
| EXAMPLES_PASSWORD: superset |
| # Use light-specific config that disables Redis |
| SUPERSET_CONFIG_PATH: /app/docker/pythonpath_dev/superset_config_docker_light.py |
| |
| superset-init-light: |
| build: |
| <<: *common-build |
| command: ["/app/docker/docker-init.sh"] |
| env_file: |
| - path: docker/.env # default |
| required: true |
| - path: docker/.env-local # optional override |
| required: false |
| depends_on: |
| db-light: |
| condition: service_started |
| user: *superset-user |
| volumes: *superset-volumes |
| environment: |
| # Override DB connection for light service |
| DATABASE_HOST: db-light |
| DATABASE_DB: superset_light |
| POSTGRES_DB: superset_light |
| EXAMPLES_HOST: db-light |
| EXAMPLES_DB: superset_light |
| EXAMPLES_USER: superset |
| EXAMPLES_PASSWORD: superset |
| # Use light-specific config that disables Redis |
| SUPERSET_CONFIG_PATH: /app/docker/pythonpath_dev/superset_config_docker_light.py |
| healthcheck: |
| disable: true |
| |
| superset-node-light: |
| build: |
| context: . |
| target: superset-node |
| args: |
| # This prevents building the frontend bundle since we'll mount local folder |
| # and build it on startup while firing docker-frontend.sh in dev mode, where |
| # it'll mount and watch local files and rebuild as you update them |
| DEV_MODE: "true" |
| BUILD_TRANSLATIONS: ${BUILD_TRANSLATIONS:-false} |
| environment: |
| # set this to false if you have perf issues running the npm i; npm run dev in-docker |
| # if you do so, you have to run this manually on the host, which should perform better! |
| BUILD_SUPERSET_FRONTEND_IN_DOCKER: true |
| NPM_RUN_PRUNE: false |
| SCARF_ANALYTICS: "${SCARF_ANALYTICS:-}" |
| # configuring the dev-server to use the host.docker.internal to connect to the backend |
| superset: "http://superset-light:8088" |
| ports: |
| - "127.0.0.1:${NODE_PORT:-9001}:9000" # Parameterized port |
| command: ["/app/docker/docker-frontend.sh"] |
| env_file: |
| - path: docker/.env # default |
| required: true |
| - path: docker/.env-local # optional override |
| required: false |
| volumes: *superset-volumes |
| |
| volumes: |
| superset_home_light: |
| external: false |
| db_home_light: |
| external: false |