DEV Community

Jean-Yves Pellé
Jean-Yves Pellé

Posted on • Updated on • Originally published at pelle.link

Configurer Apache Superset 3 dans un environnement de production

Apache Superset se révèle être un formidable outil de Business Intelligence: open source, riche en fonctionnalités (multitude de charts, intégration avec plusieurs SGBD, ...) et qui n'a rien à envier aux alternatives commerciales les plus connues (Tableau, PowerBI, BusinessObjects et consorts).

Formidable ne veut malheureusement pas dire qu'il est exempt de défauts, notamment sa documentation qui pourra paraître un peu frugale à certains.

C'est justement pour palier à ce manque que je vous propose de voir ensemble comment mettre en place rapidement une instance de Superset taillée pour la production.

Prérequis

  • Disposer d'un serveur de production sous linux (peu importe la distribution) avec:
    • docker
    • git
    • caddy (ou autre reverse proxy de votre choix)
    • les ports 443 et 80 ouverts au niveau du firewall
  • Un nom de domaine (par exemple bi.myawesomecompany.com) qui pointe vers votre serveur

Installation

Clonage du repo superset

Commencez par faire un git clone du repo directement sur votre serveur de prod (oui ça n'est pas commun):

cd $HOME
git clone https://github.com/apache/superset.git
cd superset
Enter fullscreen mode Exit fullscreen mode

Puis sélectionnez la version souhaitée via son tag.

git checkout tags/3.0.0
Enter fullscreen mode Exit fullscreen mode

Édition des fichiers de configuration

Arrive l’étape de customisation de certains fichiers de configuration. Comme vous êtes sur un tag git, vous ne pourrez pas commiter vos modifications en l'état, vous aurez donc le choix de:

  • documenter toutes vos modifications pour les reproduire à l'identique en cas de réinstallation
  • ou forker le projet et créer une branche pour commiter vos modifications

A vous de voir.

Le fichier docker/.env-non-dev (comprendre ici: non-dev = prod) permet de définir un ensemble de variables d'environnement qui seront utilisées par les containers dockers que nous démarrerons par la suite.

Ajoutez-y ceci:

# On ne veut pas de données de démonstration en prod
SUPERSET_LOAD_EXAMPLES=no
# Une chaîne de caractère aléatoire pour encoder les cookies de session
SUPERSET_SECRET_KEY=4Sido8BkIjs54Vz2XyVD5GJIvANVIAT399dRESjdmr4vm92n
# Pour prévenir les attaques de type XSS (entre autre)
TALISMAN_ENABLED=yes
# Nombre de workers: plus la valeur est élevée, moins vous aurez d'échecs intermittents de refresh de charts dans vos dashboards (à ajuster selon la puissance de votre serveur).
SERVER_WORKER_AMOUNT=64
Enter fullscreen mode Exit fullscreen mode

Effectuez aussi quelques retouches dans docker/pythonpath_dev/superset_config.py pour activer l'alerting et le moteur de template (nécessaire pour créer des datasets avec filtrage dynamique):

FEATURE_FLAGS = {"ALERT_REPORTS": True, "ENABLE_TEMPLATE_PROCESSING": True}
Enter fullscreen mode Exit fullscreen mode

Désactivez la télémétrie en remplaçant dans le fichier docker-compose-non-dev.yml:

x-superset-image: &superset-image apachesuperset.docker.scarf.sh/apache/superset:${TAG:-latest-dev}
Enter fullscreen mode Exit fullscreen mode

par

x-superset-image: &superset-image apache/superset:${TAG:-latest-dev}
Enter fullscreen mode Exit fullscreen mode

Et passez sur la dernière version stable de postgresql en remplaçant:

     image: postgres:14
Enter fullscreen mode Exit fullscreen mode

par

     image: postgres:16
Enter fullscreen mode Exit fullscreen mode

Démarrage

Instanciez et démarrez les conteneurs docker:

docker compose -f docker-compose-non-dev.yml up -d
Enter fullscreen mode Exit fullscreen mode

Superset est donc accessible sur votre serveur de prod via http://127.0.0.1:8088.

Reverse proxy

Configurez un reverse proxy pour sécuriser la connexion, exemple avec caddy:

Editer /etc/caddy/Caddyfile

bi.myawesomecompany.com {
        reverse_proxy http://127.0.0.1:8088
}
Enter fullscreen mode Exit fullscreen mode

Puis redémarrez caddy.

sudo service caddy restart
Enter fullscreen mode Exit fullscreen mode

Première connexion

Connectez vous à https://bi.myawesomecompany.com avec le nom d'utilisateur / mot de passe: admin / admin

Page de connexion

Changez votre mot de passe.

Sauvegarde et restauration

Qui dit prod, dit sauvegarde !

Lors de l'édition du fichier de configuration docker-compose-non-dev.yml, vous aurez sans-doute remarqué qu'on instancie une base de données postgresql.

Pour faire la sauvegarde/restauration de superset il n'y a que cette base à prendre en compte.

La sauvegarde peut donc se faire à chaud via un simple:

docker exec -t superset_db pg_dump superset -U superset | xz > backup.sql.xz
Enter fullscreen mode Exit fullscreen mode

Pour la restauration, on ne démarrera au préalable QUE le conteneur postgresql, évitant ainsi d'avoir une instance superset branchée sur une base de données en cours de restauration:

docker compose down
docker compose -f docker-compose-non-dev.yml up db -d
docker exec -t superset_db dropdb -U superset superset
docker exec -t superset_db createdb -U superset superset
xz -dc backup.sql.xz | docker exec -i superset_db psql -U superset -d superset
docker compose -f docker-compose-non-dev.yml up -d
Enter fullscreen mode Exit fullscreen mode

Top comments (0)