docker
docker-compose
redash

redashのdockerにoracleのデータソースを追加する

概要

redashのdockerがそのままではoracle使用できなかったので追加しました

環境情報

  • Docker 17.05.0-ce
  • docker-compose 1.18.0
  • redash 4.0.0

oracleを取得する

  • ダウンロードページ にアクセスしてoracleを取得します

    • instantclient-basic-linux.x64-12.2.0.1.0.zip
    • instantclient-sdk-linux.x64-12.2.0.1.0.zip
    • instantclient-sqlplus-linux.x64-12.2.0.1.0.zip
  • 取得したファイルは使用するサーバに配置しておきます

下準備

  • oracle下にダウンロードしたzipファイルを置きます
mkdir -p redash/oracle/
cd redash

Dockerfileの作成

  • redashのDockerfileを修正してoracleを認識するのに必要な設定をします
Dockerfile
FROM redash/redash:latest

USER root

ADD oracle/instantclient-basic-linux.x64-12.2.0.1.0.zip /tmp/instantclient-basic-linux.x64-12.2.0.1.0.zip
ADD oracle/instantclient-sdk-linux.x64-12.2.0.1.0.zip /tmp/instantclient-sdk-linux.x64-12.2.0.1.0.zip
ADD oracle/instantclient-sqlplus-linux.x64-12.2.0.1.0.zip /tmp/instantclient-sqlplus-linux.x64-12.2.0.1.0.zip

RUN mkdir -p /opt/oracle/
RUN apt-get update  -y
RUN apt-get install -y unzip

RUN unzip /tmp/instantclient-basic-linux.x64-12.2.0.1.0.zip -d /opt/oracle/
RUN unzip /tmp/instantclient-sdk-linux.x64-12.2.0.1.0.zip -d /opt/oracle/
RUN unzip /tmp/instantclient-sqlplus-linux.x64-12.2.0.1.0.zip -d /opt/oracle/

RUN ln -s /opt/oracle/instantclient_12_2 /opt/oracle/instantclient
RUN ln -s /opt/oracle/instantclient/libclntsh.so.12.1 /opt/oracle/instantclient/libclntsh.so
RUN ln -s /opt/oracle/instantclient/sqlplus /usr/local/bin/sqlplus

RUN apt-get install libaio-dev -y
RUN apt-get clean -y

ENV ORACLE_HOME=/opt/oracle/instantclient
ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/oracle/instantclient

RUN pip install cx_Oracle==5.2.1

#Add REDASH ENV to add Oracle Query Runner
ENV REDASH_ADDITIONAL_QUERY_RUNNERS=redash.query_runner.oracle

USER redash

docker imageの作成

  • buildしてイメージを作成します
docker build -f Dockerfile -t redash_oracle

docker-composeの作成

  • docker-compose.production.yml のserverとworkerのimageを上記で作成したものに修正します
  • 文字コードの部分は環境に合わせて修正してください
  • メールサーバも設定します
docker-compose.yml
version: '2'
services:
  server:
    image: redash_oracle
    command: server
    depends_on:
      - postgres
      - redis
    ports:
      - "5000:5000"
    environment:
      PYTHONUNBUFFERED: 0
      REDASH_LOG_LEVEL: "INFO"
      REDASH_REDIS_URL: "redis://redis:6379/0"
      REDASH_DATABASE_URL: "postgresql://postgres@postgres/postgres"
      REDASH_COOKIE_SECRET: veryverysecret
      REDASH_WEB_WORKERS: 4
      # mail関連の設定
      REDASH_MAIL_SERVER: "xxx.xxx"
      REDASH_MAIL_PORT: 25 
      REDASH_MAIL_DEFAULT_SENDER: "redash@xxxx.xxx"
      REDASH_HOST: ""
      # oracleの文字コード
      NLS_LANG: "JAPANESE_JAPAN.JA16SJISTILDE"
      NLS_DATE_FORMAT: "YYYY-MM-DD"
    restart: always
  worker:
    image: redash_oracle
    command: scheduler
    environment:
      PYTHONUNBUFFERED: 0
      REDASH_LOG_LEVEL: "INFO"
      REDASH_REDIS_URL: "redis://redis:6379/0"
      REDASH_DATABASE_URL: "postgresql://postgres@postgres/postgres"
      QUEUES: "queries,scheduled_queries,celery"
      WORKERS_COUNT: 2
      # mail関連の設定
      REDASH_MAIL_SERVER: "xxx.xxx"
      REDASH_MAIL_PORT: 25 
      REDASH_MAIL_DEFAULT_SENDER: "redash@xxxx.xxx"
      REDASH_HOST: ""
      # oracleの文字コード
      NLS_LANG: "JAPANESE_JAPAN.JA16SJISTILDE"
      NLS_DATE_FORMAT: "YYYY-MM-DD"
    restart: always
  redis:
    image: redis:3.0-alpine
    restart: always
  postgres:
    image: postgres:9.5.6-alpine
    # volumes:
    #   - /opt/postgres-data:/var/lib/postgresql/data
    restart: always
  nginx:
    image: redash/nginx:latest
    ports:
      - "80:80"
    depends_on:
      - server
    links:
      - server:redash
    restart: always

起動

docker-compose -f docker-compose.yml run --rm server create_db
docker-compose -f docker-compose.yml up -d
  • デフォルトでは80番ポートになっているので、アクセスすればユーザ作成画面になっています

参考

https://hub.docker.com/r/joaoleite/redash_oracle/~/dockerfile/
https://blog.bulkus.net/post/redash_oracle/