Apache Superset 6
Videos
Overview: Apache Superset 6 on Ubuntu 24.04 LTS on Azure: overview (watch on YouTube)
Launch and log in: Apache Superset 6 on Ubuntu 24.04 LTS on Azure: launch and log in (watch on YouTube)
Deep Dive: Apache Superset 6 on Ubuntu 24.04 LTS on Azure: deep dive (watch on YouTube)
Overview
Apache Superset is an open source data exploration and visualization platform. It has a SQL IDE, a drag-and-drop chart builder and dashboard sharing. You connect it to any SQLAlchemy-compatible engine, and business users can then author dashboards in minutes.
This guide covers the deployment and configuration of Apache Superset 6 on Ubuntu 24.04 on Azure, using the SecureAnyCloud Azure Marketplace image. The image gives you a working Superset install with its database, cache and background worker already set up, and with credentials that are unique to each virtual machine.
The image ships Apache Superset 6.0.0 in a dedicated Python 3.12 virtual environment at /opt/superset/venv. PostgreSQL 16 is the metadata database, and Redis 7 is the cache and Celery results backend. Two systemd units run the workload: superset.service (gunicorn, 2 workers x 8 threads, port 8088) and superset-celery.service (Celery worker for asynchronous SQL Lab queries).
On every fresh customer virtual machine, superset-firstboot.service rotates the application SECRET_KEY, the PostgreSQL superset role password and the admin user password to strong per-VM values. Credentials are written to /stage/scripts/superset-credentials.log (mode 0600, root only). No two virtual machines share a SECRET_KEY or admin password, and no secret is baked into the image.
What you get:
- Apache Superset 6.0.0 installed with pip into a Python 3.12 virtual environment at
/opt/superset/venv. - The
superset.service(gunicorn) andsuperset-celery.service(Celery worker) systemd units, which start automatically on boot. - The
superset-firstboot.servicesystemd oneshot, which rotates the SECRET_KEY, the database password and the admin password on first boot. - PostgreSQL 16 from the Ubuntu 24.04 main repository as the metadata database (database
superset, rolesuperset). - Redis 7 from the Ubuntu 24.04 main repository as the cache and Celery results backend.
- A listener on TCP 8088 (HTTP) bound to 0.0.0.0.
- A pre-configured
/etc/superset/superset_config.pywith a Redis-backed cache, asynchronous Celery and proxy fix enabled. - An Ubuntu 24.04 LTS base with the latest security patches applied at build time.
- The Azure Linux Agent for cloud integration and SSH key injection.
- 24/7 SecureAnyCloud support with a guaranteed 24 hour response SLA.
Prerequisites
- An active Azure subscription.
- A subscription to the Apache Superset 6 on Ubuntu 24.04 listing on Azure Marketplace.
- An SSH public key for VM authentication.
- A virtual network and subnet in the target region.
Recommended virtual machine size: Standard_D2s_v5 (2 vCPU, 8 GB RAM) for small deployments that serve up to ten concurrent users. Scale up to Standard_D4s_v5 for deployments that serve more than fifty dashboards or have a heavy ad-hoc query load.
The minimum supported size is Standard_B2s (2 vCPU, 4 GB RAM). On B2s, memory pressure may evict the Celery worker under sustained load, so use D2s_v5 or larger for production.
Deploy from the Azure Portal
Open Marketplace in the Azure Portal and search for Apache Superset 6. Select the SecureAnyCloud publisher entry and choose Create.
On the Networking tab, attach a network security group that allows inbound TCP 22 from your management IP range and TCP 8088 from your trusted client networks. Do not expose port 8088 to the public internet without TLS. Superset listens on plain HTTP by design, so terminate TLS at a reverse proxy. The SecureAnyCloud nginx-ssl-certbot-ubuntu-24-04 image makes a good companion reverse proxy.
Choose Review + create and wait for validation. Then choose Create. Deployment takes around two minutes.
Deploy from the Azure CLI
Run the following commands to create the network, accept the Marketplace terms and create the virtual machine. Replace the values in angle brackets first.
RG="superset-prod" LOCATION="eastus" VM_NAME="superset-01" ADMIN_USER="azureuser" IMAGE_URN="sac1647283583153:superset-6-ubuntu-24-04:default:latest" SSH_KEY="$(cat ~/.ssh/id_rsa.pub)" az group create --name "$RG" --location "$LOCATION" az network vnet create \
--resource-group "$RG" \
--name superset-vnet --address-prefix 10.94.0.0/16 \
--subnet-name superset-subnet --subnet-prefix 10.94.1.0/24 az network nsg create --resource-group "$RG" --name superset-nsg az network nsg rule create \
--resource-group "$RG" --nsg-name superset-nsg \
--name allow-ssh --priority 100 \
--source-address-prefixes "<your-mgmt-cidr>" \
--destination-port-ranges 22 --access Allow --protocol Tcp az network nsg rule create \
--resource-group "$RG" --nsg-name superset-nsg \
--name allow-superset --priority 110 \
--source-address-prefixes "<your-mgmt-cidr>" \
--destination-port-ranges 8088 --access Allow --protocol Tcp
# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:superset-6-ubuntu-24-04:default:latest
az vm create \
--resource-group "$RG" --name "$VM_NAME" \
--image "$IMAGE_URN" \
--size Standard_D2s_v5 --storage-sku StandardSSD_LRS \
--admin-username "$ADMIN_USER" --ssh-key-values "$SSH_KEY" \
--vnet-name superset-vnet --subnet superset-subnet --nsg superset-nsg \
--public-ip-sku StandardConnect via SSH
Connect to the virtual machine with SSH:
ssh azureuser@<vm-ip>By the time you log in, superset.service and superset-celery.service are already running. superset-firstboot.service has already rotated the admin password to a per-VM value.
Verify the Superset Services
Check that all four services are running:
sudo systemctl is-active superset.service superset-celery.service postgresql redis-serverThe expected output is one line per service, all active:
active active active activeConfirm the first-boot sentinel:
sudo test -f /var/lib/sac/data/superset-firstboot.done && echo FIRSTBOOT_DONEConfirm the listener on port 8088:
sudo ss -tln | grep 8088Confirm that the health endpoint responds:
curl -s -o /dev/null -w "HEALTH=%{http_code}\n" http://localhost:8088/healthYou should see HEALTH=200.
Retrieve the Admin Password
Read the credentials file:
sudo cat /stage/scripts/superset-credentials.logThe output looks like this. The passwords are redacted in the example, and your VM has its own unique values:
admin_username=admin admin_password=<ADMIN_PASSWORD> db_password=<DB_PASSWORD>Store the admin password in your secret store. The file is mode 0600, so only root can read it.
First Login
Open http://<vm-ip>:8088/login/ in your browser. The Superset 6 sign-in page opens:
Sign in with admin and the password from Step 5. After you sign in, Superset opens the welcome dashboard. It has quick links to add a database, browse SQL Lab and create your first chart:
Recommended: change the admin password again from the UI. Go to Settings, then Information, then admin, then Reset Password. Create per-user accounts under Settings, then List Users, so that production workflows do not run as the shared admin.
Add a Database Connection
Go to Settings, then Database Connections, in the top right. On a fresh VM the list is empty. Choose + Database to open the connection wizard:
Pick a database from the built-in options. Common Azure pairings are:
- PostgreSQL: pair it with the SecureAnyCloud postgresql-18-pgadmin-ubuntu-24-04 image, or point it at an Azure Database for PostgreSQL Flexible Server.
- MySQL / MariaDB: pair it with the SecureAnyCloud mysql-9-7-lts-ubuntu-24-04 or mariadb-11-ubuntu-24-04 images, or point it at Azure Database for MySQL.
- Microsoft SQL Server: pair it with a SecureAnyCloud SQL Server image or Azure SQL Managed Instance. The mssql+pyodbc driver is included.
- Snowflake / BigQuery / Redshift: the cloud data warehouse connectors are included. Provide a service account JSON or a username and password, as appropriate.
- ClickHouse / Druid / Trino / Presto: these modern OLAP engines are first-class in Superset 6.
After you add a database, choose Test Connection, then Connect to save it.
SQL Lab and Your First Chart
The SQL Lab IDE is the fastest path from query to chart. Go to SQL, then SQL Lab, in the top navigation. Pick the database you added in Step 7, write a query and run it:
Choose Save, then Save Dataset, to keep the query as a logical dataset. From the dataset, choose Create Chart to open the explore view. Pick a chart type (bar, line, pie, table, big number, time-series, geographic and others). Drag dimensions and metrics into the configuration pane, then choose Save to add the chart to a dashboard.
The Celery worker runs on the same VM as part of superset-celery.service. It handles asynchronous SQL Lab queries that exceed SQLLAB_TIMEOUT_SEC, so long-running analytical queries do not block the gunicorn web workers.
Put TLS in Front (Production)
Superset 6 listens on plain HTTP by design. For production, terminate TLS at a reverse proxy. Two common options are described below.
Option A: Caddy or nginx on the same VM. Install nginx:
sudo apt-get install -y nginxConfigure /etc/nginx/sites-available/superset.conf with proxy_pass http://localhost:8088;, and bind nginx on port 443 to a real certificate. The setting ENABLE_PROXY_FIX = True is already present in /etc/superset/superset_config.py, so Superset respects the X-Forwarded-Proto header.
Option B: Azure Application Gateway in front. Create an Application Gateway with TLS termination, and route the backend pool to the VM private IP on port 8088. Restrict the NSG so that it allows inbound 8088 from the Application Gateway subnet only.
The SecureAnyCloud nginx-ssl-certbot-ubuntu-24-04 image is purpose-built for Option A. Deploy it on a separate small VM and point it at this Superset VM's private IP.
Server Components
The image places the main components at these paths.
Component Path
Superset Python venv /opt/superset/venv/
Superset CLI /opt/superset/venv/bin/superset
Application config /etc/superset/superset_config.py
Environment file /etc/superset/superset.env
Working directory /var/lib/superset/
Log directory /var/log/superset/
Gunicorn unit /etc/systemd/system/superset.service
Celery unit /etc/systemd/system/superset-celery.service
First-boot script /usr/local/sbin/superset-firstboot.sh
First-boot service /etc/systemd/system/superset-firstboot.service
Credentials file /stage/scripts/superset-credentials.log
First-boot sentinel /var/lib/sac/data/superset-firstboot.done
PostgreSQL data /var/lib/postgresql/16/main/
Redis config /etc/redis/redis.conf
Check the installed Superset version:
sudo bash -c 'set -a; . /etc/superset/superset.env; set +a; \
cd /var/lib/superset && sudo -u superset env \
SUPERSET_SECRET_KEY="$SUPERSET_SECRET_KEY" \
SUPERSET_DB_PASSWORD="$SUPERSET_DB_PASSWORD" \
PYTHONPATH=/etc/superset FLASK_SKIP_DOTENV=1 \
/opt/superset/venv/bin/superset version' | sed 's/\x1b\[[0-9;]*m//g' | grep -E "^Superset "You should see Superset 6.0.0.
Managing the Services
Status:
sudo systemctl status superset.service --no-pager | head -n 15Stop, start or restart both services:
sudo systemctl stop superset.service superset-celery.service
sudo systemctl start superset.service superset-celery.service
sudo systemctl restart superset.service superset-celery.serviceView the gunicorn logs:
sudo tail -n 50 /var/log/superset/gunicorn.logView the Celery worker logs:
sudo tail -n 50 /var/log/superset/celery.logReset the admin password, for example if you lose it:
The cleanest way is to use the Superset CLI with the environment file sourced. Substitute your new password for <new-password>:
sudo bash -c 'set -a; . /etc/superset/superset.env; set +a; \
cd /var/lib/superset && sudo -u superset env \
SUPERSET_SECRET_KEY="$SUPERSET_SECRET_KEY" \
SUPERSET_DB_PASSWORD="$SUPERSET_DB_PASSWORD" \
PYTHONPATH=/etc/superset FLASK_SKIP_DOTENV=1 \
/opt/superset/venv/bin/superset fab reset-password --username admin --password "$1"' _ '<new-password>'It prints User admin reseted. The environment file is root-only, so the command reads it inside the sudo bash -c shell. The new password is passed as an argument.
Scaling and Tuning
For higher load, edit /etc/systemd/system/superset.service and increase the gunicorn worker count. The starting configuration is -w 2 -k gthread --threads 8. For D4s_v5 (4 vCPU, 16 GB RAM), raise it to -w 4 --threads 8. Restart the service after editing.
For more aggressive caching, raise CACHE_DEFAULT_TIMEOUT in /etc/superset/superset_config.py from 300 seconds to 3600 or more for slowly changing data sources.
To raise Celery worker concurrency, edit /etc/systemd/system/superset-celery.service and raise -c 2 to match your vCPU count. Restart the service after editing.
Backup and Restore
The Superset metadata database lives in PostgreSQL 16 on the same VM, in the superset database. Back it up with pg_dump:
sudo -u postgres pg_dump -Fc superset > /var/backups/superset-metadata.dumpTo restore on a new VM, stop the gunicorn service and run pg_restore. Substitute <backup-dir> for the directory that holds your dump file:
sudo systemctl stop superset.service superset-celery.service
sudo -u postgres pg_restore -d superset --clean --if-exists <backup-dir>/superset-metadata.dump
sudo systemctl start superset.service superset-celery.serviceFor production, schedule a nightly pg_dump and copy it to Azure Blob Storage with azcopy.
Troubleshooting
Cannot reach Superset on port 8088
- Confirm that the services are running:
sudo systemctl is-active superset.service superset-celery.service - Confirm that the listener is bound:
sudo ss -tln | grep 8088 - Check the log:
sudo tail -n 50 /var/log/superset/gunicorn.log - Confirm that the NSG allows TCP 8088 from your client source IP.
Lost admin password
- Run the
superset fab reset-passwordcommand from Step 11. - Read the password that was generated at first boot from the credentials file at
/stage/scripts/superset-credentials.log, withsudo cat.
SQL Lab queries time out
- Check that the Celery worker is running:
sudo systemctl is-active superset-celery.service - Check that Redis is running:
sudo systemctl is-active redis-server - Tail the Celery log:
sudo tail -n 50 /var/log/superset/celery.log - Raise the gunicorn timeout in
/etc/systemd/system/superset.servicefrom--timeout 120to--timeout 300, then restart the service.
Service fails to start
- Check the journal:
sudo journalctl -u superset.service --no-pager -n 100 - Check that the environment file is present:
ls -l /etc/superset/superset.env - Verify that the metadata database is reachable:
sudo -u postgres psql -d superset -c '\dt' | head - Check the disk space:
df -h /var/lib/superset
Security Recommendations
- Change the admin password again from the UI after your first login.
- Create per-user accounts under Settings, then List Users. Never share the admin login.
- Restrict port 22 to your management IP ranges only.
- Restrict port 8088 to trusted client networks only. Pair it with TLS (Step 9) for any non-trivial deployment.
- Enable single sign-on through the Flask-AppBuilder OAuth or LDAP integration for production deployments.
- Schedule nightly backups of the PostgreSQL metadata database (Step 13) to Azure Blob Storage.
- Keep Superset updated within the 6.x line. Activate the virtual environment and run
pip install --upgrade "apache-superset==6.x.y"periodically, replacing 6.x.y with the latest 6 release. Then restart the services. - Shred the credentials file once the password is stored in your secret store:
sudo shred -u /stage/scripts/superset-credentials.log
Support and Licensing
Apache Superset is licensed under the Apache License 2.0. There is no per-user, per-dashboard or per-server fee. Apache Superset is a trademark of the Apache Software Foundation.
SecureAnyCloud provides commercial support for this image separately from the upstream project.
Email: sales@secureanycloud.com
Website: secureanycloud.com
Support hours: 24/7 with guaranteed 24 hour response SLA
Deploy on Azure
Launch Apache Superset 6 on Ubuntu 24.04 with 24/7 support from SecureAnyCloud.
View on Marketplace
Need Help?
Our support team is available 24/7.
sales@secureanycloud.com
Deploy on Azure
Launch Apache Superset 6 on Ubuntu 24.04 LTS on Azure with 24/7 support from SecureAnyCloud.
View this image
Need Help?
Our support team is available 24/7.
sales@secureanycloud.com