쿼카러버의 기술 블로그

주피터 서버 구축하기 (1/3) [Running a jupyter notebook server] (Window Server) 본문

[Infra & Server]/주피터 서버

주피터 서버 구축하기 (1/3) [Running a jupyter notebook server] (Window Server)

quokkalover 2019. 1. 27. 23:35

주피터 노트북 설치하기: https://etloveguitar.tistory.com/2

 

 

데스크탑이나 노트북에 윈도우 OS가 깔려있다면 누구든 주피터 서버를 만들 수 있다.

 

먼저 주피터 노트북을 설치해야 한다. 설치하지 않았다면

위에 적은 링크에 방법을 따라 주피터 노트북을 설치하면 된다.

 

작성된 모든 코드는 복사하기 쉽게 페이지 제일 하단에 입력해놓았으니, 복사, 붙여넣기하세용

 

주피터 서버?

 

주피터 노트북의 웹 애플리케이션은 서버-클라이언트의 구조를 가지고 있다.

이 구조 덕분에 매우 쉽게 주피터 서버를 구동시킬 수 있다.

 

조금 쉽게 설명하겠다.

 

주피터 노트북을 실행하는 방법은 cmd에서 ‘jupyter notebook’을 입력하는 것이다.

별도의 설정을 하지 않고 실행하면 아래처럼

자동으로 웹 브라우저가 켜지면서 주피터 노트북을 사용할 수 있다.

 

 

 

위와 같은 화면이 뜨게 되는데, 빨간색 상자의 주소를 보면 ‘localhost:8888’이 있는 것을 확인할 수 있다.

 

이는 주피터 노트북의 config에서 디폴트로 ‘127.0.0.1:8888’의 주소로 웹을 통해 접근하도록

설정해놓았기 때문이다.

 

이를 조금만 다르게 생각하면, 환경설정에서 저 localhost주소가 아닌 다른 주소로 변경하고,

외부에서도 그 주소를 쓸 수 있도록 허용해준다면, PC가 아니더라도 다른 PC에서도

jupyter notebook을 쓸 수 있게되고, 그게 바로 jupyter 서버가 되는 것이다.

하지만, 아무런 보안장치도 마련하지 않은채 jupyter 서버를 열어놓게되면, 아무나 내 컴퓨터에 접근할 수 있게 되는데, 그러면 안되지용!!!!!

 

따라서 노트북 서버의 보안 수준을 조금 높일 필요가 있다.

보안 수준을 높이는데는 여러 가지 방법이 있다.

나는 아래의 보안 방법을 사용하고자 한다.

1) Hashed password를 만들도록 하겠다.

 

위 정도의 보안 수준을 마련하는 방법은 아래와 같다.

그 전에 이는 처음 주피터 노트북을 설치했거나, jupyter_notebook_config.py파일이 없는 상황이라는

가정하에서 작성된 것이다. (C:\Users\USERNAME\.jupyter\jupyter_notebook_config.py경로에 보통 있음)

 

이미 만들어 놓은 jupyter_notebook_config.py가 있다면, 그냥 기존의 파일을 수정하면 된다.

 

cmd창에 아래와 같이 입력한다.

 

 

 

 
jupyter notebook --generate-config
 

 

위 같이 입력하면, 위에 써놓은 경로에 jupyter_notebook_config.py라는 파일이 생성된다.

 

 

 

처음 생성된 jupyter_notebook_config.py 파일은 모든 내용이 주석처리가 되어 있다.

 

 

jupyter server의 설정을 바꾸기 위해서

우리는 위 주석들을

1) 제거해서 변경하거나,

2) 어차피 주석이 되어있으니, 제일 하단에 우리가 원하는 설정의 문구를 넣어주는

방법으로 설정을 바꿀 수 있다.

 

Hashed Password

 

‘1234’라는 비밀번호를 쓰더라도, 좀 남들이 못알아보게

'sha1:67c9e60bb8b6:9ffede0825894254b2e042ea597d771089e11aed'이런식으로 암호화된

형식으로 변환된 비밀번호를 말한다.

혹시나 누가 내 jupyter_notebook_config.py를 열어봐도, 비밀번호가 뭔지 바로 추측할 수 없게끔..

이를 만들기 위해서는 먼저 jupyter notebook을 실행해서

cell에 아래와 같이 입력한다.

 

 
from notebook.auth import passwd
passwd()
 
 

 

 

나는 ‘1234’를 입력했는데, 위처럼 알아보지 못하는 녀석이 나왔고, 이제 out으로 나온 ‘sha1:~~~’이 친구를 복사한다.

 

그리고

jupyter_notebook_config.py파일을 열어서

 

c.NotebookApp.ip = '*'
c.NotebookApp.password = u'sha1:bcd259ccf...<hashed password적어주고>'
c.NotebookApp.open_browser = False
 
# It is a good idea to set a known, fixed port for server access
c.NotebookApp.port = <내가 원하는 포트 번호, 근데 열어주면 방화벽에서도 풀어주어야 함>
 

 

위 문구를 제일 아래에 추가해준다.

이렇게 보안 수준을 결정하고 나서는 이제, 주피터 노트북을 실행해서 다른 컴퓨터로부터

내 주피터 서버에 접속하도록 해보자!!

 

그 전에 먼저, ip가 무엇인지 확인할 필요가 있다.

cmd창에 ipconfig를 쳐보자

 

 

jupyter_notebook_config.py에서 c.NotebookApp.ip = ‘*’로 해놓았기 때문에,

jupyter notebook을 실행하면 위 빨간상자의 ip를 통해 접근이 가능해지고

 

c.NotebookApp.port = ~~로 설정해주었던 그 포트 넘버를 뒤에 입력하면 이제 내 주피터 서버에 접속이 가능해진다.

 

: 내 포트번호를 50000로 해놓았다면

http://192.168.31.109:50000 를 웹 브라우저에 입력시 jupyter notebook에 접근할 수 있다.

 

위처럼 비밀번호를 입력하라고 나오는데, 위에서 설정한 비밀번호를 입력하면 이제 주피터 서버에 접근할 수 있게 됐다.

 

만약 비밀번호 만으로는 보안수준이 너무 약하다고 생각된다면

SSL 인증서를 통해 보안을 강화할 수 있는데, 별도의 글에서 다루도록 하겠다.

 

공유기를 통해 연결된 컴퓨터로는 이제 192.168.31.109:50000을 웹 브라우저에 입력하면,

이 주피터 서버를 쓸 수 있게 되는 것이고,

 

같은 장소가 아닌 다른 외부에서 접속하고 싶으면 이제 포트 포워딩을 해서 사용하면 되겠다.

포트 포워딩에 대해서도 다른 글에서 별도로 다루도록 하겠다.

 

본 글은

 

https://jupyter-notebook.readthedocs.io/en/latest/public_server.html 를 인용한 글입니다.

사용한 코드

 

  


jupyter notebook --generate-config
 


from notebook.auth import passwd
passwd()




c.NotebookApp.ip = '*'
c.NotebookApp.password = u'sha1:bcd259ccf...<hashed password적어주고>'
c.NotebookApp.open_browser = False
 
# It is a good idea to set a known, fixed port for server access


c.NotebookApp.port = <내가 원하는 포트 번호, 근데 열어주면 방화벽에서도 풀어주어야 함>

 

추가 내용

1) SSL인증서 생성을 통해 보안 강화 : https://etloveguitar.tistory.com/6

2) 포트포워딩 : https://etloveguitar.tistory.com/9

3) 방화벽에 인바운드 규칙 추가하기 : https://etloveguitar.tistory.com/8

 

Comments