Superset介绍:https://www.oschina.net/p/caravel
想部署一套作为数据分析和报表服务使用,但是没有Unix服务器,所有的服务器都是windows server。因此尝试在windows环境下部署
一、环境
VMware Workstation虚拟机中,Windows 7 旗舰版,32位系统。
安装过程需要联网。
二、安装步骤
官方安装说明:http://airbnb.io/superset/installation.html,以下简称安装说明。
安装说明,比较详细了,但是在windows环境下安装时有一些坑需要注意。记录一下安装过程。
1、 安装vs2010。Superset中依赖的一些库需要使用microsoft visual c++ 2010编译。我的电脑上安装有vs2015,也曾尝试安装Microsoft Visual C++ 2010 Redistributable Package、vc for python、winsdk_web都没有解决问题。
2、 安装python。官网下载:python-3.4.4rc1_x86,全部默认安装,安装路径是:C:\python34。安装完成后,设置环境变量。在path中添加C:\python34
3、 安装pip。下载安装说明中的get-pip.py,保存到c盘根目录。命令行中运行python c:\get-pip.py。会自动安装。
4、 安装cryptography。按安装说明中要求pip install cryptography。但是在后续的部署过程中,提示no module named pwd。因此这里也安装pycrypto。命令行中:pip install pycrypto。
5、 安装说明中,是设置Python virtualenv。没接触过python,搜索后了解到virtualenv是创建一个虚拟环境,启用后,后续的安装都安装到虚拟环境中,保持python本身环境的整洁。同时还方便部署。具体步骤
pip install virtualenv//安装插件
virtualenv venv//创建虚拟环境
venv\Scripts\activate//启动环境
启动后效果:
我没有使用这个功能,全部安装到了python环境中。
6、 更新setuptools
pip install --upgrade setuptools pip
7、 安装并初始化Superset
首先是官方的步骤
# 安装Superset
pip install superset
注意,可能会提示no module named fcntl。下载fcntl.py文件放到PYTHONPATH路径即可,我是放到了Python34\Lib目录下。
# 创建管理员帐号
fabmanager create-admin --app superset
# 初始化数据库
superset db upgrade
# 加载例子
superset load_examples
# 初始化角色和权限
superset init
# 启动服务,端口 8088, 使用 -p 更改端口号。
superset runserver
出现的问题:
(1)命令行中,直接运行superset 命令会提示,不是内部或外部命令。
首先需要进入superset安装目录中运行。
Cd C:\Python34\Lib\site-packages\superset\bin
命令改为
Python superset db upgrade
Python superset load_examples
Python superset init
Python superset runserver
(2)执行命令Python superset runserver,出错。原因是superset使用gunicorn作为应用程序服务器,而gunicorn不支持windows。命令行中添加-d,使用development web server运行。最终运行命令为:
Python superset runserver -d
这时候就可以在浏览器中登录系统查看演示了。但是这种部署方式,官方不建议在生产环境中使用。在superset的issues 922(https://github.com/airbnb/superset/issues/922),有人提供了一个分支,使用Waitress。不过没有详细的步骤。实践后,执行以下步骤
(1) 安装Waitress。
pip install Waitress
(2) 修改superset代码。修改Superset目录(C:\Python34\Lib\site-packages\superset)中cli.py文件。
第57行
if debug:
app.run(
host='0.0.0.0',
port=int(port),
threaded=True,
debug=True,
use_reloader=no_reload)
改为
if debug:
from waitress import serve
serve(
app,
host=address,
port=int(port),
threads=workers,
channel_timeout=timeout,
expose_tracebacks=debug)
这样就使用Waitress运行superset了。
注意运行命令是
Python superset runserver -d
三、多数据源支持
直接使用安装说明中的表格
我使用的是mssql数据库,因此执行命令
pip install pymssql
但是表中mssql的数据库前缀不对,应该是
mssql+pymssql://数据库登录名:登录密码@数据库地址:端口号/数据库
例子
mssql+pymssql://sa:sa@192.168.0.100:1433/order
四、匿名访问设置
开发完dashboard后,希望能直接链接到现有系统中使用,需要匿名访问。折腾了半天总算成功了。
官网http://airbnb.io/superset/security.html中有关于安全的部分。
Superset中默认有Admin,Alpha ,Gamma,sql_lab,Public6种角色,不要删除或者修改它们的名字。可以自己新增角色。
其中public角色是允许用户匿名访问的。但是需要设置。
官网中说明是修改superset_config.py 文件中的PUBLIC_ROLE_LIKE_GAMMA = True 。
但是superset中没有superset_config.py文件,只有config.py,我首先修改了config.py中的PUBLIC_ROLE_LIKE_GAMMA = True 。重启服务器,不能实现匿名,自动跳转到登录界面。
在Baidu、issue中都没有方法。最终回到官网说中提到的superset_config.py文件。复制config.py文件,重命名为superset_config.py,修改其中的PUBLIC_ROLE_LIKE_GAMMA = True 。
重启服务器,直接访问dashboard地址,提示变为,没有数据源访问权限。使用管理员帐号登录系统,给public角色添加access to datasource权限。
再次直接访问dashboard地址,可以直接访问了。