【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文件我们实现两个功能:
- 通过传参实现动态SQL查询;
- 能够通过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 [admin@fab.org]: admin@fab.org
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
之后就可以通过刚刚创建的管理员用户名和密码登录系统。如下图:
点击“List Roles”进入到角色配置页面,这里先不用动其他角色,只需要对Public进行配置就可以了,其他权限基本没有问题就是这两个操作给赋予上就好,如下图:
这个时候基本上所有配置都已经配置完成了。
2. 外链使用
要使用外链需先创建报表。但创建报表就需要使用到数据源和数据集。
2.1 创建数据源
从Data -> Databases进入配置页面,如下图:
选择MySQL后填写相关的数据库配置信息,如下图:
填写完成后点击保存即可,在保存时会尝试连接是否成功,并不需要像以前一样需要测试连接。
2.2 创建数据集
在数据源创建完后就能够通过SQL语句创建数据集,如下图:
在SQL Lab -> SQL Editor进入运行页面,按照页面提示填入SQL语句并执行,如下图:
在确认查询无误之后就点击“Save”按钮进行保存,如下图:
保存脚本完成后可以点击下方的“EXPLORE”按钮将其保存到数据集中,如下图:
保存完成之后会直接跳转到报表页面。
2.3 创建报表
接下来我们就可以选择需要展示的报表类型了,由于这里的业务是最终展示出一个数据统计(Count)就可以了,所以在这里我们选择“Big Number”即可,如下图:
报表类型有了,但是还没有定义聚合(Metric)内容,我们还需要进行选择,如下图:
选择了之后,我们点击上方的“RUN”来测试一下查询结果,如下图:
测试脚本运行成功后由于我们需要传参查询,因此还需要修改查询的数据集内容,如下图:
先点击下方解锁页面编辑,如下图:
在需要传参的地方使用Jinja语法写入传参参数名({{ url_param(‘beginDate’) }}),这里由于是按照时间进行范围搜索,因此约定传入两个参数,一个名叫beginDate,另一个叫endDate。
由于外链后不能看出报表的名称,因此在这里我们将需要表述的内容写在子标题里面,如下图:
填写完成后记得要保存。
2.4 创建外链
保存完成后就可以在右上角获取到iframe链接,如下图:
之后回到我们的页面中将beginDate和endDate以参数的方式传入到src里面,如下图:
之后刷新一下页面就可以看到效果了,如下图:
更多推荐
所有评论(0)