【Docker】部署Superset

在互联网开发方面“数据可视化”是永恒的话题。自己开发成本太高,使用市场成熟的BI工具又太贵(大公司就无所谓,小企业毕竟不想花这个钱)。我们公司其实也面临这种情况,在经过长期选型之后最终选定了开源的Superset作为可视化工具,下面就为大家说明Docker版Superset是如何搭建的,并且通过一个例子说明如何在外部项目加载superset页面。

1. 搭建

首先我们先从DockerHub下载1.4.0镜像。(截止到2022年2月,官方推荐版本为1.4.0)。其实一开始我并不是直接使用1.4.0版本的,我是将1.3.x镜像架起之后通过

pip install apache-superset --upgrade

命令更新时发现它自动下载最新的版本1.4.0版本。既然这样,我们还是直接一点在DockerHub中checkout这个版本的镜像下来就可以了。

docker pull apache/superset:1.4.0

由于我后面是通过Rancher进行配置和启动,因此这里没有所谓的脚本内容,但是有一个地方是需要注意的,如下所示:

/data/yzh/docker/superset/data:/app/superset_home

1.4.0版本的Superset.db数据文件并不是放在/var/lib/superset路径而是放在/app/superset_home路径下,记得将对应路径挂载到宿主机。至于网上其他博文中提到的config.py文件的挂载就没有必要了,因为只要挂载路径指向容器内的/app/superset路径就会无法启动。因此,config.py就不需要挂载出来了,我们修改好直接拷贝进去就可以了。
注意:旧版本的config.py文件存放路径为/usr/local/lib/python3.8/site-packages/superset/config.py而1.4.0版本的存放路径为/app/superset
Rancher配置好挂载目录后就可以先启动Superset服务。如下所示:

[root@front ~]# docker ps | grep superset
134bcdefc578        apache/superset:1.4.0                                                   "/.r/r /usr/bin/dock…"   22 hours ago        Up 22 hours (healthy)

服务启动后在服务器中查询后得知容器的id号码为134bcdefc578,之后再通过docker cp命令将刚刚说到的/app/superset/config.py文件拷贝到宿主机,我这里的存放路径是/data/yzh/docker/superset/conf,如下所示:

docker cp 134bcdefc578:/app/superset/config.py /data/yzh/docker/superset/conf/

将config.py文件拷贝到宿主机之后通过本地的vim对config.py进行修改。通过这次修改config.py文件我们实现两个功能:

  1. 通过传参实现动态SQL查询;
  2. 能够通过iframe跨域嵌入到其他系统;

首先找到PUBLIC_ROLE_LIKE参数将其修改为,如下所示:

PUBLIC_ROLE_LIKE: Optional[str] = "Gamma"

接着需要将CORS限制去掉。通过去掉X-Frame-Options可以解决iframe跨站访问问题,如下所示:

HTTP_HEADERS: Dict[str, Any] = {
    
    }

再者将WTF_CSRF_ENABLED参数设置为False,如下所示:

WTF_CSRF_ENABLED = False

除此之外,还需要满足传参查询,因此还需要将ENABLE_TEMPLATE_PROCESSING设置为True,如下所示:

"ENABLE_TEMPLATE_PROCESSING": True,

之后就可以保存config.py并重启docker容器,在重启之前记得将config.py文件重新拷贝到容器内部。
在重启Superset容器后通过exec进入到容器内部初始化数据,如下所示:

docker exec -it 134bcdefc578 bash

先设置FLASK_APP环境变量,如下所示:

export FLASK_APP=superset

然后通过flask fab create-admin创建管理员用户,如下所示:

Username [admin]: admin
User first name [admin]: admin
User last name [user]: user
Email [[email protected]]: [email protected]
Password: 
Repeat for confirmation: 
INFO:root:logging was configured successfully
/usr/local/lib/python3.8/site-packages/flask_caching/__init__.py:191: UserWarning: Flask-Caching: CACHE_TYPE is set to null, caching is effectively disabled.
warnings.warn(
Recognized Database Authentications.
Admin User admin created.

创建用户完成后就可以初始化数据,执行下面两句命令:

# 更新数据版本
superset db upgrade
# 初始化权限
superset init

之后就可以通过刚刚创建的管理员用户名和密码登录系统。如下图:
1.png
点击“List Roles”进入到角色配置页面,这里先不用动其他角色,只需要对Public进行配置就可以了,其他权限基本没有问题就是这两个操作给赋予上就好,如下图:
image.png
这个时候基本上所有配置都已经配置完成了。

2. 外链使用

要使用外链需先创建报表。但创建报表就需要使用到数据源和数据集。

2.1 创建数据源

image.png
从Data -> Databases进入配置页面,如下图:
image.png
选择MySQL后填写相关的数据库配置信息,如下图:
image.png
填写完成后点击保存即可,在保存时会尝试连接是否成功,并不需要像以前一样需要测试连接。

2.2 创建数据集

在数据源创建完后就能够通过SQL语句创建数据集,如下图:
image.png
在SQL Lab -> SQL Editor进入运行页面,按照页面提示填入SQL语句并执行,如下图:
2.png
在确认查询无误之后就点击“Save”按钮进行保存,如下图:
3.png
保存脚本完成后可以点击下方的“EXPLORE”按钮将其保存到数据集中,如下图:
4.png
保存完成之后会直接跳转到报表页面。

2.3 创建报表

image.png
接下来我们就可以选择需要展示的报表类型了,由于这里的业务是最终展示出一个数据统计(Count)就可以了,所以在这里我们选择“Big Number”即可,如下图:
image.png
报表类型有了,但是还没有定义聚合(Metric)内容,我们还需要进行选择,如下图:
image.png
选择了之后,我们点击上方的“RUN”来测试一下查询结果,如下图:
image.png
测试脚本运行成功后由于我们需要传参查询,因此还需要修改查询的数据集内容,如下图:
5.png
先点击下方解锁页面编辑,如下图:
6.png
在需要传参的地方使用Jinja语法写入传参参数名({ { url_param(‘beginDate’) }}),这里由于是按照时间进行范围搜索,因此约定传入两个参数,一个名叫beginDate,另一个叫endDate。
由于外链后不能看出报表的名称,因此在这里我们将需要表述的内容写在子标题里面,如下图:
image.png
填写完成后记得要保存。

2.4 创建外链

保存完成后就可以在右上角获取到iframe链接,如下图:
image.png
之后回到我们的页面中将beginDate和endDate以参数的方式传入到src里面,如下图:
7.png
之后刷新一下页面就可以看到效果了,如下图:
8.png

猜你喜欢

转载自blog.csdn.net/kida_yuan/article/details/128958988