1. docker로 구축하는 이유가 있나요?

- redash 공식 홈페이지에서 초보자를 위해 도커로 시스템을 구축해주는 스크립트를 추천합니다.

- 그리고 기본적인 설정을 잡아주기 때문에 DB연결 등의 세부적인 작업이 필요 없습니다.

- 또한, redash 백엔드를 도커이미지로 유지하고 DB등은 직접 구축한 DB로도 변경할 수 있습니다.

- 그리고 제일 좋은 것은 구동 환경을 다 잡아둔 도커 이미지를 쓰기 때문에 환경 설정 시간이 거의 없습니다.

 

 

 

2. 환경 설명과 도커를 활용한 실습 준비

(1) 실습을 위한 기본 설명

- 도커를 기본적으로는 사용하실 수 있어야 합니다(도커 사용법도 따로 정리해서 추가하겠습니다).

- 편의를 위해서 우분투에서 systemctl 관련 세팅이 잘 되어있는 이미지를 사용합니다. 일반 우분투 이미지를 사용하면 현재 연습을 위한 환경 구축에서 도커가 잘 실행되지 않는 경우가 있었습니다.

- 결론적으로 컨테이너 내부에 다시 컨테이너들을 구축하는 경우입니다.

- 물론 자체적으로 우분투에서 구축하셔도 상관없습니다. 다만 윈도우 유저나 우분투 18.04에서의 구축을 추천하는 Redash 홈페이지 안내문에 따라 위의 방식을 택하였으니 참고해주세요.

그림으로 표현하자면 이런 구조에서 구축 실습을 하게 됩니다.

 

(2) 우분투 18.04 컨테이너 생성

- 모든 작업은 윈도우즈 cmd, 리눅스나 맥의 terminal 기반으로 설명합니다.

docker pull jrei/systemd-ubuntu:18.04
docker run -d -p 5000:5000 -p 80:80 -p 443:443 --name redash_test --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro jrei/systemd-ubuntu:18.04

- 생성한 컨테이너의 이름은 redash_test, 로컬호스트의 5000, 80, 443번 포트와 컨테이너의 5000, 80, 443번 포트를 포트포워딩 했습니다.

- Redash 서버가 기본적으로 5000번포트로 띄워지고, 우리에게 익숙한 포트 번호가 없는 도메인으로 접속하기 위한 80번 포트와 SSL 적용을 위한 443 포트 또한 포트포워딩했습니다.

- 80번 포트와 443 포트의 사용은 아직 이해하지 않으셔도 되고, 추후 Nginx를 설정 설명에서 이해하시면 됩니다.

 

(1) 터미널에서 컨테이너 상태 확인
docker ps -a

(2) 결과가 아래와 같아야 정상 작동하는 것
CONTAINER ID   IMAGE                       COMMAND                  CREATED         STATUS         PORTS                    NAMES
c7dcfad7ca41   jrei/systemd-ubuntu:18.04   "/lib/systemd/systemd"   5 minutes ago   Up 5 minutes   0.0.0.0:5000->5000/tcp   redash_test

(3) 수월한 설치를 위해 sudo 권한으로 컨테이너에 진입
docker exec -itu 0 redash_test bash

- 위의 과정 중에 docker exec -itu 0 rehasd_test bash의 -it는 익숙하지만 -itu 0가 익숙하지 않을 수 있습니다.

- u 0는 sudo 권한을 컨테이너 내에서 사용할 수 있게 하는 설정입니다.

- Redash 설치 스크립트에 sudo 권한을 요구하는 과정이 많으니 편의를 위해 꼭 sudo 권한을 사용할 수 있도록 설정합시다.

 

 

 

3. 설치 세부 과정

(1) Redash 스크립트 설치와 설치에 필요한 환경 설정

- 필수로 필요한 우분투 패키지를 설치하고 설치 스크립트를 가져옵니다.

- 기존에 도커와 도커컴포즈가 설치된 시스템에서 설치를 해보시는 경우 도커 버전이 변경될 수 있으니 주의하세요!

(1) 필요한 우분투 패키지 설치
apt-get update
apt-get install sudo
apt-get install git
apt-get install vim

(2) 설치 스크립트를 가져옵니다
git clone https://github.com/getredash/setup.git
cd setup

- (선택사항)도커 설치가 필요 없는 분은 setup.sh파일의 마지막 부분의 install_docker 부분을 삭제하시면 됩니다.

 

(2) 설치 진행과 발생할 수 있는 오류 설명

- 설치 파일의 권한을 변경하고 설치 스크립트를 실행합니다.

sudo chmod +x setup.sh
sudo ./setup.sh

- 일반적으로 첫번째로 볼 수 있는 에러는 아래와 같습니다.

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   664  100   664    0     0   1019      0 --:--:-- --:--:-- --:--:--  1018
100 11.2M  100 11.2M    0     0  2939k      0  0:00:03  0:00:03 --:--:-- 5165k
--2022-04-22 06:13:04--  https://raw.githubusercontent.com/getredash/setup/master/data/docker-compose.yml
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.111.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.108.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1076 (1.1K) [text/plain]
Saving to: 'docker-compose.yml'

