Docker 실습 -1 jupyter-notebook 설정

Kyoungchan Cho·2023년 1월 2일
0

Docker

목록 보기
1/5
post-thumbnail

intro

동빈나님의 도커 강좌를 실습하면서 남긴 진행 기록입니다.

도커 강좌를 실습하기 앞서 웹 브라우저에서 서버를 설정할 수 있는 jupyter-notebook을 서버에 설치하고 설정해준다.


1. EC2 인스턴스 시작

ubuntu 18.04로 생성
실습 가이드와 다른 버전으로 생성시 버젼 에러가 자주 발생한다

ssh -i "dockertutorial.pem" ubuntu@ec2-43-201-62-133.ap-northeast-2.compute.amazonaws.com


2. wubuntu 세팅

  1. 우분투의 패키지들을 업데이트해주고
  2. 파이썬으로 실습을 진행하기에 python-pip 설치
  3. 웹 브라우저 내에서 서버를 관리할 수 있게 해주는 jupyter-notebook을 설치한다.

sudo apt-get update
sudo apt-get install python3-pip
sudo pip3 install notebook

notebook 설치 관련 에러 발생시 셋업툴 설치
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-l8gu5r5m/argon2-cffi-bindings/

sudo -H pip3 install --upgrade --ignore-installed pip setuptools

패키지 버젼 관련 에러 발생시
ERROR: jupyter-events 0.5.0 has requirement jsonschema[format-nongpl]>=4.3.0, but you'll have jsonschema 3.2.0 which is incompatible.
ERROR: nbconvert 7.2.7 has requirement jinja2>=3.0, but you'll have jinja2 2.10.1 which is incompatible.

에러가 명시한대로 패키지들의 버젼을 맞춰준다.
sudo pip3 install jsonschema==4.3.0
sudo pip3 install jinja2==3.0


3. jupyter-notebook 설정

비밀번호 설정

파이썬 명령어로 jypyter-notebook 비밀번호를 설정해주고 해시값을 따로 저장해둔다.
python3
from notebook.auth import passwd
passwd()

비밀번호 입력
ex) practice123

해시값 결과를 환경설정 파일에 쓰기 위해 따로 저장해준다.
ex) argon2:$argon2id$v=19$m=10240,t=10,p=8$fNiOb5FHFCYfVdferwey8A$MCywvw0qdUF8iyOserqewJv20adfqwesafZdg'


notebook config 설정

config 파일을 만들어주고 편집 파일 실행
jupyter notebook --generate-config
sudo vi /home/ubuntu/.jupyter/jupyter_notebook_config.py

notebook 관련 환경 설정을 한다.
편집 시작 a

c = get_config()
c.NotebookApp.password = u'argon2:argon2idargon2idv=19m=10240,t=10,p=8m=10240,t=10,p=8fNiOb5FHFCYfVuqE8nUy8A$MCywvw0qdUF8iyOsuuJv20ON8tONkXGrdw9sjpw4Zdg'
c.NotebookApp.ip = '172.31.0.239'
c.NotebookApp.notebook_dir = '/'

  • NotebookApp.password의 경우 u 직전 비밀번호 설정할때의 해시값을 적어주고
  • ip는 터미널에 있는 wubuntu ip주소
  • dir의 경우 맨 상위 폴더로 지정해줬다.

저장 후 편집 종료 :wq!


notebook 실행

sudo jupyter-notebook --allow-root

import 관련 error 발생시
pip install -U flask

pip uninstall zmq
pip install zmq
pip install markupsafe==2.0.1

AWS에 접속하여 보안그룹 인바운드 규칙에 포트 범위 8888을 추가해준다.

웹 브라우저 상에서 퍼블릭 주소를 확인하여 8888포트로 접속해주면 jupyter화면이 뜬다.

ex) http://172.31.0.239:8888

설정해준 비밀번호를 입력하고 로그인하면 웹 브라우저내에서 서버 내 설치파일을 확인할 수 있고 터미널도 실행할 수 있다.


백그라운드 실행 설정

jupyter-notebook 잠시 정지
ctrl+z
백그라운드 설정
bg
소유권 포기
disown-h

포트의 연결 상황을 netstat으로 확인한다.
sudo netstat -nap | grep 8888\

netstat notfound시 net-tools 설치
sudo apt install net-tools

백그라운드 서버 종료
sudo kill -9 9490


4. SSL 사설 인증서 적용

보안을 위해 https를 사용할 수 있는 SSL인증서를 발급한다.

jupyter-notebook이 설치된 최상단 폴더에서 ssl폴더를 만들어주고 이동한다.
cd /home/ubuntu
mkdir ssl
cd ssl

공개키와 개인키를 사용해서 SSL 인증키를 발급한다.
개인키는 절대 공유하지 않는다
sudo openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout "cert.key" -out "cert.pem" -batch

jupyter-notebook의 환경설정 다시 열어서
sudo vi /home/ubuntu/.jupyter/jupyter_notebook_config.py

인증서 관련 발급 키를 입력해준다.
c.NotebookApp.certfile = u'/home/ubuntu/ssl/cert.pem'
c.NotebookApp.keyfile = u'/home/ubuntu/ssl/cert.key'

관련 에러 발생시 기존 키를 다시 삭제하고 rsa 2048로 키를 다시 발급한다.
ssl.SSLError: [SSL: EE_KEY_TOO_SMALL] ee key too small (_ssl.c:4046)

2048로 늘려줌
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout "cert.key" -out "cert.pem" -batch

sudo jupyter-notebook --allow-root
ex) https://172.31.0.239:8888
http가 아닌 https로 접속한다. 크롬 등 웹브라우저에서 신뢰하지 않은 인증서 오류가 발생하지만 내가 만든 인증서기때문에 무시하고 접속해준다.


5. jupyter-notebook 시스템 서비스 설정

시스템 서비스로 주피터 노트북을 등록하여 서버가 재시작해도 바로 재시작할 수 있게 설정해준다.

주피터 경로 찾기
which jupyter-notebook

서비스 파일 설정
sudo vi /etc/systemd/system/jupyter.service

서비스 파일에 양식에 맞춘 아래 내용을 입력해준다.

[Unit]
Description=Jupyter Notebook Server

[Service]
Type=simple
User=ubuntu
ExecStart=/usr/bin/sudo /usr/local/bin/jupyter-notebook --allow-root --config=home/ubuntu/.jupyter/jupyter_notebook_config.py

[Install]
WantedBy=multi-user.target

데몬 리로드
sudo systemctl daemon-reload
시스템이 주피터 가능하게
sudo systemctl enable jupyter
주피터 시스템 시작
sudo systemctl start jupyter
주피터 시스템 상태 확인
sudo systemctl status jupyter
주피터 시스템 정지
sudo systemctl stop jupyter
주피터 시스템 재시작
ssudo systemctl stop restart





참고)
https://www.youtube.com/watch?v=LoYpXoBJPMc&list=PLRx0vPvlEmdChjc6N3JnLaX-Gihh5pHcx&index=2
https://musclebear.tistory.com/131

profile
https://lying-lettuce-69f.notion.site/KyoungchanCho-Blog-f9f150b9e3be4467a67cf2a21932650d (게시글 자동 비공개 현상으로 일단 노션으로 이동합니다. 소개에서 URL 링크 클릭으로 연결됩니다.)

0개의 댓글