一直在调研一个轻量级开源的 BI 系统。之前我们生产环境使用的 aliyun 的 QuickBi,也调研了另外一个 airflow 的开源商业智能 superset。不得不承认 QuickBI 正在日益完善变得好用,但是因其重量级,不灵活,支持数据源单一(比如普通版本只支持 自建 MySQL | RDS 阿里云内部的一些组件)superset 有类似问题。不支持 Hive(高级版支持) | Presto 等数据源数据读取给 QuickBi 的灵活性带来很多挑战。

不支持多数据源带来的困难表现在灵活性上,例如一个数据在集群完成计算之后,我需要再经过清洗 ETL 之后导入新建表  MySQL。给临时提数 | 可视化覆盖率 等带来很多 ETL 上的时间成本。动则半天多则一天时间,可能都浪费在了数据的导来导去的过程之中。

所以基于上面原因,选择一个轻量级且可以方便定制的 BI 工具会让效率得到一定提升。

部署到生产环境 (withoud docker)

在选择部署到生产环境之前,我尝试了使用 docker 部署了一套环境在测试服。但是服务器经常不知道怎么就被莫名打死,有时候也很卡。所以生产环境我还是尝试去部署在物理机器上。后来也碰到一些问题,会在下面把这些问题都分享一下。(官方其实是推荐使用 docker 进行部署的,在 18年社区还发生过多次讨论,最终 owner 还是提供了部署物理机的方法,我个人不喜欢把简单的应用多个组件打包部署,不好查问题)

这里我使用的环境是 Aliyun CentOS 7.4

1. 安装 miniconda

readsh 有几个比较重要的组件,后端有 Python Flask 有PostgreSQL 有 redis , 前端有 NodeJs 的转发。首先我们在 CentOs 上为部署 redash 单独创建 redash 的账户 然后为其安装 miniconda,安装 miniconda 见 https://www.cnblogs.com/piperck/p/5156493.html, redash 目前的最新版 7.0.0 还在使用 Python 2.7 ,所以要安装对应的 2.7.x 的 conda 环境。

2. 安装 PostgreSQL11

根据官网的引导,选择自己想要安装的版本和平台。目前最新的版本是 ver11 然后 CentOS7.x 版本

. yum install 安装 prm 源
yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm . 安装 psql 客户端包
yum install postgresql11 . 安装 postgresql-server
yum install postgresql11-server 设置开机启动和启动 postgresql
/usr/pgsql-/bin/postgresql--setup initdb
systemctl enable postgresql-
systemctl start postgresql-

3. 安装 redis 

$ wget http://download.redis.io/releases/redis-5.0.5.tar.gz
$ tar xzf redis-5.0..tar.gz
$ cd redis-5.0.
$ make 使用
$ src/redis-server 即可启动服务器了

4. 安装或更新 NodeJs

安装下载 Linux 二进制文件 x64 版本。并参考 NodeJS wiki

解压 NodeJs 二进制文件到指定路径

比如 目标地址 /usr/local/lib/nodejs
VERSION=v10.15.0
DISTRO=linux-x64
sudo mkdir -p /usr/local/lib/nodejs
sudo tar -xJvf node-$VERSION-$DISTRO.tar.xz -C /usr/local/lib/nodejs

设置环境变量 ~/.proofile or ~/.bashrc

# Nodejs
VERSION=v10.15.0
DISTRO=linux-x64
export PATH=/usr/local/lib/nodejs/node-$VERSION-$DISTRO/bin:$PATH

refresh 环境变量。

测试安装是否成功

$ node -v

$ npm version

$ npx -v

这里要注意相关版本号的情况。有一些版本的系统里面可能不安静之前就被人安装过 node 这里要通过版本号判断一下是否是用的就是你自己的版本。

设置完成之后做个 ln 到目标地址

sudo ln -s /usr/local/lib/nodejs/node-$VERSION-$DISTRO/bin/node /usr/bin/node

