背景
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
安装
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
- 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
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于