redash 在 CentOS 下的安装

本贴最后更新于 2224 天前,其中的信息可能已经时过境迁

背景

redash 官方仅提供了 ubuntu 的安装脚本,没有提供 centos 的安装脚本。

根据最下方附上的 github 链接,本文一步一步的在 centos 下从头安装上了 redash.

简单来说就是:

  1. 安装 redis
  2. 安装 PostgreSQL 数据库(估计也可以使用其它数据库)
  3. 安装 nodejs 相关
  4. 安装 nginx 做请求转发

记录的比较详细, 细节比较多. 有问题欢迎留言探讨.

步骤

切换到 root 权限

安装 redis

安装 redis

yum install redis

启动

    systemctl enable redis
    systemctl start redis

或者

    bin/redis-server conf/redis.conf

确认安装正常

redis-cli

127.0.0.1:6379> SET mykey abeffect
OK
127.0.0.1:6379> GET mykey
"abeffect"
127.0.0.1:6379> keys *
1) "mykey"
127.0.0.1:6379>

127.0.0.1:6379> EXISTS mykey
(integer) 1
127.0.0.1:6379> EXISTS mykeys
(integer) 0

127.0.0.1:6379> TYPE mykey
string

安装 PostgreSQL

安装

yum install postgresql postgresql-server postgresql-devel (devel包在的`pg_config`文件在安装redash的依赖时会用)

[CentOS 6]
初始化数据库

$sudo /etc/init.d/postgresql initdb
Initializing database:                                     [  OK  ]

启动

$sudo /etc/init.d/postgresql start
Starting postgresql service:                               [  OK  ]

[CentOS 7]

建立数据目录

    export PGDATA=/var/lib/pgsql/data

初始化数据库

    initdb

启动数据库

推荐使用

    systemctl enable postgresql
    systemctl start postgresql

或者

    postgres -D /var/lib/pgsql/data

或者

    pg_ctl -D /var/lib/pgsql/data -l logfile start

测试

# su postgres

创建数据库test
$ createdb test

$ psql test
psql (8.4.20)
Type "help" for help.

创建新用户

$ psql

# create user username with SUPERUSER password 'password';

如果报错 could not connect to database postgres: FATAL: Ident authentication failed,则需要把验证方式从 ident 改为 MD5

修改文件 /var/lib/pgsql/data/pg_hba.conf

将 ident 改为 md5

新的内容为

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# "local" is for Unix domain socket connections only
local   all         all                               md5
# IPv4 local connections:
host    all         all         127.0.0.1/32          md5
# IPv6 local connections:
host    all         all         ::1/128               md5

重启服务生效

[CentOS 6]

$sudo /etc/init.d/postgresql reload

[CentOS 7]


$pg_ctl -D /var/lib/pgsql/data -l logfile restart

登录

$psql -Upostgres
Password for user postgres:
psql (8.4.20)
Type "help" for help.

下面的 pg 相关,不是必须的,可以跳过.

修改默认用户的密码

$ psql

# ALTER USER postgres WITH PASSWORD '`new_password`';
# select * from `pg_shadow`;

安装 redash

下载

官方下载最新的稳定版安装包,目前是 3.0.0。这是一个 nodejs 工程。

创建 python 隔离环境

sudo yum install python-virtualenv
virtualenv -p /usr/bin/python2.7 current

进入 python 隔离环境

source current/bin/activate

备用: 停用隔离环境

. current/bin/deactivate

安装 libffi-devel

确认安装了 libffi-devel 包

安装 python 依赖

pip-2.7 install --upgrade pip
pip-2.7 install --upgrade setuptools
pip-2.7 install setproctitle

pip-2.7 install -r requirements.txt
pip-2.7 install -r requirements_dev.txt

安装 requirements 时可能会遇到的问题:

  • 下载慢
    A: 使用国内镜像

  • 提示找不到:pg_config
    A: 安装包 postgres-devel

  • 提示找不到:ffi.h
    A: 安装包 libffi-devel

  • 提示找不到:openssl.h
    A: 安装包 openssl-devel

  • 提示:setuptools 版本低.
    A: 升级 setuptools, pip-2.7 install --upgrade setuptools

创建数据库

创建数据库

createdb redash
  • 提示 SQLALCHEMY_DATABASE_URI 不对
    A: 编辑 .env 文件,内容如下
REDASH_DATABASE_URL=postgresql://username:password@localhost/redash

创建数据表

./bin/run python manage.py database create_tables

