丰富的线上&线下活动,深入探索云世界
做任务,得社区积分和周边
最真实的开发者用云体验
让每位学生受益于普惠算力
让创作激发创新
资深技术专家手把手带教
遇见技术追梦人
技术交流,直击现场
海量开发者使用工具、手册,免费下载
极速、全面、稳定、安全的开源镜像
开发手册、白皮书、案例集等实战精华
为开发者定制的Chrome浏览器插件
一直在调研一个轻量级开源的BI系统。之前我们生产环境使用的aliyun的QuickBi,也调研了另外一个airflow的开源商业智能superset。不得不承认QuickBI正在日益完善变得好用,但是因其重量级,不灵活,支持数据源单一(比如普通版本只支持自建MySQL|RDS阿里云内部的一些组件)superset有类似问题。不支持Hive(高级版支持)|Presto等数据源数据读取给QuickBi的灵活性带来很多挑战。
所以基于上面原因,选择一个轻量级且可以方便定制的BI工具会让效率得到一定提升。
部署到生产环境(withouddocker)
这里我使用的环境是AliyunCentOS7.4
1.安装miniconda
readsh有几个比较重要的组件,后端有PythonFlask有PostgreSQL有redis,前端有NodeJs的转发。首先我们在CentOs上为部署redash单独创建redash的账户然后为其安装miniconda,安装miniconda见redash目前的最新版7.0.0还在使用Python2.7,所以要安装对应的2.7.x的conda环境。
2.安装PostgreSQL11
根据官网的引导,选择自己想要安装的版本和平台。目前最新的版本是ver11然后CentOS7.x版本
1.yuminstall安装prm源
yuminstall
2.安装psql客户端包
yuminstallpostgresql11
3.安装postgresql-server
yuminstallpostgresql11-server
设置开机启动和启动postgresql
/usr/pgsql-11/bin/postgresql-11-setupinitdb
systemctlenablepostgresql-11
systemctlstartpostgresql-11
3.安装redis
$wget
$tarxzfredis-5.0.5.tar.gz
$cdredis-5.0.5
$make
使用
$src/redis-server即可启动服务器了
4.安装或更新NodeJs
安装下载Linux二进制文件x64版本。并参考NodeJSwiki
解压NodeJs二进制文件到指定路径
比如目标地址/usr/local/lib/nodejs
VERSION=v10.15.0
DISTRO=linux-x64
sudomkdir-p/usr/local/lib/nodejs
sudotar-xJvfnode-$VERSION-$DISTRO.tar.xz-C/usr/local/lib/nodejs
设置环境变量~/.proofileor~/.bashrc
#Nodejs
exportPATH=/usr/local/lib/nodejs/node-$VERSION-$DISTRO/bin:$PATH
refresh环境变量。
测试安装是否成功
$node-v
$npmversion
$npx-v
设置完成之后做个ln到目标地址
sudoln-s/usr/local/lib/nodejs/node-$VERSION-$DISTRO/bin/node/usr/bin/node
sudoln-s/usr/local/lib/nodejs/node-$VERSION-$DISTRO/bin/npm/usr/bin/npm
sudoln-s/usr/local/lib/nodejs/node-$VERSION-$DISTRO/bin/npx/usr/bin/npx
如果确认要使用现在的版本可以直接使用ln-sf指定。
5.前端部分
所有环境都安装完毕之后终于可以愉快的开始启动项目了
从git上clone下redash并且用condasource一个新的环境使用
pipinstall-rrequirements.txt-rrequirements_all_ds.txt
依托勤劳的社区,使得redash可以支持海量的数据源。
npminstall
npmrunbuild
前端这边不得不提一点,redash项目前后端分离。中间依托了前端node的一个叫dev-server的服务器用于转发前后端请求。所以当我们在访问redash的时候其实请求会先打到node服务器那边然后再由node的服务器进行转发到后端flask服务器。
这里因为我只打算在入口的位置来配置nginx服务器,并不打算在redash服务器这边再用nginx转发一下。所以这里我需要配置redash的node服务器去监听0.0.0.0所有范围的8080端口。8080端口是默认的所以我修改了node里面的webpack.config.js配置指定让devServer监听0.0.0.0地址。
这里不指定host默认会监听127.0.0.1:8080
devServer:{
host:'0.0.0.0',
inline:true,
index:"/static/index.html",
historyApiFallback:{
修改了这里之后我们还需要去package.json去修改一个start参数去后面追加--disableHostCheck=true
之后我们再使用npmrunstart将前端的服务器启动起来即可。
6.后端部分
redash的配置写在->redash/redash/settings/init.py中,这里囊括了所有的配置。如果使用环境变量的配置要到这里来这里参考key的名称。
例如我的redis就不是安装在本地而是直接使用我们服务器集群的redis所以我需要重新指定redis地址。
#]]redashconfig
exportREDIS_URL=""
exportREDASH_THROTTLE_LOGIN_PATTERN="10000/hour"
exportREDASH_HOST=""
我暂时配置了这些参数,第一个是redis的访问地址,第二个是redash提供的一个接口频率限制函数读取的变量。我这里直接写得很大,不想去改代码。否则按照默认值可能经常都能看到这样的界面TooManyRequests。
配置设置好之后可以使用命令bin/run./manage.pycheck_settings看下现在加载的配置是否是想要的。
7.数据库部分
创建新用户
postgres=#CREATEUSERredashWITHPASSWORD'*';
这里不配置其他数据库会默认使用postgres这个数据库
可以使用psql-dpostgres访问数据库。
bin/run./manage.pydatabasecreate_tables
自动mapper数据表。redash在python中建立了orm模型,并且其使用的SQLAlchemy支持直接映射。
8启动服务。
前端server
npmrunstaart
flaskserver
bin/run./manage.pyrunserver--debugger--reload
celeryserver
./bin/runceleryworker--app=redash.worker--beat-Qscheduled_queries,queries,celery-c2
即可访问redash的login页面了。到此也就配置完毕了。
需要注意的地方
1.在整个配置过程中涉及到的部分还是非常多。需要注意前端的node环境虽然官方网站上说npm6.9以上即可,但是实际操作中很多包都无法正常安装,我是重新更新到最新的node才完成了安1.装。
2.在配置setting的过程中注意仔细检查各部分参数,并且使用manage提供的参数检查命令来检查参数是否符合预期。
5.生产环境如果压力比较大,可以使用gunicorn把wsgi那边包一下。redash为了提供方便已经将wsgi单独提出来写了一个文件,并在里面给大家准备好了app=xxxx。。。。贴心。
6.devServer报错
【HPM】Erroroccurredwhiletryingtoproxyrequest/api/sessionfromredash.hundun.cnto(ECONNRESET)()
参考了一些同样遇到问题的人,发现7.0里面有个配置
proxy:【
{
context:【
"/login",
"/logout",
"/invite",
"/setup",
"/status.json",
"/api",
"/oauth"
】,
target:redashBackend+"/",
changeOrigin:false,
secure:false
},
context:path=>{
//CSS/JSforserver-renderedpagesshouldbeservedfrombackend
return/^\/static\/【a-z】+.【0-9a-fA-F】+.(css|js)$/.test(path);
changeOrigin:true,
这里的proxy的第一个元素的changeOrigin需要设置为true,即可解决这个问题。
其实在使用过程中,还觉得蛮顺利的。非常好的查询复用功能,意外的支持一些骚操作比如词云,感觉二次开发可以很好的提供的功能会丰富redash。
唯一觉得不太好的地方是,后端代码感觉有点乱。。。包括import之类的写法都很随意,还没有整个仔细来看。之后使用过程中如果要进行二次开发,还会再记录一些有趣的东西。
以上
Reference:
redashgithub
DeveloperInstallationGuide
PostgreSQLInstall
RedisInstall
LTSNodeJsInstall
【HPM】Erroroccurredwhiletryingtoproxyrequest/fromlocalhost:3000to