使用
以官方文档为主,比较详细:
创建您的第一个仪表板 |超集 — Creating Your First Dashboard | Superset (apache.org)
二次开发
采用<iframe>将superset内嵌到自己的前端项目中
<基于上一篇的环境配置>但是pypi安装使用的是已经编译过的前端没有可编译的superset-frontend目录
使用开发者模式,可以实现前后端分离编译,这里使用Flask server后端,配置有部分不同
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16# 首先python虚拟环境必须使用python3.9,3.10,3.11的版本
sudo apt install python3.9 # os安装需要的python版本
virtualenv superset-dev -python=pythonx.x.x # 生成环境
source superset-dev/bin/activate # 激活环境
git clone # 从需要从github上拉源码
cd ./superset # 进入目录
pip install -r requirements/development.txt # 安装外部依赖
pip install -e . # 安装开发模组
# 后面的初始化同PYPI部署一样
superset db upgrade
superset fab create-admin
superset init
superset load-examples
superset run -p 8088 --with-threads --reload --debugger --debug # debug模式前端没编译过,详见文档
一、VMware网络配置(虚拟机设置/网络适配器/网络连接)
虚拟机如需连接主机代理需要自定义,也可以在虚拟机上配置
可以网上检索“VMware虚拟机共享主机代理”相关内容
选择桥接模式
虚拟机终端下输入
1 | ifconfig |
可以看到这里内网的IP地址是192.168.188.97(不同局域网后两位不一样)
如果只有下面一段输出,可能是没连上网(确保主机联网),也可能是ubuntu网络服务掉了(解决见下)
先检查/var/lib/NetworkManager/NetworkManager.state
(NetworkManager是一些Linux的默认网络管理器)
1 | sudo cat /var/lib/NetworkManager/NetworkManager.state |
文件中/输出中显示状态NetworkingEnabled=false,所以服务是关闭状态
1 | # 关闭服务 |
一般到这步就好了
可以再修改以下配置文件/etc/NetworkManager/NetworkManager.conf
1 | sudo vim /etc/NetworkManager/NetworkManager.conf |
一些debian版本NetworkManager 默认不管理任何定义的 /etc/network/interfaces 接口
未受管理的设备意味着 NetworkManager 不处理这些网络设备
/etc/NetworkManager/NetworkManager.conf中的[ifupdown]设置managed=true后,NetworkManager 会尝试管理 /etc/network/interfaces
中定义的接口
修改完后保存,输入
1 | sudo systemctl restart systemd-networkd.service |
重启网络服务就好了
二、superset部分配置项修改
已经在虚拟机中获得内网IP,需要略微修改运行superset的命令
1 | # 如果先前的环境变量都配置了的话 |
就可以在虚拟机外部同局域网的主机下用浏览器访问192.168.188.97:8088的服务了
二次开发superset通过iframe嵌入是最方便的
1 |
|
用浏览器打开html就可以直接访问到嵌套在iframe里面的superset,但是可以会出现跨域等问题,所以需要进行一些配置
superset 通过其 config.py 模块公开了数百个可配置参数
进入superset/lib/pythonx.x/site-packages/superset/config.py
- 语言配置
1 | BABEL_DAFAULT_LOCALE = "zh" # 改中文,下面有一个LANGUAGES的字典可以根据需要修改 |
如果希望在不用登录的状态下就能访问仪表板数据看板
- 角色权限管理
superset将分了几种默认角色权限
- Admin管理员:默认所有权限
- Public公共(未登陆):默认无权限
- Alpha:能访问修改数据源
- Gamma:能访问修改仪表盘和图表
- granter:能修改角色权限
- sql_lab:能访问SQL Lab
可以在管理员用户的Settings设置/List Roles 列出角色中修改,也可以通过config.py进行一些配置
逐项为public角色添加权限相当麻烦,所以修改config.p以下配置
1 | PUBLIC_ROLE_LIKE: Optional[str] = None |
当然一般可以给public添加一个数据源的权限
1 | all database access on all_database_access |
- 去掉X-Frame-Options限制
配置调用的优先级是先OVERRIDE_HTTP_HEADERS再DEFAULT_HTTP_HEADERS最后HTTP_HEADERS,反正三项置空就行
1 | DEFAULT_HTTP_HEADERS: dict[str, Any] = {} |
- CSRF 保护设置
默认情况下,WTF_CSRF_ENABLED 为 True
设为False禁用所有视图中的 CSRF 保护
1 | WTF_CSRF_ENABLED = False |
TALISMAN_ENABLED和TALISMAN_DEV_CONFIG的配置
经过前面的配置一般来说iframe中可以显示superset,但是登录后遇到重定向问题,依旧回到原页面(未登录状态)
F12发现“X-Frame-Options”为“SAMEORIGIN”
github看到类似问题可能有助于解决
1
2
3
4
5
6TALISMAN_ENABLED = True
TALISMAN_DEV_CONFIG = {
...
"frame_options": 'ALLOWALL',
'frame_options_allow_from': '*',
}接着,如果superset服务与自己的应用服务在同一个域名下iframe中就可以正常登录
假如自己的应用服务和superset服务不在同一个域名下,需要以下配置:
- 在
superset_config.py
中添加SESSION_COOKIE_SAMESITE = 'None'
- 确保将 Firefox 设置为不阻止跨站点 cookie(不建议这样做,但它会制作嵌入式图表)。
因此,从
/superset/welcome
重定向到/login/
意味着 superset 无法从 cookie 中找到您的会话(您的浏览器可能会阻止第 3 方 cookie,因为 superset 作为第 3 方提供)如果您通过 HTTP 而不是 HTTPS 提供超集,则还需要在
superset_config.py
中使用SESSION_COOKIE_SECURE = False
,尽管不建议仅使用 http。注意:此解决方案适用于 Firefox 和 Chrome/Chromium,但不适用于 Safari。
- 在
其他
1)
1
2
3APP_NAME = "Superset" # 可更改标签页名称
APP_ICON = "xxx.png" # 可修改界面左上角图标
LOGO_TARGET_PATH = None # 可修改图标点击后的跳转页面2)
浏览器进入192.168.xxx.xxx:8088地址默认会重定向到/superset/welcome/页面
这个页面是superset/templates/superset/public_welcome.html
templates里面内容是Flask生成的,html也是经过打包的
在superset/initialization/init.py文件中有代码,就是用来重定向的
1
2
3
4class SupersetIndexView(IndexView):
def index(self) -> FlaskResponse:
return redirect("/superset/welcome/")例如可以将代码中”/superset/welcome/”改成”/dashboard/list/”就会重定向到仪表盘页面了
3)
JWT用户登陆验证,还没搞
教程 —— 如何在自己的应用集成superset - JadePeng - 博客园
https://github.com/ygoleite/superset-jwt-login
4)
遇到的一个数据库问题(无法获取数据库:解密密钥无效),通过下面连接方法解决
https://github.com/apache/superset/issues/25261
解决方案是在将文件 /home/YOUR_USER/superset-env/lib/pythonX.X.X/site-packages/sqlalchemy_utils/types/encrypted/encrypted_type.py 中找到的每个 utf-8 字符串更改为 latin-1 后,使用superset re-encrypt-secrets
- 文章连结: https://krisnile.github.io/2024/08/26/Superset使用-二次开发/
- 版权声明: 本网站所有文章除特别声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明出处!