Docker 部署数据可视化 Superset 3.0.0 深度汉化并配置元数据存储为 Postgres

发布时间 2023-12-16 19:59:14作者: 牧之丨

Superset 官方提供的 Docker 镜像在 3.0.0 版本下不能做到开箱即用,需要一些设置

拉取原始镜像
docker pull apache/superset:3.0.0
配置 superset_config.py
superset_config.py 会覆盖掉 config.py 里的变量,无需配置 config.py

创建一个 superset_config.py 文件添加以下内容

SECRET_KEY = 'superset'
SQLALCHEMY_DATABASE_URI = 'postgresql://superset:superset@postgres/superset'
WTF_CSRF_ENABLED = False
TALISMAN_ENABLED = False
BABEL_DEFAULT_LOCALE = "zh"
LANGUAGES = {
"zh": {"flag": "cn", "name": "简体中文"},
"en": {"flag": "us", "name": "English"},
}
SECRET_KEY:官方说明从2.1.0版本开始必须配置才能启动superset
SQLALCHEMY_DATABASE_URI:superset 的元数据库,默认使用sqlite,并存储在~/.superset/superset.db,也可以指定位置存储 'sqlite:////path/to/superset.db'

postgres格式:postgresql://<UserName>:<DBPassword>@<Database Host>/<Database Name>

mysql格式:mysql://<UserName>:<DBPassword>@<Database Host>/<Database Name>

元数据库支持 sqlite,mysql,postgres 三种数据库

测试 postgres16 版本也支持
数据库密码不要包含@,测试过各种办法无效,官方文档里的方法虽能连接上数据库,但是后续python脚本引用变量时报错,获取不到,期待python大佬解答,config文件两个月前更新,3.0.0版本发布于两周前,文件还未更新

建议数据库使用 UTF-8 编码,避免乱码

WTF_CSRF_ENABLED = False:关于安全的选项,关闭
TALISMAN_ENABLED = False:关于安全的选项,关闭
不关闭安全选项会导致URL地址不匹配无法登陆superset,测试目前只有3.0.0版本需要
BABEL_DEFAULT_LOCALE:默认的superset语言,会影响标题栏
LANGUAGES:开启语言选择菜单,不会影响标题栏和部分选项,汉化不全,开启英文方便理解,也支持其他很多语言,name后的字符可以修改,是浏览器上菜单的显示项

LANGUAGES = {
"en": {"flag": "us", "name": "English"},
"es": {"flag": "es", "name": "Spanish"},
"it": {"flag": "it", "name": "Italian"},
"fr": {"flag": "fr", "name": "French"},
"zh": {"flag": "cn", "name": "Chinese"},
"ja": {"flag": "jp", "name": "Japanese"},
"de": {"flag": "de", "name": "German"},
"pt": {"flag": "pt", "name": "Portuguese"},
"pt_BR": {"flag": "br", "name": "Brazilian Portuguese"},
"ru": {"flag": "ru", "name": "Russian"},
"ko": {"flag": "kr", "name": "Korean"},
"sk": {"flag": "sk", "name": "Slovak"},
"sl": {"flag": "si", "name": "Slovenian"},
"nl": {"flag": "nl", "name": "Dutch"},
}
配置 Dockerfile
superset 官方 Docker 镜像不带除 sqlite 以外任何数据库驱动,以最小化镜像体积,配置postgres 为元数据库或者连接其他数据库需要为容器安装相应驱动

FROM apache/superset:3.0.0
COPY superset_config.py /app/pythonpath
USER root
RUN pip install psycopg2 pyhive &&\
pybabel compile -d /app/superset/translations; exit 0
USER superset
psycopg2:postgres数据库的python驱动
pyhive:hive的python驱动
pybabel:superset下已经有翻译的文件,只是没有编译,编译目录下的所有语言的.po文件对应的.mo文件,深度汉化
; exit 0:翻译文件有很多不对的地方导致报错,让 docker 无视报错继续构建

Superset 本身支持非常多的数据库连接,具体可以查看官方文档安装

https://superset.apache.org/docs/databases/installing-database-drivers/

构建镜像
docker build --no-cache -t superset-pg:3.0.0 .
--no-cache:不使用缓存。不指定的话dockerfile中命令无变化的地方将使用缓存,COPY里文件修改的部分不会应用到实际构建中

最后的 “.” 不能省略

配置 docker-compose.yml 启动 Superset
services:
superset:
image: superset-pg:3.0.0
container_name: superset
hostname: superset
restart: always
ports:
- 8080:8088
environment:
- TZ=Asia/Shanghai
# sqlite 存储元数据的数据持久化
#volumes:
# - ./superset:~/.superset
创建超级管理员
docker exec -it superset superset fab create-admin \
--username admin \
--firstname Superset \
--lastname Admin \
--email admin@superset.com \
--password admin
升级数据库(包含一部分初始化)
docker exec -it superset superset db upgrade
初始化 Superset
docker exec -it superset superset init
访问地址:http://ip:8080

一些汉化效果截图