docker-compose.yml            100%[=================================================>]   1.05K  --.-KB/s    in 0s

2022-04-22 06:13:04 (64.1 MB/s) - 'docker-compose.yml' saved [1076/1076]

ERROR: Couldn't connect to Docker daemon at http+docker://localhost - is it running?

If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.

- 에러메세지 설명대로 도커가 실행되지 않은 경우에 발생합니다.

- 도커를 실행하고 다시 setup 스크립트를 실행합니다.

(1) docker가 켜져있는지 확인
service --status-all

(2) 실행되지 않았다면 아래처럼 [-] 표시가 있음
 [ - ]  apparmor
 [ - ]  cron
 [ + ]  dbus
 [ - ]  docker
 [ - ]  hwclock.sh
 [ - ]  procps
 [ + ]  unattended-upgrades
 
 (3) 도커를 실행
 service docker start
 
 (4) service --status-all로 다시 확인하고 실행되었다면 [+]로 표시됨
 [ - ]  apparmor
 [ - ]  cron
 [ + ]  dbus
 [ + ]  docker
 [ - ]  hwclock.sh
 [ - ]  procps
 [ + ]  unattended-upgrades
 
 (5) 설치 스크립트를 다시 실행
 sudo ./setup.sh

- 완전히 설치가 됐다면 아래와 같은 메세지를 확인할 수 있습니다.

redash_postgres_1 is up-to-date
redash_redis_1 is up-to-date
Creating redash_server_1           ... done
Creating redash_scheduler_1        ... done
Creating redash_scheduled_worker_1 ... done
Creating redash_adhoc_worker_1     ... done
Creating redash_nginx_1            ... done

- 가끔씩 이 과정에서 time out error라는 문구와 함께 컨테이너가 일부만 생성되거나 하는 문제가 발생하는데, docker-compose의 HTTP 테스트시간이 짧게 설정되어 있어서 발생하는 문제입니다.

- 아래와 같은 과정으로 일반적으로 해결할 수 있습니다.

(1) 깨끗하게 설치하기 위해 설치되다가 멈춘 컨테이너를 삭제
docker-compose down

(2) 도커 컴포즈의 HTTP 테스트 시간을 200초 까지 늘려서 다시 생성
sudo COMPOSE_HTTP_TIMEOUT=200 docker-compose up -d

- 도커 컴포즈 설정 파일이 있는 폴더로 이동하여 정상적으로 Redash 시스템이 구축되었는지 확인합니다.

- docker-compose.yml파일에 docker-compose.yml.1와 같이 숫자가 붙은 파일들이 많이 있을텐데 반복된 설치 스크립트 실행으로 생긴 것이니 docker-compose.yml을 제외한 yml 파일은 삭제하시면 됩니다.

(1) Redash 시스템 구성과 관련된 파일들이 있는 디렉토리로 이동
cd /opt/redash

(2) 도커 컴포즈에서 Redash 시스템 구성이 잘 되었는지 확인
docker-compose ps -a

(3) 아래와 같이 나오면 성공
          Name                         Command               State              Ports
------------------------------------------------------------------------------------------------
redash_adhoc_worker_1       /app/bin/docker-entrypoint ...   Up      5000/tcp
redash_nginx_1              nginx -g daemon off;             Up      443/tcp, 0.0.0.0:80->80/tcp
redash_postgres_1           docker-entrypoint.sh postgres    Up      5432/tcp
redash_redis_1              docker-entrypoint.sh redis ...   Up      6379/tcp
redash_scheduled_worker_1   /app/bin/docker-entrypoint ...   Up      5000/tcp
redash_scheduler_1          /app/bin/docker-entrypoint ...   Up      5000/tcp
redash_server_1             /app/bin/docker-entrypoint ...   Up      0.0.0.0:5000->5000/tcp

(4) 에러 발생으로 인한 반복 과정에서 생성된 docker-compose.yml파일이 있는지 확인
ls

(5) 디렉토리에서 docker-compose.yml.1을 확인함
docker-compose.yml  docker-compose.yml.1  env  postgres-data

(6) docker-compose.yml.1을 완전히 삭제
rm -f docker-compose.yml.1

 

 

3. 기본적인 설치를 완료했다!

- 웹브라우저에서 내 컴퓨터의 80번이나 5000번 포트로 접속해서 아래와 같은 화면이 뜨면 시스템 구축에 성공한 것이다.

- localhost:80나 localhost:5000을 주소창에 입력하여 접속해보자!

- 80번 포트는 Nginx를 통해 5000번 포트로 다시 접근하는 경로이고, 5000번 포트는 플라스크 서버로 띄운 Redash에 직접 접근하는 것이다.

- 일반적인 접근은 80번 포트로 접근해서 도메인 주소로만 접근하는 방식입니다.

Redash 구축 후 최초로 접속하면 나오는 화면이다

 

4. 다음 글 예고

- 다음 글에서는 Redash의 기본적인 세팅 방법과 사용 예시를 살펴보도록 하겠습니다.

+ Recent posts