背景
redash 官方仅提供了 ubuntu 的安装脚本,没有提供 centos 的安装脚本。
根据最下方附上的 github 链接,本文一步一步的在 centos 下从头安装上了 redash.
简单来说就是:
- 安装 redis
- 安装 PostgreSQL 数据库(估计也可以使用其它数据库)
- 安装 nodejs 相关
- 安装 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
安装
安装 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
- missing script: bower
A: npm install bower -g --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
参考来源
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于