Files
superset2/docker
Maxime Beauchemin 48d8c91b19 feat: migrate examples from Python to YAML format with enhanced CLI
Migrates Superset's example data system from Python-based scripts to YAML configuration files, providing a cleaner, more maintainable approach to managing example datasets, charts, and dashboards.

- Converted 9 Python example modules to YAML configurations
- Exported existing examples from database and added as YAML files:
  - 11 dashboards (USA Births Names, World Bank's Data, etc.)
  - 115 charts
  - 25 datasets
- Moved test-specific fixtures to `tests/fixtures/examples/`
- Removed theme_id from dashboard exports for compatibility

- **New command group**: `superset examples` with subcommands:
  - `load` - Load example data (replaces `load-examples`)
  - `clear-old` - Remove old Python-based examples
  - `clear` - Placeholder for future YAML clearing
  - `reload` - Clear and reload in one command
- **Backwards compatibility**: `superset load-examples` still works with deprecation warning
- **Safety mechanism**: Detects old examples and preserves them to avoid data loss

- Fixed JSON data loading - examples can now load `.json.gz` files from CDN
- Fixed Docker compose configuration for isolated development
- Fixed webpack WebSocket configuration for different ports

- Import operations now log what's being created vs updated:
  - "Creating new dashboard: Sales Dashboard"
  - "Updating existing chart: World's Population"
- Provides clear visibility into the import process

- Moved import logging to individual import functions (DRY principle)
- Non-destructive migration approach - no user data is deleted
- Deterministic UUID generation for consistent example data

- Tested migration from old Python examples to new YAML format
- Verified safety mechanism prevents accidental data overwrites
- Confirmed backwards compatibility with deprecated command
- All pre-commit checks pass

- Updated installation docs to use new CLI commands
- Added deprecation notice to UPDATING.md
- Updated development documentation

None - the old `load-examples` command continues to work with a deprecation warning.

For users with existing Python-based examples:
1. Run `superset examples clear-old --confirm` to remove old examples
2. Run `superset examples load` to load new YAML-based examples
2025-07-29 22:23:52 -07:00
..
2024-12-13 16:17:44 -08:00

Getting Started with Superset using Docker

Docker is an easy way to get started with Superset.

Prerequisites

  1. Docker
  2. Docker Compose

Configuration

The /app/pythonpath folder is mounted from ./docker/pythonpath_dev which contains a base configuration ./docker/pythonpath_dev/superset_config.py intended for use with local development.

Local overrides

In order to override configuration settings locally, simply make a copy of ./docker/pythonpath_dev/superset_config_local.example into ./docker/pythonpath_dev/superset_config_docker.py (git ignored) and fill in your overrides.

Local packages

If you want to add Python packages in order to test things like databases locally, you can simply add a local requirements.txt (./docker/requirements-local.txt) and rebuild your Docker stack.

Steps:

  1. Create ./docker/requirements-local.txt
  2. Add your new packages
  3. Rebuild docker compose
    1. docker compose down -v
    2. docker compose up

Initializing Database

The database will initialize itself upon startup via the init container (superset-init). This may take a minute.

Normal Operation

To run the container, simply run: docker compose up

After waiting several minutes for Superset initialization to finish, you can open a browser and view http://localhost:8088 to start your journey.

Developing

While running, the container server will reload on modification of the Superset Python and JavaScript source code. Don't forget to reload the page to take the new frontend into account though.

Production

It is possible to run Superset in non-development mode by using docker-compose-non-dev.yml. This file excludes the volumes needed for development.

Resource Constraints

If you are attempting to build on macOS and it exits with 137 you need to increase your Docker resources. See instructions here (search for memory)