BI 도구 Redash v7을 docker로 설정

14076 단어 redashredash7AWS
Redash의 최신 버전 7이 출시되고,
오랜만에 보면 상당히 셋업 방법이 바뀌었기 때문에
docker 기반 설정 노트

이전 버전의 설정 메모는 여기
htps : // 코 m/스즈키히 724/있어 ms/91950450734에 4c9913cf

전제



· AWS EC2에서 구축
· 도커 기반
・OS:Ubuntu 18.04

설정 절차



· AWS Marketplace에 설치된 AMI가 제공되고 있지만 최신 버전을 넣고 싶으므로 github에서 DL하여 직접 설정합니다.

1) EC2에 최소한 필요한 도구 설정



우선 git이 있으면 좋다.
docker, docker-compose는 후술하는 setup 스크립트로 인스톨 가능.
sudo apt-get install -y git

2) Git Hub에서 redash 세트를 git clone


git clone https://github.com/getredash/redash.git

상당한 구성이 변경되었습니다.
기존에는 "docker-compose.production.yml"이 있었지만 없어지고,
그 상당한 것은 redash/setup/docker-compose.yml 가 해당.
※redash 폴더 바로 아래의 것은 dev용입니다.

3) 설치



Redash 홈 디렉토리 만들기
sudo mkdir -p /opt/redash/

최신 버전에서는 아래와 같은 설정 스크립트가 제공되어 위를 기반으로 구축합니다.

#!/usr/bin/env bash
# This script setups dockerized Redash on Ubuntu 18.04.
set -eu

REDASH_BASE_PATH=/opt/redash

install_docker(){
    # Install Docker
    sudo apt-get update
    sudo apt-get -yy install apt-transport-https ca-certificates curl software-properties-common wget pwgen
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
    sudo apt-get update && sudo apt-get -y install docker-ce

    # Install Docker Compose
    sudo curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
    sudo chmod +x /usr/local/bin/docker-compose

    # 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
}

setup_compose() {
    REQUESTED_CHANNEL=stable
    LATEST_VERSION=`curl -s "https://version.redash.io/api/releases?channel=$REQUESTED_CHANNEL"  | json_pp  | grep "docker_image" | head -n 1 | awk 'BEGIN{FS=":"}{print $3}' | awk 'BEGIN{FS="\""}{print $1}'`

    cd $REDASH_BASE_PATH
    REDASH_BRANCH="${REDASH_BRANCH:-master}" # Default branch/version to master if not specified in REDASH_BRANCH env var
    wget https://raw.githubusercontent.com/getredash/redash/${REDASH_BRANCH}/setup/docker-compose.yml
    sed -ri "s/image: redash\/redash:([A-Za-z0-9.-]*)/image: redash\/redash:$LATEST_VERSION/" docker-compose.yml
    echo "export COMPOSE_PROJECT_NAME=redash" >> ~/.profile
    echo "export COMPOSE_FILE=$REDASH_BASE_PATH/docker-compose.yml" >> ~/.profile
    export COMPOSE_PROJECT_NAME=redash
    export COMPOSE_FILE=$REDASH_BASE_PATH/docker-compose.yml
    sudo docker-compose run --rm server create_db
    sudo docker-compose up -d
}

설치(설치)는 위 내용의 setup.sh 스크립트만 실행합니다.
sh redash/setup/setup.sh

이 중에서 실행되는 docker-compose.yml은 다음과 같습니다.

메인 redash server 외에 scheduler, scheduled_worker, adhoc_worker라는 컴포넌트로 구성되어 있다.
기타 캐시 DB에 redis, 보통 DB에 Postgres, 프런트에 nginx.

Postgres 데이터는 기본적으로 호스트 /opt/redash/postgres-data에 마운트되어 지속됩니다.
version: '2'
x-redash-service: &redash-service
  image: redash/redash:7.0.0.b18042
  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.5-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

잘하면 각 컨테이너가 시작됩니다.
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                                      NAMES
XXXXXXXXXX        nginx:latest                 "nginx -g 'daemon of…"   6 hours ago         Up 3 hours          0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   redash_nginx_1
XXXXXXXXXX        redash/redash:7.0.0.b18042   "/app/bin/docker-ent…"   6 hours ago         Up 3 hours          5000/tcp                                   redash_scheduler_1
XXXXXXXXXX        redash/redash:7.0.0.b18042   "/app/bin/docker-ent…"   6 hours ago         Up 3 hours          5000/tcp                                   redash_scheduled_worker_1
XXXXXXXXXX        redash/redash:7.0.0.b18042   "/app/bin/docker-ent…"   6 hours ago         Up 3 hours          5000/tcp                                   redash_adhoc_worker_1
XXXXXXXXXX        redash/redash:7.0.0.b18042   "/app/bin/docker-ent…"   6 hours ago         Up 3 hours          0.0.0.0:5000->5000/tcp                     redash_server_1
XXXXXXXXXX        postgres:9.5-alpine          "docker-entrypoint.s…"   6 hours ago         Up 3 hours          5432/tcp                                   redash_postgres_1
XXXXXXXXXX        redis:5.0-alpine             "docker-entrypoint.s…"   6 hours ago         Up 3 hours          6379/tcp                                   redash_redis_1


4) 액세스



호스트 서버의 IP에 액세스하면 사용 가능
첫회만 Admin 유저 설정 화면이 된다.



5) SSL 설정



디폴트에서는 80 port의 HTTP입니다만, nginx의 설정으로 SSL화도 가능.
절차는 아래.
htps : // 기 st. 기주 b. 이 m / 예 kfr / 64c9 ~ f8d2f2b703d4 ~ 44 ~ 9 ~ 45 ~ 7730

자신의 인증서를 사용하는 경우,/opt/redash/nginx/nginx.conf아래의 요소를 변경하고 저장된 crt, key 파일의 경로에 맞추기

· ssl_certificate
· ssl_certificate_key

※그 외, 「server_name」도 자신의 도메인으로 변경

https가 http로 리디렉션되는 경우



nginx 프록시가 redash 앱 측에 적절한 프로토콜을 알릴 수없는 것 같습니다. 아래에서 해소.

nginx.conf 61L
proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;

proxy_set_header X-Forwarded-Proto $scheme;
로 변경

참고:
htps : // 기주 b. 코 m/게 t레다 sh/레다 sh/이스에 s/4048

6) sqlite 파일 로드



DB 임포트에서 sqlite를 지원하지만, docker 구현의 경우 sqlite 파일의 저장 대상을 마운트해야합니다.

구체적으로는, docker-compose 파일의 redash server, scheduled_worker, adhoc_worker의 각 요소에서, volume 태그로 호스트상의 저장 장소와 docker내의 path를 대응지을 필요가 있습니다.

좋은 웹페이지 즐겨찾기