Redash离线环境部署.1(centos+windows)

时间:2024-03-17 07:59:03
  • 背景

  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长这样Redash离线环境部署2020.1(centos+windows)
  • 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也不支持windowwindows下这一步我没有跑,仅仅停留在上一步,能进入到主页面,但是无法查询数据

部署过程(无网络的机器上,这里无网的机子以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拷到服务器上的路径下:

Redash离线环境部署2020.1(centos+windows)

5、再linux服务器上执行安装命令,pip install --no-index --find-links=savetest/whls -r backup.txt

 

如果有问题,参考下面的建议。

包依赖列表:

Redash离线环境部署2020.1(centos+windows)

Redash离线环境部署2020.1(centos+windows)

Redash离线环境部署2020.1(centos+windows)

Redash离线环境部署2020.1(centos+windows)

Redash离线环境部署2020.1(centos+windows)

Redash离线环境部署2020.1(centos+windows)

Redash离线环境部署2020.1(centos+windows)

Redash离线环境部署2020.1(centos+windows)

Redash离线环境部署2020.1(centos+windows)

Redash离线环境部署2020.1(centos+windows)

Redash离线环境部署2020.1(centos+windows)

Redash离线环境部署2020.1(centos+windows)

坑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包互相依赖Redash离线环境部署2020.1(centos+windows)

解决方案:一起装,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’

Redash离线环境部署2020.1(centos+windows)

这里的版本werkzeug为1.0.0, 里面已经去除了contrib,换成0.16.0版本即可解决。

坑3:No module named ‘_sqlite3’Redash离线环境部署2020.1(centos+windows)

参考文档: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这个目录。