sudo ln -s /usr/local/lib/nodejs/node-$VERSION-$DISTRO/bin/npm /usr/bin/npm

sudo ln -s /usr/local/lib/nodejs/node-$VERSION-$DISTRO/bin/npx /usr/bin/npx

如果确认要使用现在的版本可以直接使用 ln -sf 指定。

5. 前端部分

所有环境都安装完毕之后终于可以愉快的开始启动项目了

从 git 上 clone 下 redash 并且用 conda source 一个新的环境 使用

pip install -r requirements.txt -r requirements_all_ds.txt

这里的 requirements_all_ds 是大家为 redash 提供的数据源的相关 python 库。也可以不全部都装,装你自己需要使用到的即可。

依托勤劳的社区,使得 redash 可以支持海量的数据源。

使用 npm 安装前端相关依赖

npm install 

npm run build 

前端这边不得不提一点,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
start": "node --max-http-header-size=16385 ./node_modules/webpack-dev-server/bin/webpack-dev-server.js --disableHostCheck=true

之后我们再使用 npm run start 将前端的服务器启动起来即可。

6.后端部分

服务器端部分其实有很多值得注意的地方。首先 readsh 给我们的默认配置是默认我们刚才将那些组件都安装在了同一台机器上面,否则你就必须面临一个重新配置相关配置参数的局面。好在 redash 将配置文件的修改放在了还算清晰的地方。

如果你没有在代码里面添加 .env 文件,所有后端服务启动的时候会默认去读取环境变量中的配置。如果环境变量里面没有配置相关的参数,那么将会直接使用所有参数的默认值加载。

redash 的配置写在 -> redash/redash/settings/__init__.py 中,这里囊括了所有的配置。如果使用环境变量的配置要到这里来这里参考 key 的名称。

例如我的 redis 就不是安装在本地而是直接使用我们服务器集群的 redis 所以我需要重新指定 redis 地址。

# >>>> redash config
export REDIS_URL="redis://10.163.13.219:19736/0"
export REDASH_THROTTLE_LOGIN_PATTERN="10000/hour"
export REDASH_HOST="http://redash.hundun.cn"

我暂时配置了这些参数,第一个是 redis 的访问地址,第二个是 redash 提供的一个接口频率限制函数读取的变量。我这里直接写得很大,不想去改代码。否则按照默认值可能经常都能看到这样的界面 https://discuss.redash.io/t/429-too-many-requests/1013 Too Many Requests。

配置设置好之后可以使用命令 bin/run ./manage.py check_settings 看下现在加载的配置是否是想要的。

7. 数据库部分

数据库部分就是使用 psql 客户端去 PostgreSQL 创建一下 redash 这个账户 并且授予相关的权限。由于我还没有使用过 PostgreSQL 。。。。操作的时候真的非常不习惯。

创建新用户

postgres=# CREATE USER redash WITH PASSWORD '*****';

这里不配置其他数据库会默认使用 postgres 这个数据库

可以使用 psql -d postgres 访问数据库。

使用

bin/run ./manage.py database create_tables

自动 mapper 数据表。 redash 在 python 中建立了 orm 模型,并且其使用的 SQLAlchemy 支持直接映射。

8 启动服务。

我们在 nginx 配置上我们要转发的 前端 dev_server 地址,然后启动相关服务。

前端 server
npm run staart flask server
bin/run ./manage.py runserver --debugger --reload celery server
./bin/run celery worker --app=redash.worker --beat -Qscheduled_queries,queries,celery -c2

即可访问 redash 的 login 页面了。到此也就配置完毕了。

需要注意的地方

1. 在整个配置过程中涉及到的部分还是非常多。需要注意前端的 node 环境虽然官方网站上说 npm 6.9 以上即可,但是实际操作中很多包都无法正常安装,我是重新更新到最新的 node 才完成了安1. 装。

2. 在配置 setting 的过程中注意仔细检查各部分参数,并且使用 manage 提供的参数检查命令来检查参数是否符合预期。

