一键安装Redash(支持Oracle)

有位朋友需要安装Redash,并且需要支持Oracle,让我帮忙安装一下。

我安装是使用的是Centos + Docker。

思路

  1. 准备一台服务器,Centos 7
  2. 安装Docker
  3. 下载Oracle资源包
  4. 修改Dockerfile
  5. 构建支持Oracle的Redash镜像
  6. 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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄旺鑫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值