创建用户(这步会报错,因为还没有用户组,可以不执行. 下面会从页面再执行的. )

./bin/run python manage.py users create --admin --password admin "Admin" "admin"

安装前端

安装 nodejs,其中包含 npm

yum install nodejs

进入 client 目录,执行

/path/to/bin/npm install

也可以使用国内镜像

/path/to/bin/npm install --registry=http://registry.npm.taobao.org
  • 提示缺少文件:sass/context.h
    A: 单独安装 node-sass
npm i node-sass@4.5.3 -g --registry=http://registry.npm.taobao.org
然后再复制到 `redash-3.0.0/node_modules/`目录下

继续执行

# 文档中建立这样执行,但是实践中可以跳过. 
npm run bower install --registry=http://registry.npm.taobao.org

npm run build --registry=http://registry.npm.taobao.org

bower 已经不推荐使用了,没有继续跟了.

启动测试服务

./bin/run python manage.py run

启动正式服务

编辑文件 /etc/supervisord.d/redash.ini,模板见附件

    systemctl start supervisord
  • 启动失败
    A: 使用 systemctl status supervisord 来查看日志

我这里因为使用了 virtualenv,所以在模板的基础上增加了两行环境变量

environment=PATH="/opt/redash/redash-4.0.0-beta/current/bin:/sbin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/usr/X11R6/bin"
redirect_stderr=true

nginx

安装 nginx,转发 80 端口的请求到 nodejs.

安装 nginx

yum install nginx

配置 nginx 做端口转发. 配置文件见附录

高级步骤

使用 supervisor 守护服务

TBD

supervisor 支持进程挂了后,自动重启服务,重新恢复功能。

安装 supervisor

sudo yum install supervisor

使用 celery 管理服务

TBD

使用 Gunicorn 部署 Flask 项目

TBD

附录

env 配置文件

.env 配置文件完整内容

REDASH_LOG_LEVEL="INFO"
REDASH_REDIS_URL=redis://localhost:6379/0
REDASH_DATABASE_URL=postgresql://username:password@localhost/redash

nginx 配置文件

nginx_redash_site

upstream rd_servers {
  server 127.0.0.1:5000;
}

server {

  server_tokens off;

  listen 80 default;

  access_log /var/log/nginx/rd.access.log;

  gzip on;
  gzip_types *;
  gzip_proxied any;

  location / {
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass       http://rd_servers;
  }
}

supervisord.conf

/etc/supervisord.d/redash.conf

[inet_http_server]
port = 127.0.0.1:9001

[program:redash_server]
command=/opt/redash/current/bin/run gunicorn -b 127.0.0.1:5000 --name redash -w 4 --max-requests 1000 redash.wsgi:app
directory=/opt/redash/current
process_name=redash_server
user=redash
numprocs=1
autostart=true
autorestart=true

# There are two queue types here: one for ad-hoc queries, and one for the refresh of scheduled queries
# (note that "scheduled_queries" appears only in the queue list of "redash_celery_scheduled").
# The default concurrency level for each is 2 (-c2), you can increase based on your machine's resources.

[program:redash_celery]
command=/opt/redash/current/bin/run celery worker --app=redash.worker --beat -c2 -Qqueries,celery --maxtasksperchild=10 -Ofair
directory=/opt/redash/current
process_name=redash_celery
user=redash
numprocs=1
autostart=true
autorestart=true

[program:redash_celery_scheduled]
command=/opt/redash/current/bin/run celery worker --app=redash.worker -c2 -Qscheduled_queries --maxtasksperchild=10 -Ofair
directory=/opt/redash/current
process_name=redash_celery_scheduled
user=redash
numprocs=1
autostart=true
autorestart=true

参考来源

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • psxiaoyao

    您好,我在 centos7 安装下出现了问题,
    [root@bogon redash-setup-centos]# pip-2.7 install --upgrade pip
    -bash: pip-2.7: 未找到命令

    1 回复
  • alanfans

    .....

    1 回复
  • psxiaoyao

    尴尬了………… 现在又出现新问题……
    (current) [root@bogon redash]# pip install -r requirements.txt
    Could not open requirements file: [Errno 2] 没有那个文件或目录: 'requirements.txt'
    You are using pip version 9.0.1, however version 10.0.1 is available.
    You should consider upgrading via the 'pip install --upgrade pip' command.
    (current) [root@bogon redash]#

    1 回复
  • alanfans

    请升级 pip,请学好英文

  • piaohailin

    不明白官方为什么不出一个 CentOS 版本的 Docker 安装包?