내가 하는 방식(?)이 오답일 가능성이 높다.
(또한 현재 방식으로 제대로 돌아가는 건지 검증은 아직 못했다.)
하지만 나중에 나와같은 실력의 사람에게 나의 5일간의 뻘짓이 도움이 돼
당신의 해답을 찾는데 시간절약을 할 수 있을거라 생각해 적어본다.
깔끔히 정리할 시간은 없을 거 같고 참고한 블로그와 내가 적은 명령어(?)를 적어두겠다.
(참고로 난 비전공에 개발공부(?) 6개월 차이니 알아서 걸러들었으면 좋겠다.)
뭐니뭐니해도 가장 도움이 된 블로그는 위의 블로그였다.
오라클은
https://collabnix.com/how-to-run-oracle-database-in-a-docker-container-using-docker-compose/
이 사이트를 참조해 설치했는데 지금 위 사이트가 접속이 안된다.
월요일날 회사 가서 저 사이트를 참조해 깔아야 하는데 망했다.
(글 작성한 날이 23년 09월 16일이었는데 17일 새벽에 다행히 사이트가 복구됐다.)
WSL 및 우분투 설치는
https://ingu627.github.io/tips/install_ubuntu/
이 글을 참조해 설치할 수 있었다.
도커 설치는
https://goddaehee.tistory.com/313
이 글을 참조해 설치할 수 있었다.
superset에 여러 버전이 있는 거 같다.
여러사람들이
git clone https://github.com/apache/superset.git
cd superset
git chechout 2.1.0 or 3.0.0
이런 방식으로 설명해 줬는데
난 왜 그런지 모르겠지만 2.1.0 브랜치로 변경이 안 됐다.
(뇌피셜)그렇다고 master브랜치의 것으로 만들면 master브랜치는 매일매일 완벽하지 않은 것들이 push 돼 제대로 동작하지 않는 거 같다.
여튼 그래서 공식적으로 발표된 버전을 깔고 싶었는데
대략 두 가지 방법을 찾은 거 같은데
하나는 docker hub에서 받는 것과, git 허브에서 받는 방법을 찾았다.
docker hub에서 받는 방법은 그냥 이런 게 있구나 정도만 보고 해보지는 않았다.
docker hub
https://hub.docker.com/r/apache/superset/tags?page=1&name=2.1.0
이 Tag검색을 해 제대로 된 버전을 받으면 되는 거 같은데 뭐가 워낙 많아 뭐가 뭔지 모르어서 docker hub에서 받는 건 포기했다.
((뇌피셜) 2.1.0rc3 혹은 2.1.0. 혹은 2.1.0rc1 같은 걸 받으면 되는 거 같기도 한데 여튼 난 잘 모르겠다)
git hub
https://github.com/apache/superset/wiki
내가 영어가 짧아 잘 모르겠지만
위의 Releases의
- Latest completed/voted releases may be found here
여기가 공식적으로 출시한 버전을 다운 받을 수 있는 공간인 거 같다.
here을 누르면
이렇게 다운받을 수 있는 창이 나온다.
(뇌피셜) 참고로 나는 최초에 2.1.1을 받았는데 이 버전은 http://localhost:8088로 하면 admin/admin 으로 접속이 되는데 ip주소로 접속을 하면 계속 같은 페이지만 돌려줘서 욕하다가
https://github.com/apache/superset/issues/24579
위의 글을 보고 2.1.0으로 다운받기로 했다.
2.1.0은 로그인이 잘 되더라.
그 뒤 우분투에 접속해
wget https://dist.apache.org/repos/dist/release/superset/2.1.0/apache-superset-2.1.0-source.tar.gz
tar -zxvf apache-superset-2.1.0-source.tar.gz
cd apache-superset-2.1.0rc3/
# <- 이 부분은 오라클 쓸 사람만
cd docker/
touch requirements-local.txt
echo "cx_Oracle" > requirements-local.txt
cd ..
# ->
nano docker-compose-non-dev.yml
x-superset-image: &superset-image apache/superset:2.1.0
(뇌피셜) 위의 git게시판(?)에서 진짜 안전하게 2.1.0 버전을 받기 위해 docker-compose-non-dev의 image를 latest에서 2.1.0으로 고정해주라고 하는 거 같다.
docker-compose -f docker-compose-non-dev.yml pull
docker-compose -f docker-compose-non-dev.yml up
이렇게 컨테이너를 만들어주니
로그인이 가능했다.
superset에 oracle을 연결하기위해서는
위에 cx_Oracle이라는 드라이버가 필요한 거 같다.
해당 드라이버를 깔면
이 리스트에 Oracle을 찾을 수 있는 거 같다.
oracle://아이디:비밀번호@아이피:포트/SID
oracle://아이디:비밀번호@localhost:1521/SID
oracle://아이디:비밀번호@아이피:포트/SID
oracle://아이디:비밀번호@localhost:1521/SID
이렇게 적으면 접속이 돼야 하는데
위와 같이 오류가 뜬다.
이걸 해결하려고 안 되는 영어로 몇 시간 검색해보니
Oracle Client를 받아주면 된다고 한다.
https://www.oracle.com/kr/database/technologies/instant-client/linux-x86-64-downloads.html
여기서 자신의 버전에 맞게
Base - one of these packages is required / Tools - optional packages
를 받으면 되는 거 같다.
(뇌피셜)최초에 oracle 버전 19.3.0.0.0을 깔아서 버전이 맞는 oracle Client를 받아야 하는 줄 알고 몇 시간 찾다가 없어서 울며 겨자먹기로 19.20.0.0.0을 설치해봣는데 대충 같은 버전이면 호환이 되는 거 같다.
(뇌피셜)위의 oracle설치하는 블로그에서는 21c로 설치했는데 오라클 클라이언트는 19.20.0.0.0으로 설치했는데도 동작하더라
난 위에서 두 번째 것과, 맨 밑에 것을 받아 사용했다.
https://bramhyun.tistory.com/65
wget https://download.oracle.com/otn_software/linux/instantclient/1920000/oracle-instantclient19.20-basic-19.20.0.0.0-1.x86_64.rpm
wget https://download.oracle.com/otn_software/linux/instantclient/1920000/oracle-instantclient19.20-sqlplus-19.20.0.0.0-1.x86_64.rpm
sudo apt-get install alien
sudo alien -c oracle-instantclient19.20-sqlplus-19.20.0.0.0-1.x86_64.rpm
sudo alien -c oracle-instantclient19.20-basic-19.20.0.0.0-1.x86_64.rpm
위 블로그를 참조해서 받아온 rpm을 deb파일로 바꿀 수 있었고
받은 deb파일을 apache-superset-2.1.0rc3 폴더에 넣어준다.
(뇌피셜)나는 몰랐는데 이렇게 멈춰 있으면 rpm을 deb로 바꾸는 과정 중이니 아무 것도 하지 말고 (꽤 많이) 기달리면
이런 식으로 완료됐다 안내해준다.
압축 풀린 deb파일을 apache-superset-2.1.0rc3폴더에 옮겨준다.
그 뒤 apache-superset-2.1.0rc3 폴더의 Dockerfile을 수정해줘야 하는데
이부분은 내가 docker를 제대로(?) 아는 게 아니라 그냥 되는 대로 그때 그때 인터넷 서칭을 해 하다보니 가장 불안한 부분이다.(이전에 적혀있던 Dockerfile의 내용을 다 지워도 되는 건가 모르겠다....)
FROM apache/superset:2.1.0
USER root
RUN apt-get update && apt-get install -y libaio1 alien wget && rm -rf /var/lib/apt/lists/*
WORKDIR /opt
# RPM convert DEB
ADD ./oracle-instantclient19.20-basic_19.20.0.0.0-2_amd64.deb /opt/
ADD ./oracle-instantclient19.20-sqlplus_19.20.0.0.0-2_amd64.deb /opt/
RUN dpkg -i oracle-instantclient19.20-basic_19.20.0.0.0-2_amd64.deb && \
dpkg -i oracle-instantclient19.20-sqlplus_19.20.0.0.0-2_amd64.deb && \
rm oracle-instantclient19.20-basic_19.20.0.0.0-2_amd64.deb && \
rm oracle-instantclient19.20-sqlplus_19.20.0.0.0-2_amd64.deb
ENV LD_LIBRARY_PATH /opt/oracle/instantclient_19_20:/usr/lib:${LD_LIBRARY_PATH}
FROM apache/superset:2.1.0
# 어드민/어드민 로그인 안 되는 거 때문에 기본 이미지를 변경했다.
USER root
RUN apt-get update && apt-get install -y libaio1 && rm -rf /var/lib/apt/lists/*
WORKDIR /opt
ADD ./oracle-instantclient19.20-basic_19.20.0.0.0-2_amd64.deb /opt/
ADD ./oracle-instantclient19.20-sqlplus_19.20.0.0.0-2_amd64.deb /opt/
RUN dpkg -i oracle-instantclient19.20-basic_19.20.0.0.0-2_amd64.deb && \
dpkg -i oracle-instantclient19.20-sqlplus_19.20.0.0.0-2_amd64.deb && \
rm oracle-instantclient19.20-basic_19.20.0.0.0-2_amd64.deb oracle-instantclient19.20-sqlplus_19.20.0.0.0-2_amd64.deb
ENV LD_LIBRARY_PATH /opt/oracle/instantclient_19_20:/usr/lib:${LD_LIBRARY_PATH}
09월 16일 오전까지만 해도
위의 Dockerfile로 잘 작동했는데 오후에 해보려고 하니 작동이 았됐다.
시발시발하며 해결해보려고 노력했으나
16일 오후 ~ 17일 15시까지 해결을 못해
포맷하고 윈도우부터 새로 설치했는데도 동작이 안돼
더보기 밖의 내용처럼 새로 하나하나 타이핑하니 동작이 됐다.
아마 내가 뭔가를 잘못 건드린 거 같다..
무슨 일인지 모르겠지만
alien이 빠져있어서 그랬던 건가?
모르겠다. 짜증만 난다.
ar x 파일명.deb
zstd -d < control.tar.zst | xz > control.tar.xz
zstd -d < data.tar.zst | xz > data.tar.xz
ar -m -c -a sdsd 변경파일명.deb debian-binary control.tar.xz data.tar.xz
rm debian-binary control.tar.xz data.tar.xz control.tar.zst data.tar.zst
이렇게 대충(?) 작성해주고
docker-compose-non-dev.yml파일에 접속해
superset:
env_file: docker/.env-non-dev
image: *superset-image # 이부분
container_name: superset_app
command: ["/app/docker/docker-bootstrap.sh", "app-gunicorn"]
user: "root"
restart: unless-stopped
ports:
- 8088:8088
depends_on: *superset-depends-on
volumes: *superset-volumes
superset:
env_file: docker/.env-non-dev
build: # 이부분
context: . # 이부분
dockerfile: Dockerfile # 이부분
container_name: superset_app
command: ["/app/docker/docker-bootstrap.sh", "app-gunicorn"]
user: "root"
restart: unless-stopped
ports:
- 8088:8088
depends_on: *superset-depends-on
volumes: *superset-volumes
이렇게 바꿔주고
docker-compose -f docker-compose-non-dev.yml build superset
docker-compose -f docker-compose-non-dev.yml up
이걸 다시 실행 해 빌드를 해주면 된다.
나는 잘 모르기 때문에 저 문구를 실행하기 전에 기존의 컨테이너를 삭제한 다음 진행했다.
그걸 실행하면 기존의 이미지가
이런 식으로 내가 빌드한 이미지가 올라가게 된다.
아마 그 이미지 안에는 oracle client가 들어있어서 기존의 1.15gb였던 게 1.51gb가 되는 거 같다.
이 글 작성하기 전만 해도 됐는데
다시 해보려고 삭제하고 해보니
docker-compose -f docker-compose-non-dev.yml build superset
빌드부분에서 막혔다.
일단 작성하는 글 날아갈 위험이 있으니 중간저장 하겠다.
위와 같이 다(?) 한 뒤에 연결하려고 해도
아마
오라클의 컨테이너와 슈퍼셋의 컨테이너가 개별적(?)이어서 연결이 안 될 것이다.
따라서
docker network create 연결할_임의의_네트워크_이름
위의 명령어로 네트워크를 만들고
오라클의 docker-compose.yml과
superset의 docker-compose-non-dev.yml 파일의 맨 밑에
# ... (기존 코드 생략)
networks:
default:
external:
name: 연결할_임의의_네트워크_이름
위와같이 적어주면
이제 두 컨테이너가 (아마) 연결이 될 것이다.
참고로 지금 집이어서 이게 서버에서도 잘 작동할지는 미지수이다.
(로컬(localhost나 127.0.0.1)에서는 위와 같은 복잡한 일 없이도 잘 연결이 되던데..)
내일 회사에 가서 해보고 되는지 업데이트를 해보도록 하겠다.
다시 생각해보니 network로 연결할 게 아니라
docker-compose-non-dev.yml에 오라클오 생성하게 만들면 되는 문제일 거 같다.
근데 그러면 또 일이 커질 거 같아서
생각만 하고 글은 마치겠다.
결국 이 글은 검증하지 못했다.
'공부' 카테고리의 다른 글
이 글은 검색이 되는 가? (0) | 2023.09.26 |
---|---|
공부거리 (0) | 2023.09.17 |
예외처리 (0) | 2023.08.18 |
김영한 http강의 - http 메서드 (0) | 2023.08.17 |
김영한 http강의 (0) | 2023.08.17 |