Dokploy

Superset (Unofficial)

Data visualization and data exploration platform.

Superset (Unofficial) logo

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 → AdvancedBase64 import and paste the content below:

ewogICJjb21wb3NlIjogIiMgVGhpcyBpcyBhbiBVTk9GRklDSUFMIHByb2R1Y3Rpb24gZG9ja2VyIGltYWdlIGJ1aWxkIGZvciBTdXBlcnNldDpcbiMgLSBodHRwczovL2dpdGh1Yi5jb20vYW1hbmNldmljZS9kb2NrZXItc3VwZXJzZXRcbiNcbiNcbiMgIyMgU0VUVVAgSU5TVFJVQ1RJT05TXG4jXG4jIEFmdGVyIGRlcGxveWluZyB0aGlzIGltYWdlLCB5b3Ugd2lsbCBuZWVkIHRvIHJ1biBvbmUgb2YgdGhlIHR3b1xuIyBjb21tYW5kcyBiZWxvdyBpbiBhIHRlcm1pbmFsIHdpdGhpbiB0aGUgc3VwZXJzZXQgY29udGFpbmVyOlxuIyAgICAgICQgc3VwZXJzZXQtZGVtbyAgICAgIyBJbml0aWFsaXNlIGRhdGFiYXNlICsgbG9hZCBkZW1vIGNoYXJ0cy9kYXRhc2V0c1xuIyAgICAgICQgc3VwZXJzZXQtaW5pdCAgICAgIyBJbml0aWFsaXNlIGRhdGFiYXNlIG9ubHlcbiNcbiMgWW91IHdpbGwgYmUgcHJvbXB0ZWQgdG8gZW50ZXIgdGhlIGNyZWRlbnRpYWxzIGZvciB0aGUgYWRtaW4gdXNlci5cbiNcbiNcbiMgIyMgTkVUV09SSyBJTlNUUlVDVElPTlNcbiNcbiMgSWYgeW91IHdhbnQgdG8gY29ubmVjdCBzdXBlcnNldCB3aXRoIG90aGVyIGludGVybmFsIGRhdGFiYXNlcyBtYW5hZ2VkIGJ5XG4jIERva3Bsb3kgKG9uIGRva3Bsb3ktbmV0d29yaykgdXNpbmcgaW50ZXJuYWwgaG9zdG5hbWVzLCB5b3Ugd2lsbCBuZWVkIHRvXG4jIHVuY29tbWVudCB0aGUgYG5ldHdvcmtzYCBzZWN0aW9uLCBib3RoIGZvciB0aGUgc3VwZXJzZXQgY29udGFpbmVyIGFuZFxuIyBhdCB0aGUgdmVyeSBib3R0b20gb2YgdGhpcyBkb2NrZXItY29tcG9zZSB0ZW1wbGF0ZS5cbiNcbiMgTm90ZSB0aGF0IHRoZSBgc3VwZXJzZXRgIHNlcnZpY2UgbmFtZS9ob3N0bmFtZSB3aWxsIG5vdCBiZSB1bmlxdWUgb24gdGhlXG4jIGdsb2JhbCBgZG9rcGxveS1uZXR3b3JrYC4gSWYgeW91IHBsYW4gdG86XG4jXG4jIDEuIGRlcGxveSBhIHNlY29uZCBpbnN0YW5jZSBvZiBzdXBlcnNldCBvbiBkb2twbG95LW5ldHdvcmssIGFuZFxuIyAyLiBoYXZlIG90aGVyIGNvbnRhaW5lcnMgb24gZG9rcGxveS1uZXR3b3JrIHV0aWxpc2UgdGhlIHNlY29uZCBpbnN0YW5jZSdzXG4jICAgIFN1cGVyc2V0IEFQSSAoaHR0cHM6Ly9zdXBlcnNldC5hcGFjaGUub3JnL2RvY3MvYXBpKVxuI1xuIyBQbGVhc2UgY2hhbmdlIHRoZSBzZXJ2aWNlIG5hbWUgb2YgdGhlIHNlY29uZCBpbnN0YW5jZS5cblxuc2VydmljZXM6XG4gIHN1cGVyc2V0OlxuICAgIGltYWdlOiBhbWFuY2V2aWNlL3N1cGVyc2V0XG4gICAgcmVzdGFydDogYWx3YXlzXG4gICAgI25ldHdvcmtzOlxuICAgICMgIC0gZG9rcGxveS1uZXR3b3JrXG4gICAgZGVwZW5kc19vbjpcbiAgICAgIC0gc3VwZXJzZXRfcG9zdGdyZXNcbiAgICAgIC0gc3VwZXJzZXRfcmVkaXNcbiAgICB2b2x1bWVzOlxuICAgICAgIyBUaGlzIHN1cGVyc2V0X2NvbmZpZy5weSBjYW4gYmUgZWRpdGVkIGluIERva3Bsb3kncyBVSSBBZHZhbmNlZCAtPiBWb2x1bWUgTW91bnRcbiAgICAgIC0gLi4vZmlsZXMvc3VwZXJzZXQvc3VwZXJzZXRfY29uZmlnLnB5Oi9ldGMvc3VwZXJzZXQvc3VwZXJzZXRfY29uZmlnLnB5XG4gICAgZW52aXJvbm1lbnQ6XG4gICAgICBTRUNSRVRfS0VZOiAke1NFQ1JFVF9LRVl9XG4gICAgICBNQVBCT1hfQVBJX0tFWTogJHtNQVBCT1hfQVBJX0tFWX1cbiAgICAgIFBPU1RHUkVTX1VTRVI6ICR7UE9TVEdSRVNfVVNFUn1cbiAgICAgIFBPU1RHUkVTX1BBU1NXT1JEOiAke1BPU1RHUkVTX1BBU1NXT1JEfVxuICAgICAgUE9TVEdSRVNfREI6ICR7UE9TVEdSRVNfREJ9XG4gICAgICBSRURJU19QQVNTV09SRDogJHtSRURJU19QQVNTV09SRH1cbiAgICAgICMgRW5zdXJlIHRoZSBob3N0cyBtYXRjaGVzIHlvdXIgc2VydmljZSBuYW1lcyBiZWxvdy5cbiAgICAgIFBPU1RHUkVTX0hPU1Q6IHN1cGVyc2V0X3Bvc3RncmVzXG4gICAgICBSRURJU19IT1NUOiBzdXBlcnNldF9yZWRpc1xuXG4gIHN1cGVyc2V0X3Bvc3RncmVzOlxuICAgIGltYWdlOiBwb3N0Z3Jlc1xuICAgIHJlc3RhcnQ6IGFsd2F5c1xuICAgIGVudmlyb25tZW50OlxuICAgICAgUE9TVEdSRVNfVVNFUjogJHtQT1NUR1JFU19VU0VSfVxuICAgICAgUE9TVEdSRVNfUEFTU1dPUkQ6ICR7UE9TVEdSRVNfUEFTU1dPUkR9XG4gICAgICBQT1NUR1JFU19EQjogJHtQT1NUR1JFU19EQn1cbiAgICB2b2x1bWVzOlxuICAgICAgLSBzdXBlcnNldF9wb3N0Z3Jlc19kYXRhOi92YXIvbGliL3Bvc3RncmVzcWwvZGF0YVxuICAgIGhlYWx0aGNoZWNrOlxuICAgICAgdGVzdDogW1wiQ01ELVNIRUxMXCIsIFwicGdfaXNyZWFkeSAtVSAkJHtQT1NUR1JFU19VU0VSfSAtZCAkJHtQT1NUR1JFU19EQn1cIl1cbiAgICAgIGludGVydmFsOiAzMHNcbiAgICAgIHRpbWVvdXQ6IDEwc1xuICAgICAgcmV0cmllczogM1xuXG4gIHN1cGVyc2V0X3JlZGlzOlxuICAgIGltYWdlOiByZWRpc1xuICAgIHJlc3RhcnQ6IGFsd2F5c1xuICAgIHZvbHVtZXM6XG4gICAgICAtIHN1cGVyc2V0X3JlZGlzX2RhdGE6L2RhdGFcbiAgICBjb21tYW5kOiByZWRpcy1zZXJ2ZXIgLS1yZXF1aXJlcGFzcyAke1JFRElTX1BBU1NXT1JEfVxuICAgIGhlYWx0aGNoZWNrOlxuICAgICAgdGVzdDogW1wiQ01ELVNIRUxMXCIsIFwicmVkaXMtY2xpIC1hICQke1JFRElTX1BBU1NXT1JEfSBwaW5nXCJdXG4gICAgICBpbnRlcnZhbDogMzBzXG4gICAgICB0aW1lb3V0OiAxMHNcbiAgICAgIHJldHJpZXM6IDNcblxuI25ldHdvcmtzOlxuIyAgZG9rcGxveS1uZXR3b3JrOlxuIyAgICBleHRlcm5hbDogdHJ1ZVxuXG52b2x1bWVzOlxuICBzdXBlcnNldF9wb3N0Z3Jlc19kYXRhOlxuICBzdXBlcnNldF9yZWRpc19kYXRhOlxuIiwKICAiY29uZmlnIjogIlt2YXJpYWJsZXNdXG5tYWluX2RvbWFpbiA9IFwiJHtkb21haW59XCJcbnNlY3JldF9rZXkgPSBcIiR7cGFzc3dvcmQ6MzB9XCJcbnBvc3RncmVzX3Bhc3N3b3JkID0gXCIke3Bhc3N3b3JkOjMwfVwiXG5yZWRpc19wYXNzd29yZCA9IFwiJHtwYXNzd29yZDozMH1cIlxubWFwYm94X2FwaV9rZXkgPSBcIlwiXG5cbltbY29uZmlnLmRvbWFpbnNdXVxuc2VydmljZU5hbWUgPSBcInN1cGVyc2V0XCJcbnBvcnQgPSA4XzA4OFxuaG9zdCA9IFwiJHttYWluX2RvbWFpbn1cIlxuXG5bY29uZmlnLmVudl1cblNFQ1JFVF9LRVkgPSBcIiR7c2VjcmV0X2tleX1cIlxuTUFQQk9YX0FQSV9LRVkgPSBcIiR7bWFwYm94X2FwaV9rZXl9XCJcblBPU1RHUkVTX0RCID0gXCJzdXBlcnNldFwiXG5QT1NUR1JFU19VU0VSID0gXCJzdXBlcnNldFwiXG5QT1NUR1JFU19QQVNTV09SRCA9IFwiJHtwb3N0Z3Jlc19wYXNzd29yZH1cIlxuUkVESVNfUEFTU1dPUkQgPSBcIiR7cmVkaXNfcGFzc3dvcmR9XCJcblxuW1tjb25maWcubW91bnRzXV1cbmZpbGVQYXRoID0gXCIuL3N1cGVyc2V0L3N1cGVyc2V0X2NvbmZpZy5weVwiXG5jb250ZW50ID0gXCJcIlwiXG5cXFwiXCJcIlxuRm9yIG1vcmUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzZWU6XG4tIGh0dHBzOi8vc3VwZXJzZXQuYXBhY2hlLm9yZy9kb2NzL2NvbmZpZ3VyYXRpb24vY29uZmlndXJpbmctc3VwZXJzZXRcblxcXCJcIlwiXG5cbmltcG9ydCBvc1xuXG5TRUNSRVRfS0VZID0gb3MuZ2V0ZW52KFwiU0VDUkVUX0tFWVwiKVxuTUFQQk9YX0FQSV9LRVkgPSBvcy5nZXRlbnYoXCJNQVBCT1hfQVBJX0tFWVwiLCBcIlwiKVxuXG5DQUNIRV9DT05GSUcgPSB7XG4gIFwiQ0FDSEVfVFlQRVwiOiBcIlJlZGlzQ2FjaGVcIixcbiAgXCJDQUNIRV9ERUZBVUxUX1RJTUVPVVRcIjogMzAwLFxuICBcIkNBQ0hFX0tFWV9QUkVGSVhcIjogXCJzdXBlcnNldF9cIixcbiAgXCJDQUNIRV9SRURJU19IT1NUXCI6IFwicmVkaXNcIixcbiAgXCJDQUNIRV9SRURJU19QT1JUXCI6IDYzNzksXG4gIFwiQ0FDSEVfUkVESVNfREJcIjogMSxcbiAgXCJDQUNIRV9SRURJU19VUkxcIjogZlwicmVkaXM6Ly86e29zLmdldGVudignUkVESVNfUEFTU1dPUkQnKX1Ae29zLmdldGVudignUkVESVNfSE9TVCcpfTo2Mzc5LzFcIixcbn1cblxuRklMVEVSX1NUQVRFX0NBQ0hFX0NPTkZJRyA9IHsqKkNBQ0hFX0NPTkZJRywgXCJDQUNIRV9LRVlfUFJFRklYXCI6IFwic3VwZXJzZXRfZmlsdGVyX1wifVxuRVhQTE9SRV9GT1JNX0RBVEFfQ0FDSEVfQ09ORklHID0geyoqQ0FDSEVfQ09ORklHLCBcIkNBQ0hFX0tFWV9QUkVGSVhcIjogXCJzdXBlcnNldF9leHBsb3JlX2Zvcm1fXCJ9XG5cblNRTEFMQ0hFTVlfVFJBQ0tfTU9ESUZJQ0FUSU9OUyA9IFRydWVcblNRTEFMQ0hFTVlfREFUQUJBU0VfVVJJID0gZlwicG9zdGdyZXNxbCtwc3ljb3BnMjovL3tvcy5nZXRlbnYoJ1BPU1RHUkVTX1VTRVInKX06e29zLmdldGVudignUE9TVEdSRVNfUEFTU1dPUkQnKX1Ae29zLmdldGVudignUE9TVEdSRVNfSE9TVCcpfTo1NDMyL3tvcy5nZXRlbnYoJ1BPU1RHUkVTX0RCJyl9XCJcblxuIyBVbmNvbW1lbnQgaWYgeW91IHdhbnQgdG8gbG9hZCBleGFtcGxlIGRhdGEgKHVzaW5nIFwic3VwZXJzZXQgbG9hZF9leGFtcGxlc1wiKSBhdCB0aGVcbiMgc2FtZSBsb2NhdGlvbiBhcyB5b3VyIG1ldGFkYXRhIHBvc3RncmVzcWwgaW5zdGFuY2UuIE90aGVyd2lzZSwgdGhlIGRlZmF1bHQgc3FsaXRlXG4jIHdpbGwgYmUgdXNlZCwgd2hpY2ggd2lsbCBub3QgcGVyc2lzdCBpbiB2b2x1bWUgd2hlbiByZXN0YXJ0aW5nIHN1cGVyc2V0IGJ5IGRlZmF1bHQuXG4jU1FMQUxDSEVNWV9FWEFNUExFU19VUkkgPSBTUUxBTENIRU1ZX0RBVEFCQVNFX1VSSSBcblwiXCJcIlxuIgp9

Tags

analytics, bi, dashboard, database, sql


Version: latest

On this page