1. 简介
Redash是全球最受欢迎的开源实时数据可视化和商业智能(BI)软件,基于新一代云计算和数据分析技术,架构最先进、支持云部署、大并发、定时主动获取等特征;支持数据源种类最全、分析统计图最专业;响应式B/S架构、操作简单、自助使用、会写SQL就会定义报表、队列技术运行快捷、扩展性强、拥有成本低;广泛应用于企事业单位、政府机关等需要数据驱动、数据决策、数字化和数智化建设等领域。
2. 快速部署
Redash已发布到开源应用商店,可以直接从应用商店安装 Redash。
3.应用制作过程
已经制作好适用与Rainbond的DockerCompose,请参考Github
本次应用制作 参考官方的安装方式,使用docker-compose
安装,官方docker-compose地址
打开官方Github地址进入data
目录可看到docker-compose.yml
文件,查看文件可看到有一些不是docker-compose
的原生语法,比如&
,<<:
这些都是anchor 的YAML功能,并非Docker Compose特有。可参考 https://learnxinyminutes.com/docs/yaml/ 详细了解。
包括官方的yaml文件引入的环境变量方式是引入的文件。
以上在Rianbond的基于DockerCompose创建组件中是不支持的,只支持原生语法。
接下来修改DockerCompose.yml文件:
1. 首先修改DockerCompose文件中的 env_file: /opt/redash/env
,改为environment:
引入
#编辑setup.sh脚本文件,注释掉最后几行,保留 create_config 用于生成环境变量配置文件
vim setup.sh
#install_docker
#create_directories
create_config
#setup_compose
#最后执行
sh setup.sh
#可在/opt/redash中看到env文件
2. 将输出后的env文件写入到DockerCompose文件中
可以看到官方DockerCompose文件开头的这部分,这部分意思是基础环境,&redash-service
代表基础环境名称,供其他引用。
当然这部分也不是DockerCompose原生语法,在Rainbond是不支持的,完成后需要删掉这部分。
x-redash-service: &redash-service
image: redash/redash:8.0.0.b32245
depends_on:
- postgres
- redis
env_file: /opt/redash/env
restart: always
可以看到大部分模块都引用了<<: *redash-service
,这意思是引用基础模块。我们需要把每个引用基础模块的部分复制到所需模块,需要更改所有引用了基础模块的部分。这里举个例子,例如:
server:
image: redash/redash:8.0.0.b32245
depends_on:
- postgres
- redis
restart: always
command: server
ports:
- "5000:5000"
environment:
REDASH_WEB_WORKERS: 4
PYTHONUNBUFFERED: 0
REDASH_LOG_LEVEL: INFO
REDASH_REDIS_URL: redis://127.0.0.1:6379/0
POSTGRES_PASSWORD: xDiTJI9b4851H3NPIrmW91TLKlomqK1g
REDASH_COOKIE_SECRET: CBvWC682U8DvhkGThqsvLT84kHHqHtMD
REDASH_SECRET_KEY: 3j0uYt2k0ugHIaoBK2BXePo4WsHkmoXK
REDASH_DATABASE_URL: postgresql://postgres:xDiTJI9b4851H3NPIrmW91TLKlomqK1g@127.0.0.1/postgres
可以看到以上内容的environment
部分,以及把生成的环境变量引入进来了。其中127.0.0.1是Rainbond中的连接方式,请参考文档组件通信。默认是DockerCompose的连接方式。
3. 修改初始化数据库
官方提供的初始化方式,使用命令初始化。
docker-compose run --rm server create_db
只有我觉得这种方式鸡肋吗!!
所以我在初始化后导了一份SQL文件重新做了镜像,使用pgsql官方镜像,把sql丢进/docker-entrypoint-initdb.d
下,启动容器时自动初始化。
文件可查看Github仓库
也可使用制作好的镜像:registry.cn-hangzhou.aliyuncs.com/zqqq/redash-pgsql:9.5.6-alpine
FROM postgres:9.5.6-alpine
ADD public.sql /docker-entrypoint-initdb.d
还需要修改postgres
的volumes
字段:
volumes:
- /opt/redash/postgres-data:/var/lib/postgresql/data
#修改为
volumes:
- /var/lib/postgresql/data
#在Rainbond中只需要指定容器内需要挂载的路径
4. 修改nginx配置文件
官方镜像中的配置文件中的proxy_pass http://server:5000
,这种方式是DockerCompose连接方式,在Rainbond中不支持,需要改为127.0.0.1。所以需要重新做个镜像。
文件可查看Github仓库
也可使用制作好的镜像:registry.cn-hangzhou.aliyuncs.com/zqqq/redash-nginx:latest
server {
listen 80;
gzip on;
gzip_types *;
gzip_proxied any;
proxy_buffer_size 8k;
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 $http_x_forwarded_proto;
proxy_pass http://127.0.0.1:5000;
}
}
5. 至此完成,下面是完整yml文件
version: "2"
services:
server:
image: redash/redash:8.0.0.b32245
depends_on:
- postgres
- redis
restart: always
command: server
ports:
- "5000:5000"
environment:
REDASH_WEB_WORKERS: 4
PYTHONUNBUFFERED: 0
REDASH_LOG_LEVEL: INFO
REDASH_REDIS_URL: redis://127.0.0.1:6379/0
POSTGRES_PASSWORD: xDiTJI9b4851H3NPIrmW91TLKlomqK1g
REDASH_COOKIE_SECRET: CBvWC682U8DvhkGThqsvLT84kHHqHtMD
REDASH_SECRET_KEY: 3j0uYt2k0ugHIaoBK2BXePo4WsHkmoXK
REDASH_DATABASE_URL: postgresql://postgres:xDiTJI9b4851H3NPIrmW91TLKlomqK1g@127.0.0.1/postgres
scheduler:
image: redash/redash:8.0.0.b32245
depends_on:
- postgres
- redis
restart: always
command: scheduler
environment:
QUEUES: "celery"
WORKERS_COUNT: 1
PYTHONUNBUFFERED: 0
REDASH_LOG_LEVEL: INFO
REDASH_REDIS_URL: redis://127.0.0.1:6379/0
POSTGRES_PASSWORD: xDiTJI9b4851H3NPIrmW91TLKlomqK1g
REDASH_COOKIE_SECRET: CBvWC682U8DvhkGThqsvLT84kHHqHtMD
REDASH_SECRET_KEY: 3j0uYt2k0ugHIaoBK2BXePo4WsHkmoXK
REDASH_DATABASE_URL: postgresql://postgres:xDiTJI9b4851H3NPIrmW91TLKlomqK1g@127.0.0.1/postgres
scheduled_worker:
image: redash/redash:8.0.0.b32245
depends_on:
- postgres
- redis
restart: always
command: worker
environment:
QUEUES: "scheduled_queries,schemas"
WORKERS_COUNT: 1
PYTHONUNBUFFERED: 0
REDASH_LOG_LEVEL: INFO
REDASH_REDIS_URL: redis://127.0.0.1:6379/0
POSTGRES_PASSWORD: xDiTJI9b4851H3NPIrmW91TLKlomqK1g
REDASH_COOKIE_SECRET: CBvWC682U8DvhkGThqsvLT84kHHqHtMD
REDASH_SECRET_KEY: 3j0uYt2k0ugHIaoBK2BXePo4WsHkmoXK
REDASH_DATABASE_URL: postgresql://postgres:xDiTJI9b4851H3NPIrmW91TLKlomqK1g@127.0.0.1/postgres
adhoc_worker:
image: redash/redash:8.0.0.b32245
depends_on:
- postgres
- redis
restart: always
command: worker
environment:
QUEUES: "queries"
WORKERS_COUNT: 2
PYTHONUNBUFFERED: 0
REDASH_LOG_LEVEL: INFO
REDASH_REDIS_URL: redis://127.0.0.1:6379/0
POSTGRES_PASSWORD: xDiTJI9b4851H3NPIrmW91TLKlomqK1g
REDASH_COOKIE_SECRET: CBvWC682U8DvhkGThqsvLT84kHHqHtMD
REDASH_SECRET_KEY: 3j0uYt2k0ugHIaoBK2BXePo4WsHkmoXK
REDASH_DATABASE_URL: postgresql://postgres:xDiTJI9b4851H3NPIrmW91TLKlomqK1g@127.0.0.1/postgres
redis:
image: redis:5.0-alpine
restart: always
ports:
- "6379:6379/tcp"
postgres:
image: registry.cn-hangzhou.aliyuncs.com/zqqq/redash-pgsql:9.5.6-alpine
environment:
PYTHONUNBUFFERED: 0
REDASH_LOG_LEVEL: INFO
REDASH_REDIS_URL: redis://127.0.0.1:6379/0
POSTGRES_PASSWORD: xDiTJI9b4851H3NPIrmW91TLKlomqK1g
REDASH_COOKIE_SECRET: CBvWC682U8DvhkGThqsvLT84kHHqHtMD
REDASH_SECRET_KEY: 3j0uYt2k0ugHIaoBK2BXePo4WsHkmoXK
REDASH_DATABASE_URL: postgresql://postgres:xDiTJI9b4851H3NPIrmW91TLKlomqK1g@127.0.0.1/postgres
volumes:
- /var/lib/postgresql/data
restart: always
ports:
- "5432:5432/tcp"
nginx:
image: registry.cn-hangzhou.aliyuncs.com/zqqq/redash-nginx:latest
ports:
- "80:80"
depends_on:
- server
links:
- server:redash
restart: always
最后:Redash有中文版,有兴趣的小伙伴可根据以上思路,制作一个中文版的。制作成功的小伙伴如果有意向贡献给开源商店,请在贡献主题发布帖子哦。欢迎贡献👏👏👏