Superset (Unofficial)
Data visualization and data exploration platform.
Configuration
# This is an UNOFFICIAL production docker image build for Superset:
# - https://github.com/amancevice/docker-superset
#
#
# ## SETUP INSTRUCTIONS
#
# After deploying this image, you will need to run one of the two
# commands below in a terminal within the superset container:
# $ superset-demo # Initialise database + load demo charts/datasets
# $ superset-init # Initialise database only
#
# You will be prompted to enter the credentials for the admin user.
#
#
# ## NETWORK INSTRUCTIONS
#
# If you want to connect superset with other internal databases managed by
# Dokploy (on dokploy-network) using internal hostnames, you will need to
# uncomment the `networks` section, both for the superset container and
# at the very bottom of this docker-compose template.
#
# Note that the `superset` service name/hostname will not be unique on the
# global `dokploy-network`. If you plan to:
#
# 1. deploy a second instance of superset on dokploy-network, and
# 2. have other containers on dokploy-network utilise the second instance's
# Superset API (https://superset.apache.org/docs/api)
#
# Please change the service name of the second instance.
services:
superset:
image: amancevice/superset
restart: always
#networks:
# - dokploy-network
depends_on:
- superset_postgres
- superset_redis
volumes:
# This superset_config.py can be edited in Dokploy's UI Advanced -> Volume Mount
- ../files/superset/superset_config.py:/etc/superset/superset_config.py
environment:
SECRET_KEY: ${SECRET_KEY}
MAPBOX_API_KEY: ${MAPBOX_API_KEY}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
REDIS_PASSWORD: ${REDIS_PASSWORD}
# Ensure the hosts matches your service names below.
POSTGRES_HOST: superset_postgres
REDIS_HOST: superset_redis
superset_postgres:
image: postgres
restart: always
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
volumes:
- superset_postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 30s
timeout: 10s
retries: 3
superset_redis:
image: redis
restart: always
volumes:
- superset_redis_data:/data
command: redis-server --requirepass ${REDIS_PASSWORD}
healthcheck:
test: ["CMD-SHELL", "redis-cli -a $${REDIS_PASSWORD} ping"]
interval: 30s
timeout: 10s
retries: 3
#networks:
# dokploy-network:
# external: true
volumes:
superset_postgres_data:
superset_redis_data:[variables]
main_domain = "${domain}"
secret_key = "${password:30}"
postgres_password = "${password:30}"
redis_password = "${password:30}"
mapbox_api_key = ""
[[config.domains]]
serviceName = "superset"
port = 8_088
host = "${main_domain}"
[config.env]
SECRET_KEY = "${secret_key}"
MAPBOX_API_KEY = "${mapbox_api_key}"
POSTGRES_DB = "superset"
POSTGRES_USER = "superset"
POSTGRES_PASSWORD = "${postgres_password}"
REDIS_PASSWORD = "${redis_password}"
[[config.mounts]]
filePath = "./superset/superset_config.py"
content = """
\"""
For more configuration options, see:
- https://superset.apache.org/docs/configuration/configuring-superset
\"""
import os
SECRET_KEY = os.getenv("SECRET_KEY")
MAPBOX_API_KEY = os.getenv("MAPBOX_API_KEY", "")
CACHE_CONFIG = {
"CACHE_TYPE": "RedisCache",
"CACHE_DEFAULT_TIMEOUT": 300,
"CACHE_KEY_PREFIX": "superset_",
"CACHE_REDIS_HOST": "redis",
"CACHE_REDIS_PORT": 6379,
"CACHE_REDIS_DB": 1,
"CACHE_REDIS_URL": f"redis://:{os.getenv('REDIS_PASSWORD')}@{os.getenv('REDIS_HOST')}:6379/1",
}
FILTER_STATE_CACHE_CONFIG = {**CACHE_CONFIG, "CACHE_KEY_PREFIX": "superset_filter_"}
EXPLORE_FORM_DATA_CACHE_CONFIG = {**CACHE_CONFIG, "CACHE_KEY_PREFIX": "superset_explore_form_"}
SQLALCHEMY_TRACK_MODIFICATIONS = True
SQLALCHEMY_DATABASE_URI = f"postgresql+psycopg2://{os.getenv('POSTGRES_USER')}:{os.getenv('POSTGRES_PASSWORD')}@{os.getenv('POSTGRES_HOST')}:5432/{os.getenv('POSTGRES_DB')}"
# Uncomment if you want to load example data (using "superset load_examples") at the
# same location as your metadata postgresql instance. Otherwise, the default sqlite
# will be used, which will not persist in volume when restarting superset by default.
#SQLALCHEMY_EXAMPLES_URI = SQLALCHEMY_DATABASE_URI
"""Base64
To import this template in Dokploy: create a Compose service → Advanced → Base64 import and paste the content below:
ewogICJjb21wb3NlIjogIiMgVGhpcyBpcyBhbiBVTk9GRklDSUFMIHByb2R1Y3Rpb24gZG9ja2VyIGltYWdlIGJ1aWxkIGZvciBTdXBlcnNldDpcbiMgLSBodHRwczovL2dpdGh1Yi5jb20vYW1hbmNldmljZS9kb2NrZXItc3VwZXJzZXRcbiNcbiNcbiMgIyMgU0VUVVAgSU5TVFJVQ1RJT05TXG4jXG4jIEFmdGVyIGRlcGxveWluZyB0aGlzIGltYWdlLCB5b3Ugd2lsbCBuZWVkIHRvIHJ1biBvbmUgb2YgdGhlIHR3b1xuIyBjb21tYW5kcyBiZWxvdyBpbiBhIHRlcm1pbmFsIHdpdGhpbiB0aGUgc3VwZXJzZXQgY29udGFpbmVyOlxuIyAgICAgICQgc3VwZXJzZXQtZGVtbyAgICAgIyBJbml0aWFsaXNlIGRhdGFiYXNlICsgbG9hZCBkZW1vIGNoYXJ0cy9kYXRhc2V0c1xuIyAgICAgICQgc3VwZXJzZXQtaW5pdCAgICAgIyBJbml0aWFsaXNlIGRhdGFiYXNlIG9ubHlcbiNcbiMgWW91IHdpbGwgYmUgcHJvbXB0ZWQgdG8gZW50ZXIgdGhlIGNyZWRlbnRpYWxzIGZvciB0aGUgYWRtaW4gdXNlci5cbiNcbiNcbiMgIyMgTkVUV09SSyBJTlNUUlVDVElPTlNcbiNcbiMgSWYgeW91IHdhbnQgdG8gY29ubmVjdCBzdXBlcnNldCB3aXRoIG90aGVyIGludGVybmFsIGRhdGFiYXNlcyBtYW5hZ2VkIGJ5XG4jIERva3Bsb3kgKG9uIGRva3Bsb3ktbmV0d29yaykgdXNpbmcgaW50ZXJuYWwgaG9zdG5hbWVzLCB5b3Ugd2lsbCBuZWVkIHRvXG4jIHVuY29tbWVudCB0aGUgYG5ldHdvcmtzYCBzZWN0aW9uLCBib3RoIGZvciB0aGUgc3VwZXJzZXQgY29udGFpbmVyIGFuZFxuIyBhdCB0aGUgdmVyeSBib3R0b20gb2YgdGhpcyBkb2NrZXItY29tcG9zZSB0ZW1wbGF0ZS5cbiNcbiMgTm90ZSB0aGF0IHRoZSBgc3VwZXJzZXRgIHNlcnZpY2UgbmFtZS9ob3N0bmFtZSB3aWxsIG5vdCBiZSB1bmlxdWUgb24gdGhlXG4jIGdsb2JhbCBgZG9rcGxveS1uZXR3b3JrYC4gSWYgeW91IHBsYW4gdG86XG4jXG4jIDEuIGRlcGxveSBhIHNlY29uZCBpbnN0YW5jZSBvZiBzdXBlcnNldCBvbiBkb2twbG95LW5ldHdvcmssIGFuZFxuIyAyLiBoYXZlIG90aGVyIGNvbnRhaW5lcnMgb24gZG9rcGxveS1uZXR3b3JrIHV0aWxpc2UgdGhlIHNlY29uZCBpbnN0YW5jZSdzXG4jICAgIFN1cGVyc2V0IEFQSSAoaHR0cHM6Ly9zdXBlcnNldC5hcGFjaGUub3JnL2RvY3MvYXBpKVxuI1xuIyBQbGVhc2UgY2hhbmdlIHRoZSBzZXJ2aWNlIG5hbWUgb2YgdGhlIHNlY29uZCBpbnN0YW5jZS5cblxuc2VydmljZXM6XG4gIHN1cGVyc2V0OlxuICAgIGltYWdlOiBhbWFuY2V2aWNlL3N1cGVyc2V0XG4gICAgcmVzdGFydDogYWx3YXlzXG4gICAgI25ldHdvcmtzOlxuICAgICMgIC0gZG9rcGxveS1uZXR3b3JrXG4gICAgZGVwZW5kc19vbjpcbiAgICAgIC0gc3VwZXJzZXRfcG9zdGdyZXNcbiAgICAgIC0gc3VwZXJzZXRfcmVkaXNcbiAgICB2b2x1bWVzOlxuICAgICAgIyBUaGlzIHN1cGVyc2V0X2NvbmZpZy5weSBjYW4gYmUgZWRpdGVkIGluIERva3Bsb3kncyBVSSBBZHZhbmNlZCAtPiBWb2x1bWUgTW91bnRcbiAgICAgIC0gLi4vZmlsZXMvc3VwZXJzZXQvc3VwZXJzZXRfY29uZmlnLnB5Oi9ldGMvc3VwZXJzZXQvc3VwZXJzZXRfY29uZmlnLnB5XG4gICAgZW52aXJvbm1lbnQ6XG4gICAgICBTRUNSRVRfS0VZOiAke1NFQ1JFVF9LRVl9XG4gICAgICBNQVBCT1hfQVBJX0tFWTogJHtNQVBCT1hfQVBJX0tFWX1cbiAgICAgIFBPU1RHUkVTX1VTRVI6ICR7UE9TVEdSRVNfVVNFUn1cbiAgICAgIFBPU1RHUkVTX1BBU1NXT1JEOiAke1BPU1RHUkVTX1BBU1NXT1JEfVxuICAgICAgUE9TVEdSRVNfREI6ICR7UE9TVEdSRVNfREJ9XG4gICAgICBSRURJU19QQVNTV09SRDogJHtSRURJU19QQVNTV09SRH1cbiAgICAgICMgRW5zdXJlIHRoZSBob3N0cyBtYXRjaGVzIHlvdXIgc2VydmljZSBuYW1lcyBiZWxvdy5cbiAgICAgIFBPU1RHUkVTX0hPU1Q6IHN1cGVyc2V0X3Bvc3RncmVzXG4gICAgICBSRURJU19IT1NUOiBzdXBlcnNldF9yZWRpc1xuXG4gIHN1cGVyc2V0X3Bvc3RncmVzOlxuICAgIGltYWdlOiBwb3N0Z3Jlc1xuICAgIHJlc3RhcnQ6IGFsd2F5c1xuICAgIGVudmlyb25tZW50OlxuICAgICAgUE9TVEdSRVNfVVNFUjogJHtQT1NUR1JFU19VU0VSfVxuICAgICAgUE9TVEdSRVNfUEFTU1dPUkQ6ICR7UE9TVEdSRVNfUEFTU1dPUkR9XG4gICAgICBQT1NUR1JFU19EQjogJHtQT1NUR1JFU19EQn1cbiAgICB2b2x1bWVzOlxuICAgICAgLSBzdXBlcnNldF9wb3N0Z3Jlc19kYXRhOi92YXIvbGliL3Bvc3RncmVzcWwvZGF0YVxuICAgIGhlYWx0aGNoZWNrOlxuICAgICAgdGVzdDogW1wiQ01ELVNIRUxMXCIsIFwicGdfaXNyZWFkeSAtVSAkJHtQT1NUR1JFU19VU0VSfSAtZCAkJHtQT1NUR1JFU19EQn1cIl1cbiAgICAgIGludGVydmFsOiAzMHNcbiAgICAgIHRpbWVvdXQ6IDEwc1xuICAgICAgcmV0cmllczogM1xuXG4gIHN1cGVyc2V0X3JlZGlzOlxuICAgIGltYWdlOiByZWRpc1xuICAgIHJlc3RhcnQ6IGFsd2F5c1xuICAgIHZvbHVtZXM6XG4gICAgICAtIHN1cGVyc2V0X3JlZGlzX2RhdGE6L2RhdGFcbiAgICBjb21tYW5kOiByZWRpcy1zZXJ2ZXIgLS1yZXF1aXJlcGFzcyAke1JFRElTX1BBU1NXT1JEfVxuICAgIGhlYWx0aGNoZWNrOlxuICAgICAgdGVzdDogW1wiQ01ELVNIRUxMXCIsIFwicmVkaXMtY2xpIC1hICQke1JFRElTX1BBU1NXT1JEfSBwaW5nXCJdXG4gICAgICBpbnRlcnZhbDogMzBzXG4gICAgICB0aW1lb3V0OiAxMHNcbiAgICAgIHJldHJpZXM6IDNcblxuI25ldHdvcmtzOlxuIyAgZG9rcGxveS1uZXR3b3JrOlxuIyAgICBleHRlcm5hbDogdHJ1ZVxuXG52b2x1bWVzOlxuICBzdXBlcnNldF9wb3N0Z3Jlc19kYXRhOlxuICBzdXBlcnNldF9yZWRpc19kYXRhOlxuIiwKICAiY29uZmlnIjogIlt2YXJpYWJsZXNdXG5tYWluX2RvbWFpbiA9IFwiJHtkb21haW59XCJcbnNlY3JldF9rZXkgPSBcIiR7cGFzc3dvcmQ6MzB9XCJcbnBvc3RncmVzX3Bhc3N3b3JkID0gXCIke3Bhc3N3b3JkOjMwfVwiXG5yZWRpc19wYXNzd29yZCA9IFwiJHtwYXNzd29yZDozMH1cIlxubWFwYm94X2FwaV9rZXkgPSBcIlwiXG5cbltbY29uZmlnLmRvbWFpbnNdXVxuc2VydmljZU5hbWUgPSBcInN1cGVyc2V0XCJcbnBvcnQgPSA4XzA4OFxuaG9zdCA9IFwiJHttYWluX2RvbWFpbn1cIlxuXG5bY29uZmlnLmVudl1cblNFQ1JFVF9LRVkgPSBcIiR7c2VjcmV0X2tleX1cIlxuTUFQQk9YX0FQSV9LRVkgPSBcIiR7bWFwYm94X2FwaV9rZXl9XCJcblBPU1RHUkVTX0RCID0gXCJzdXBlcnNldFwiXG5QT1NUR1JFU19VU0VSID0gXCJzdXBlcnNldFwiXG5QT1NUR1JFU19QQVNTV09SRCA9IFwiJHtwb3N0Z3Jlc19wYXNzd29yZH1cIlxuUkVESVNfUEFTU1dPUkQgPSBcIiR7cmVkaXNfcGFzc3dvcmR9XCJcblxuW1tjb25maWcubW91bnRzXV1cbmZpbGVQYXRoID0gXCIuL3N1cGVyc2V0L3N1cGVyc2V0X2NvbmZpZy5weVwiXG5jb250ZW50ID0gXCJcIlwiXG5cXFwiXCJcIlxuRm9yIG1vcmUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzZWU6XG4tIGh0dHBzOi8vc3VwZXJzZXQuYXBhY2hlLm9yZy9kb2NzL2NvbmZpZ3VyYXRpb24vY29uZmlndXJpbmctc3VwZXJzZXRcblxcXCJcIlwiXG5cbmltcG9ydCBvc1xuXG5TRUNSRVRfS0VZID0gb3MuZ2V0ZW52KFwiU0VDUkVUX0tFWVwiKVxuTUFQQk9YX0FQSV9LRVkgPSBvcy5nZXRlbnYoXCJNQVBCT1hfQVBJX0tFWVwiLCBcIlwiKVxuXG5DQUNIRV9DT05GSUcgPSB7XG4gIFwiQ0FDSEVfVFlQRVwiOiBcIlJlZGlzQ2FjaGVcIixcbiAgXCJDQUNIRV9ERUZBVUxUX1RJTUVPVVRcIjogMzAwLFxuICBcIkNBQ0hFX0tFWV9QUkVGSVhcIjogXCJzdXBlcnNldF9cIixcbiAgXCJDQUNIRV9SRURJU19IT1NUXCI6IFwicmVkaXNcIixcbiAgXCJDQUNIRV9SRURJU19QT1JUXCI6IDYzNzksXG4gIFwiQ0FDSEVfUkVESVNfREJcIjogMSxcbiAgXCJDQUNIRV9SRURJU19VUkxcIjogZlwicmVkaXM6Ly86e29zLmdldGVudignUkVESVNfUEFTU1dPUkQnKX1Ae29zLmdldGVudignUkVESVNfSE9TVCcpfTo2Mzc5LzFcIixcbn1cblxuRklMVEVSX1NUQVRFX0NBQ0hFX0NPTkZJRyA9IHsqKkNBQ0hFX0NPTkZJRywgXCJDQUNIRV9LRVlfUFJFRklYXCI6IFwic3VwZXJzZXRfZmlsdGVyX1wifVxuRVhQTE9SRV9GT1JNX0RBVEFfQ0FDSEVfQ09ORklHID0geyoqQ0FDSEVfQ09ORklHLCBcIkNBQ0hFX0tFWV9QUkVGSVhcIjogXCJzdXBlcnNldF9leHBsb3JlX2Zvcm1fXCJ9XG5cblNRTEFMQ0hFTVlfVFJBQ0tfTU9ESUZJQ0FUSU9OUyA9IFRydWVcblNRTEFMQ0hFTVlfREFUQUJBU0VfVVJJID0gZlwicG9zdGdyZXNxbCtwc3ljb3BnMjovL3tvcy5nZXRlbnYoJ1BPU1RHUkVTX1VTRVInKX06e29zLmdldGVudignUE9TVEdSRVNfUEFTU1dPUkQnKX1Ae29zLmdldGVudignUE9TVEdSRVNfSE9TVCcpfTo1NDMyL3tvcy5nZXRlbnYoJ1BPU1RHUkVTX0RCJyl9XCJcblxuIyBVbmNvbW1lbnQgaWYgeW91IHdhbnQgdG8gbG9hZCBleGFtcGxlIGRhdGEgKHVzaW5nIFwic3VwZXJzZXQgbG9hZF9leGFtcGxlc1wiKSBhdCB0aGVcbiMgc2FtZSBsb2NhdGlvbiBhcyB5b3VyIG1ldGFkYXRhIHBvc3RncmVzcWwgaW5zdGFuY2UuIE90aGVyd2lzZSwgdGhlIGRlZmF1bHQgc3FsaXRlXG4jIHdpbGwgYmUgdXNlZCwgd2hpY2ggd2lsbCBub3QgcGVyc2lzdCBpbiB2b2x1bWUgd2hlbiByZXN0YXJ0aW5nIHN1cGVyc2V0IGJ5IGRlZmF1bHQuXG4jU1FMQUxDSEVNWV9FWEFNUExFU19VUkkgPSBTUUxBTENIRU1ZX0RBVEFCQVNFX1VSSSBcblwiXCJcIlxuIgp9Links
Tags
analytics, bi, dashboard, database, sql
Version: latest
SupaBase
The open source Firebase alternative. Supabase gives you a dedicated Postgres database to build your web, mobile, and AI applications. This require at least version 0.22.5 of dokploy.
SurrealDB
SurrealDB is a native, open-source, multi-model database that lets you store and manage data across relational, document, graph, time-series, vector & search, and geospatial models—all in one place.