1. 일단 우분투 컨테이너와 Nginx의 포트를 모두 포트포워딩 하자.
- docker-compose.yml 파일의 설정을 바꿔서 포트포워딩을 설정해야한다.
- 다음과 같이 파일을 수정할 수 있게 vim으로 연다
vim /opt/redash/docker-compose.yml
- 마지막 부분의 Nginx 설정에서 "443:443" 포트포워딩 설정을 아래와 같이 추가해준다
- 수정을 마치고 :wq!로 파일을 저장하고 나온다.
nginx:
image: redash/nginx:latest
ports:
- "80:80"
- "443:443"
depends_on:
- server
links:
- server:redash
restart: always
- docker-compose.yml 파일이 있는 경로로 이동하고, docker compose로 설정이 변경된 컨테이너를 다시 띄운다.
- 설정이 변경되지 않은 컨테이너는 재생성 되지 않고 Nginx 컨테이너만 다시 생성될 것이다.
1. 경로로 이동해서 Nginx 컨테이너를 다시 실행
cd /opt/redash
COMPOSE_HTTP_TIMEOUT=200 docker-compose up -d
2. 컨테이너 재생성 후 docker-compose ps 입력 후 아래와 같은 화면이 나오는지 확인
Name Command State Ports
-------------------------------------------------------------------------------------------------------------
redash_adhoc_worker_1 /app/bin/docker-entrypoint ... Up 5000/tcp
redash_nginx_1 nginx -g daemon off; Up 0.0.0.0:443->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
3. redash_nginx_1의 Ports가 아래와 같으면 설정 성공
0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp
- 시험삼아 http://my.example.domain:80으로 접속하면 redash 웹페이지가 나타나는 것을 확인할 수 있다.
- 또한 http://my.example.domain으로 접속해도 동일한 페이지가 나타난다.
2. Nginx 컨테이너로 접근하여 세팅을 진행하자
- 원활한 세팅을 위해 nginx 컨테이너에서 직접 세팅을 한다.
- nginx 설정 파일 수정을 위해 vim도 설치해주자
1. Nginx 컨테이너로 진입
docker exec -itu 0 redash_nginx_1 bash
2. vim 설치
apt-get update
apt-get install vim
3. Nginx 설정 파일이 있는 폴더로 이동
cd /etc/nginx
3. 테스트용 SSL 인증서 생성
- 간단한 연습을 위해 SSL 인증서와 도메인을 구매할 수는 없다.
- openssl이 설치되어 있다면 아래의 명령어로 자체 서명된 인증서를 생성할 수 있다.
- 물론 자체 서명이므로 보안성이 전혀 없으니 연습용으로만 사용할 수 있으니 실제 적용에는 인증서를 꼭 구매해야한다.
1. 인증서를 생성하여 저장할 폴더를 생성하고 폴더로 진입
mkdir self_cert_ssl_files
cd self_cert_ssl_files
2. openssl로 자체서명 인증서 생성
openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365
3. 입력을 요청하는 정보는 정확히 입력할 필요는 없으니 참고
Country Name (2 letter code) [AU]:KR
State or Province Name (full name) [Some-State]:Seoul
Locality Name (eg, city) []:Seoul
Organization Name (eg, company) [Internet Widgits Pty Ltd]:test
Organizational Unit Name (eg, section) []:test
Common Name (e.g. server FQDN or YOUR name) []:test
Email Address []:test@test.test
4. cert.pem 과 key.pem 파일이 생성되었는지 확인하자
4. 80번 포트와 443 포트 설정
- 80번 포트는 http 접속, 443번 포트는 https 접속인 것을 기억할 것이다.
- 이제 Nginx의 설정을 변경해서 80번 포트와 443번 포트에 대한 접속 설정을 해보자.
vim /etc/nginx/conf.d/default.conf
- 연습삼아 redash 공식 홈페이지의 설정을 일부 수정하여 적용해보자
- 아래의 설정을 default.conf 파일에 적용하자
- 아래의 설정은 80번 포트로 접속하는 경우 403 에러가 나도록 설정하고, 443번 포트로 접속하는 경우 SSL을 적용하는 설정이다.
https://redash.io/help/open-source/admin-guide/https-ssl-setup
server {
listen 80 default;
return 403;
}
server {
listen 443 ssl;
ssl on;
ssl_certificate /etc/nginx/self_cert_ssl_files/cert.pem;
ssl_certificate_key /etc/nginx/self_cert_ssl_files/key.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
access_log /var/log/nginx/redash.access.log;
gzip on;
gzip_types *;
gzip_proxied any;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://redash;
proxy_redirect off;
}
}
- 설정 파일에 문제가 없는지 테스트를 해보고, Nginx에 설정을 적용한다.
1. 터미널에 nginx -t 입력하여 메세지 확인
2. 설정이 정상이라면 아래와 같은 출력 값이 뜬다.
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
3. Nginx를 끄지 않고 설정을 적용할 수 있다.
service nginx reload
4. 정상적으로 적용 됐다면 아래와 같은 출력 값이 뜬다.
[ ok ] Reloading nginx: nginx.
5. 80번과 443번에 해당하는 주소로 접속해보자
- http://my.example.domain으로 접속하면 아래와 같은 화면을 볼 수 있다.
- 위의 설정 파일에서 return 403으로 403에러가 발생하도록 설정했기 때문이다.
- 이번엔 https://my.example.domain으로 접속해보자.
- 위의 설정 파일에서 SSL을 적용하고 5000번 포트에 띄워진 리대시 웹페이지로 가도록 설정되었기 때문에 도메인 주소로 접속이 된다.
- 하지만 정상적으로 인증되지 않은 자체 서명 인증서이므로 아래와 같은 화면이 뜬다.
- 정상적인 인증서로 설정하는 경우 홈페이지로 접속하는 화면을 확인할 수 있으니 실제 적용에는 올바른 인증서를 사용해보자.
- 마지막으로 80번 포트에서 403에러가 발생하는 것이 아닌 https가 적용된 주소로 리다이렉팅하는 설정은 아래와 같다.
- http://my.example.domain으로 접속하면 https://my.example.domain으로 접속되는 것을 확인할 수 있다.
server {
listen 80 default;
return 301 https://my.example.domain;
}
server {
listen 443 ssl;
ssl on;
ssl_certificate /etc/nginx/self_cert_ssl_files/cert.pem;
ssl_certificate_key /etc/nginx/self_cert_ssl_files/key.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
access_log /var/log/nginx/redash.access.log;
gzip on;
gzip_types *;
gzip_proxied any;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://redash;
proxy_redirect off;
}
}
6. Nginx 설정은 이게 끝이 아니다.
- 예시로 나온 설정은 아주 간단한 예시이다.
- 특정 도메인 주소로만 접근할 수 있도록 하거나, SSL protocol을 다른 방식을 적용하는 등의 추가 설정이 반드시 필요하다.
- 제공할 서비스의 보안 사항에 따라 적절한 세팅 값을 추가하고 변경하여 적용하자.
- 세부적인 Nginx의 설정은 redash 구축 범위에서 벗어나므로 Nginx를 따로 포스팅 하게 되면 상세히 적어보도록 하겠다.
'데이터 시스템 구축 정보 공유 > redash' 카테고리의 다른 글
6. redash에 도메인 주소로만 접속을 해보자. (0) | 2022.06.21 |
---|---|
5. Redash 시각화와 대시보드의 세부 사용 예시 (0) | 2022.06.19 |
4. redash의 기본적인 세팅과 사용법을 알아보자 (0) | 2022.05.28 |
3. docker를 사용해서 redash를 간단히 구축해보자! (5) | 2022.04.22 |
2. Redash의 구조 (0) | 2022.04.04 |