3. Too Many Requests 上面也提到了,需要配置一下 REDASH_THROTTLE_LOGIN_PATTERN 环境变量来控制这个频率,不需要的话可以从代码中将相关控制频率的地方给删除掉。

4. 还有 email 的配置,我这里直接使用 postfix 来代理邮件服务,但是我发现如果我启动邮件服务之后,创建帐号那边将不再提供设置密码的操作了,必须要邮箱认证,所以我就先关闭了。

5. 生产环境如果压力比较大,可以使用 gunicorn 把 wsgi 那边包一下。 redash 为了提供方便已经将 wsgi 单独提出来写了一个文件,并在里面给大家准备好了 app = xxxx。。。。贴心。

6. devServer 报错

[HPM] Error occurred while trying to proxy request /api/session from redash.hundun.cn to http://localhost:5000/ (ECONNRESET) (https://nodejs.org/api/errors.html#errors_common_system_errors)

参考了一些同样遇到问题的人,发现 7.0 里面有个配置

    proxy: [
{
context: [
"/login",
"/logout",
"/invite",
"/setup",
"/status.json",
"/api",
"/oauth"
],
target: redashBackend + "/",
changeOrigin: false,
secure: false
},
{
context: path => {
// CSS/JS for server-rendered pages should be served from backend
return /^\/static\/[a-z]+\.[-9a-fA-F]+\.(css|js)$/.test(path);
},
target: redashBackend + "/",
changeOrigin: true,
secure: false
}

这里的 proxy 的第一个元素的 changeOrigin 需要设置为 true,即可解决这个问题。

其实在使用过程中,还觉得蛮顺利的。非常好的查询复用功能,意外的支持一些骚操作比如词云,感觉二次开发可以很好的提供的功能会丰富 redash 。

唯一觉得不太好的地方是,后端代码感觉有点乱。。。包括 import 之类的写法都很随意,还没有整个仔细来看。之后使用过程中如果要进行二次开发,还会再记录一些有趣的东西。

以上

Reference:

https://github.com/getredash/redash    redash github

https://redash.io/help/open-source/dev-guide/setup    Developer Installation Guide

https://www.postgresql.org/download/linux/redhat/    PostgreSQL Install

https://redis.io/download    Redis Install

https://nodejs.org/zh-cn/download/    LTS NodeJs Install

https://github.com/nodejs/help/wiki/Installation

https://blog.csdn.net/zhangzeyuaaa/article/details/77941039    命令行方式登录PostgreSQL、创建用户和数据库并赋权

https://github.com/saikat/react-apollo-starter-kit/issues/20    [HPM] Error occurred while trying to proxy request / from localhost:3000 to http://localhost:8080

Redash(开源轻量级商业智能) 生产环境部署及实践 (without docker)的更多相关文章

  1. Django + Uwsgi + Nginx 的生产环境部署

    使用runserver可以使我们的django项目很便捷的在本地运行起来,但这只能在局域网内访问,如果在生产环境部署django,就要多考虑一些问题了.比如静态文件处理,安全,效率等等,本篇文章总结归 ...

  2. Spring Boot (二)集成Jsp与生产环境部署

    一.简介 提起Java不得不说的一个开发场景就是Web开发,也是Java最热门的开发场景之一,说到Web开发绕不开的一个技术就是JSP,因为目前市面上仍有很多的公司在使用JSP,所以本文就来介绍一下S ...

  3. 【原创】大数据基础之Airflow(2)生产环境部署airflow研究

    一 官方 airflow官方分布式部署结构图 airflow进程 webserver scheduler flower(非必须) worker airflow缺点 scheduler单点 通过在sch ...

  4. 八、SpringBoot生产环境部署

    1.下载安装Tomcat 下载地址:https://tomcat.apache.org/download-90.cgi 如下图所示: 2.入口类继承SpringBootServletInitializ ...

  5. 10: Django + Uwsgi + Nginx 的生产环境部署

    1.1 一些重要概念 1.Web协议介绍 Web协议出现顺序: CGI -> FCGI -> WSGI -> uwsgi 1. CGI:  最早的协议 2. FCGI:  比CGI快 ...

  6. Spring Boot 集成Jsp与生产环境部署

    一.简介 提起Java不得不说的一个开发场景就是Web开发,也是Java最热门的开发场景之一,说到Web开发绕不开的一个技术就是JSP,因为目前市面上仍有很多的公司在使用JSP,所以本文就来介绍一下S ...

  7. Django+Nginx+uWSGI生产环境部署

    生产环境中的数据流 参考文档: wsgi详解:https://blog.csdn.net/li_101357/article/details/52748323 wsgi协议介绍(萌新版):https: ...

  8. Centos7 HyperLedger Fabric 1.4 生产环境部署

    Kafka生产环境部署案例采用三个排序(orderer)服务.四个kafka.三个zookeeper和四个节点(peer)组成,共准备八台服务器,每台服务器对应的服务如下所示: kafka案例网络拓扑 ...

  9. 深度学习Tensorflow生产环境部署(上·环境准备篇)

    最近在研究Tensorflow Serving生产环境部署,尤其是在做服务器GPU环境部署时,遇到了不少坑.特意总结一下,当做前车之鉴. 1 系统背景 系统是ubuntu16.04 ubuntu@ub ...

随机推荐

  1. 二分法在JavaScript中的应用实例

    前言:原来一直对算法和数据结构望而却步,总觉得前端可能对这块要求不用那么高,但是随着开发经验的增长以及阅历的提升,发现算法和数据结构还是相当重要的,在一些复杂功能的研发中都可以看得到它们的身影.要想提 ...

  2. Centos 7系统在线安装docker

    在线安装docker 以下操作步骤均在root用户下操作 1. 检查内核是否符合要求 Docker 要求 Centos系统的内核版本高于 3.10 ,建议在Centos 7版本命令如下: uname ...

  3. 5_PHP数组_3_数组处理函数及其应用_2_数组统计函数

    以下为学习孔祥盛主编的<PHP编程基础与实例教程>(第二版)所做的笔记. 一.数组统计函数 数组统计函数是指统计数组各元素的值,并对这些值进行简单分析. 1. count() 函数 该函数 ...

  4. kubernetes第八章--NFS PersistentVolume

  5. js合并多个array

    Array.prototype.concat.call(array1, array2, array3, ...)

  6. vue2.0项目在360兼容模式下打开空白

    安装两个依赖环境 yarn add babel-polyfill -D yarn add babel-preset-es2015 babel-cli -D 在main.js中引入babel-polyf ...

  7. 逗号分隔的字符串转成表格参与IN条件查询

    返回值为'1,2,3,4,5,6,7',是一个字符串,如果要用IN 查询的话sql认为这是一个完整的字符串,需要将内容分隔转换变成table 定义函数如下: create Function sysfS ...

  8. Navicat Premium12激活教程

    如果本文对你有用,请爱心点个赞,提高排名,帮助更多的人.谢谢大家!❤ 如果解决不了,可以在文末进群交流. 先到官网下载Navicat,然后安装(怎么安装就不阐述了). 然后,到Github上下载作者发 ...

  9. 【转】IP报文格式详解

    下图为常见的IP报文格式表: 上面是IP的报文格式,接下来我们先说明各个字段的意义.然后,用Etheral软件转包分析IP的报文格式. 1.版本:ip报文中,版本占了4位,用来表示该协议采用的是那一个 ...

  10. 为openstack制作CoreOS虚拟机镜像(基于CoreOS官方提供镜像)

    OpenStack源码交流群: 538850354 1.下载CoreOS镜像(633.1.0版本) CoreOS官网已经有openstack使用的虚拟机镜像,可以直接下载,然后进行修改 http:// ...