有位朋友需要安装Redash,并且需要支持Oracle,让我帮忙安装一下。
我安装是使用的是Centos + Docker。
思路
- 准备一台服务器,Centos 7
- 安装Docker
- 下载Oracle资源包
- 修改Dockerfile
- 构建支持Oracle的Redash镜像
- Docker运行Redash相关服务
一键安装脚本
我将安装相关的命令和脚本封装了一下,可以进行一键安装。
1、下载Redash安装资源与脚本
2、解压缩到/opt目录下,最终路径为/opt/redash
3、打开/opt/redash
,
4、修改端口号,编辑docker-compose.yml
文件nginx下的ports,修改成自己想要的端口(如"8090:80"),默认是80。
3、在/opt/redash
目录下,执行sh setup.sh oracle
安装
4、等待安装完成,就可以使用了
相关源码介绍
我将之前搭建Redash的脚本进行修改
setup.sh
#!/usr/bin/env bash
# This script sets up dockerized Redash on CentOS 7
set -u
REDASH_BASE_PATH=/opt/redash
COMPOSE_PATH=/usr/local/bin/docker-compose
COMPOSE_VERSION="1.25.5"
distro=centos7
install_docker(){
# Install Docker
#sudo yum -y update
sudo yum -y install https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
sudo curl -L -o /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
sudo chown root:root /etc/yum.repos.d/docker-ce.repo
sudo restorecon -Fv /etc/yum.repos.d/docker-ce.repo
sudo yum -y install docker-ce pwgen yajl unzip
sudo systemctl start docker
# Install Docker Compose
#sudo curl -L https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
# 改成国内镜像
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x ${COMPOSE_PATH}
sudo restorecon -Fv ${COMPOSE_PATH}
# Allow current user to run Docker commands
sudo usermod -aG docker $USER
}
create_directories() {
if [[ ! -e $REDASH_BASE_PATH ]]; then
sudo mkdir -p $REDASH_BASE_PATH
sudo chown $USER:$USER $REDASH_BASE_PATH
fi
if [[ ! -e $REDASH_BASE_PATH/postgres-data ]]; then
mkdir $REDASH_BASE_PATH/postgres-data
fi
}
create_config() {
if [[ -e $REDASH_BASE_PATH/env ]]; then
rm $REDASH_BASE_PATH/env
touch $REDASH_BASE_PATH/env
fi
COOKIE_SECRET=$(pwgen -1s 32)
SECRET_KEY=$(pwgen -1s 32)
POSTGRES_PASSWORD=$(pwgen -1s 32)
REDASH_DATABASE_URL="postgresql://postgres:${POSTGRES_PASSWORD}@postgres/postgres"
echo "PYTHONUNBUFFERED=0" >> $REDASH_BASE_PATH/env
echo "REDASH_LOG_LEVEL=INFO" >> $REDASH_BASE_PATH/env
echo "REDASH_REDIS_URL=redis://redis:6379/0" >> $REDASH_BASE_PATH/env
echo "POSTGRES_PASSWORD=$POSTGRES_PASSWORD" >> $REDASH_BASE_PATH/env
echo "REDASH_COOKIE_SECRET=$COOKIE_SECRET" >> $REDASH_BASE_PATH/env
echo "REDASH_SECRET_KEY=$SECRET_KEY" >> $REDASH_BASE_PATH/env
echo "REDASH_DATABASE_URL=$REDASH_DATABASE_URL" >> $REDASH_BASE_PATH/env
echo "REDASH_ADDITIONAL_QUERY_RUNNERS=redash.query_runner.oracle" >> $REDASH_BASE_PATH/env
}
setup_compose() {
REQUESTED_CHANNEL=stable
LATEST_VERSION=`curl -s "https://version.redash.io/api/releases?channel=$REQUESTED_CHANNEL" | json_reformat | grep "docker_image" | head -n 1 | awk 'BEGIN{FS=":"}{print $3}' | awk 'BEGIN{FS="\""}{print $1}'`
cd $REDASH_BASE_PATH
if [ -n "$0" ] ; then
setup_oracle
else
GIT_BRANCH="${REDASH_BRANCH:-master}" # Default branch/version to master if not specified in REDASH_BRANCH env var
wget https://raw.githubusercontent.com/getredash/setup/${GIT_BRANCH}/data/docker-compose.yml
sed -ri "s/image: redash\/redash:([A-Za-z0-9.-]*)/image: redash\/redash:$LATEST_VERSION/" docker-compose.yml
fi
echo "export COMPOSE_PROJECT_NAME=redash" >> ~/.profile
echo "export COMPOSE_PROJECT_NAME=redash" >> ~/.bashrc
echo "export COMPOSE_FILE=/opt/redash/docker-compose.yml" >> ~/.profile
echo "export COMPOSE_FILE=/opt/redash/docker-compose.yml" >> ~/.bashrc
export COMPOSE_PROJECT_NAME=redash
export COMPOSE_FILE=/opt/redash/docker-compose.yml
/usr/local/bin/docker-compose run --rm server create_db
/usr/local/bin/docker-compose up -d
echo "Redash安装成功,请访问http://<ip>。 如需修改端口号,请修改docker-compose.yml文件下的nginx下的ports,然后执行命令 `docker-compose up -d`"
}
setup_oracle() {
cd $REDASH_BASE_PATH
if [[ -d $REDASH_BASE_PATH/instantclient_12_2 ]]; then
rm -rf $REDASH_BASE_PATH/instantclient_12_2
fi
unzip oracle/instantclient-basic-linux.x64-12.2.0.1.0.zip
unzip oracle/instantclient-sdk-linux.x64-12.2.0.1.0.zip
unzip oracle/instantclient-sqlplus-linux.x64-12.2.0.1.0.zip
docker build -t redash-oracle/redash-oracle:8.0.0.b32245 .
}
install_docker
create_directories
create_config
setup_compose
# Make the new docker user group effective, so the user doesn't need to re-login
exec sg docker newgrp `id -gn`
Dockerfile
FROM redash/redash:8.0.0.b32245
USER root
# Oracle instantclient
ADD instantclient_12_2 /usr/local/instantclient_12_2
# 将ubuntu的源改为清华源
RUN sed -i 's#http://deb.debian.org/#http://mirrors.tuna.tsinghua.edu.cn/#' /etc/apt/sources.list
RUN sed -i 's#http://security.debian.org/#http://mirrors.tuna.tsinghua.edu.cn/#' /etc/apt/sources.list
RUN apt-get update --fix-missing && apt-get install -y apt-transport-https ca-certificates --fix-missing
RUN apt-get update -y
RUN ln -s /usr/local/instantclient_12_2 /usr/local/instantclient
RUN ln -s /usr/local/instantclient/libclntsh.so.12.1 /usr/local/instantclient/libclntsh.so
RUN ln -s /usr/local/instantclient/sqlplus /usr/bin/sqlplus
RUN apt-get install libaio-dev -y
RUN apt-get clean -y
ENV ORACLE_HOME=/usr/local/instantclient
ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/instantclient
RUN pip install cx_Oracle==5.3
COPY oracle.py /app/redash/query_runner/oracle.py
COPY jql.py /app/redash/query_runner/jql.py
USER redash
#Add REDASH ENV to add Oracle Query Runner
ENV REDASH_ADDITIONAL_QUERY_RUNNERS=redash.query_runner.oracle
docker-compose.yml
version: "2"
x-redash-service: &redash-service
image: redash-oracle/redash-oracle:8.0.0.b32245
depends_on:
- postgres
- redis
env_file: /opt/redash/env
restart: always
services:
server:
<<: *redash-service
command: server
ports:
- "5000:5000"
environment:
REDASH_WEB_WORKERS: 4
scheduler:
<<: *redash-service
command: scheduler
environment:
QUEUES: "celery"
WORKERS_COUNT: 1
scheduled_worker:
<<: *redash-service
command: worker
environment:
QUEUES: "scheduled_queries,schemas"
WORKERS_COUNT: 1
adhoc_worker:
<<: *redash-service
command: worker
environment:
QUEUES: "queries"
WORKERS_COUNT: 2
redis:
image: redis:5.0-alpine
restart: always
postgres:
image: postgres:9.6-alpine
env_file: /opt/redash/env
volumes:
- /opt/redash/postgres-data:/var/lib/postgresql/data
restart: always
nginx:
image: redash/nginx:latest
ports:
- "80:80"
depends_on:
- server
links:
- server:redash
restart: always
参考
https://github.com/joaoleite/redash_oracle
https://github.com/getredash/redash