- 背景
Redash是一款开源的BI系统,核心功能是添加数据源,然后进行数据的可视化展示。一般会拿出来同Supervisor和Metabase进行选型比较,这里对三者的选型不做细致分析。而是给出在Redash开发环境部署踩过的坑,很多坑是自己琢磨出来的,网上几乎找不到更新的资料。适用于没怎么用过linux,也不怎么熟悉python的,用的是最新(master)的redash的代码(上一个发布版本8.0.0)。文中的总体步骤总体参考了,Windows环境部署开发Redash 最新版这篇博客,但是要在离线环境下部署成功,这个参考仅仅只是万里长征的第一步,最关键的是,它其实已经过时了。
- 部署过程(有网络的机器上)
注:因为我本机是windows,所以下面的过程均基于windows下的过程。
前端部分
- 安装nodejs
- Windows环境下:安装npm install cross-env,同时package.json的script长这样
- npm build (windows环境下如果client目录下没有dist会报错,可以手工在client下建一个client目录)
- npm start
服务端部分
- 安装python,当前最新的版本是3.9,我选择的是3.7(离线版详细介绍)
- 安装virtualenv (离线版详细介绍)
- 安装redis (离线版详细介绍)
- 安装pg (离线版详细介绍)
- 创建虚拟环境,并在虚拟环境下安装依赖包: pip install -r requirements.txt -r requirements_all_ds.txt -r requirements_dev.txt
坑1:pip 安装 pycrypto 报错:Microsoft Visual C++ 14.0 is required. 的解决办法
解决办法:https://blog.csdn.net/woay2008/article/details/79905627,尤其关注评论那句话:关键点:要在set Cl那个cmd窗口继续pip install,这里的set只是临时的环境变量。
坑2:fatal error C1083: Cannot open include file: 'sasl/sasl.h': No such file o r directory err
解决办法:https://blog.csdn.net/linuxpassion/article/details/88855684
坑3:依赖包ibm-db下载不下来,我采取的方案是直接去掉了该依赖包,因为直接在URL里下载该包也下载不下来。
- 数据源配置
修改默认py文件: ./redash/setting/init.py中
# 修改postgresql链接串
SQLALCHEMY_DATABASE_URI = os.environ.get("REDASH_DATABASE_URL", os.environ.get('DATABASE_URL', "postgresql://postgres:[email protected]:5432/redash"))
# 修改redis链接串
REDIS_URL = os.environ.get('REDASH_REDIS_URL', os.environ.get('REDIS_URL', "redis://localhost:6379/0"))
- 检查变量配置 python ./manage.py check_settings
- 创建数据库表 python ./manage.py database create_tables
- 启动web服务 python ./manage.py runserver --debugger –reload –host=0.0.0.0
-
启动任务队列服务 rq worker(网上有的参考为celery,殊不知最新的redash已经弃用了celery,千万别在这里浪费时间, rq也不支持window,windows下这一步我没有跑,仅仅停留在上一步,能进入到主页面,但是无法查询数据)
部署过程(无网络的机器上,这里无网的机子以centos为示例)
请务必先在有网络的机子上把部署流程走通。
安装python
1、在有网的机子上下载包python包,我下载的是3.7.6,最新的到3.9了。
把Python-3.7.6.tar.xz拷贝到无网的机器上。
2、tar -xvJf Python-3.7.6.tar.xz
3、cd Python-3.7.6
4、配置安装路径:./configure --with-ssl-default-suites=python --with-openssl=/usr/bin/ prefix=/usr/local/python3 --enable-optimizations(这里为什么配置会复杂呢,网上一般
./configure --prefix=/usr/local/python3, 这是因为在后面执行python ./manage.py check_settings检查的时候会报没有_sqlit3导致的,最终又得重新编译python,如果你还是漏掉了,没关系,后面我还会讲遇到这个错误怎么解决)
5、编译并且安装:make && make install
6、设置python3的软链接:ln -s /usr/local/python3/bin/python3 /usr/bin/python3
7、设置pip3的软链接: ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
(备注:安装过程中出现诸如缺少gcc等类似的module,按照网上寻求的方案解决即可,没有太大的问题)
安装virtualenv
1、在有网的机子上下载virtualenv包,我下载的是virtualenv-20.0.1-py2.py3-none-any.whl。
2、安装pip3 install {文件所在路径}/virtualenv-20.0.1-py2.py3-none-any.whl。(安装virtualenv是有很多依赖包,按照错误提示,逐一下载安装即可)
3、创建虚拟环境virtualenv py3 –p usr/bin/python3(如果virtualenv命令找不到,可以设置软链接到usr/bin目录下,参考:
https://blog.csdn.net/weixin_41753664/article/details/94494567 )。
4、执行source py3/bin/activate启动虚拟环境,deactivate停止虚拟环境。
安装redis
参考这篇博客:https://blog.csdn.net/qq_34727675/article/details/88128667。
安装pg
参考这篇博客:https://blog.csdn.net/TheDreamMaster/article/details/90318602。
有2个步骤在这里要做掉:
1、创建数据库create database redash;
2、修改默认的postgres用户的密码(后面配置数据源要用):
https://www.cnblogs.com/cnshen/p/10773771.html
数据源配置
修改默认py文件: ./redash/setting/init.py中
# 修改postgresql链接串
SQLALCHEMY_DATABASE_URI = os.environ.get("REDASH_DATABASE_URL", os.environ.get('DATABASE_URL', "postgresql://postgres:[email protected]:5432/redash"))
# 修改redis链接串
REDIS_URL = os.environ.get('REDASH_REDIS_URL', os.environ.get('REDIS_URL', "redis://localhost:6379/0"))
安装依赖包
安装依赖包这里可千万别想着一个个下载,一个个安装,这样估计得投入一周进去。
1、在有网的环境下已经部署好的环境下(我有网的环境是windows环境),备份环境:pip freeze > backup.txt。(https://www.cnblogs.com/yy-cola/p/9767465.html)
2、在有网的环境下下载所有的安装包:pip download –d [savetext\whls] –r backup.txt。(记得去掉那个下载不下来的包ibm-db)
3、进入savetext\whls里面,找到里面的包文件,找到win专有的包,下载linux的版本的包替换进来。这里列一下我用到的包信息供参考。(见文字后面)
4、把savetext\whls拷到服务器上的路径下:
5、再linux服务器上执行安装命令,pip install --no-index --find-links=savetest/whls -r backup.txt。
如果有问题,参考下面的建议。
包依赖列表:
坑1:Error: pg_config executable not found
参考:https://blog.csdn.net/muzilanlan/article/details/50421693?locationNum=15
坑2:mariadb-libs is obsoleted by mysql-community-libs-8.0.19-1.el7.x86_64
参考:http://blog.itpub.net/31015730/viewspace-2152272/
文中第4部,存在一个错别字:4、如上的报错,由于centos 7默认是mariadb数据库,再去安装mysql之前要先下载mariadb,这里的下载和卸载只有一字之差,但是两者表达的意思差别很大,当时在这里被迷惑了很久,其实是想表达卸载的意思。
坑3:安装rpm文件的时候提示文件冲突,我第一次遇到这个问题的时候直接放弃了,觉得这个太难了,如下:file /usr/share/man/man5/krb5.conf.5.gz from install of krb5-libs-1.15.1-37.el7_7.2.x86_64 conflicts with file from package krb5-libs-1.15.1-19.el7.x86_64
解决方案:rpm –ivh xxx.rpm --force –nodeps
坑4:出现了rpm包互相依赖
解决方案:一起装,rpm -ivh glibc-2.12-1.132.e16.x86_64.rpm glibc-common-2.12-1.132.e16.x86_64.rpm
检查变量配置
python ./manage.py check_settings
坑1:sasl/sasl.h: No such file or directory
解决方案:https://blog.csdn.net/qq_26870933/article/details/84336109
坑2:No module named ‘Werkzeug.contrib’
这里的版本werkzeug为1.0.0, 里面已经去除了contrib,换成0.16.0版本即可解决。
坑3:No module named ‘_sqlite3’
参考文档:https://www.cnblogs.com/i1991/p/9497259.html
这种情况下我这边遇到的情况比较特殊,按照这种情况下在非虚拟环境下import sqlite3没有问题,但是在虚拟环境下就不可以。找了很多办法都没有结果。后来通过whereis virtualenv 发现有很多个,一个一个的尝试:
1、virtualenv py3 –p {virtualenv的路径}
2、source py3/bin/activate
3、python
4、import sqlite3 (不报错,就说明ok了)
找到正确的那个virtualenv,重建创建一个虚拟环境,然后再安装一次依赖包,再检查变量配置。
创建数据库表
python ./manage.py database create_tables
启动web服务
python ./manage.py runserver --debugger –reload –host=0.0.0.0
启动任务队列
rq worker
打开浏览器直接访问:http://1ocalhost:5000即可。其中离线环境没有介绍前端这边,我这边是直接在有网环境下build完成后把build成果物放进去,即有client/dist这个目录。