Jupyter NoteBook 을 로컬환경에서 웹 서버로 구동할 때 과정, 필요한 사이트



jupyter 는 웹 환경에서 구동되는 꽤 괜찮은 컴파일러? 같습니다.

jupyterhub 라는 서버 구축 전용 어플리케이션이 있는 것 같기는 한데 ssh 인증 과정에서 어려움을 겪어서 저는 그냥 포기하고 jupyter 를 이용하여 홈 서버를 구축하였습니다. 


개인적으로 포스팅을 할 수 있지만 현재 우분투 서버에 여러가지를 설치하기도 복잡하고 개인용 컴퓨터는 다른 곳에 있어서 아래와 같이 필요 정보들을 링크로 남기겠습니다. 


1. 먼저 홈 네트워크에서 포트포워딩을 통해서 제가 원하는 포트로 jupyter 를 미리 할당해 둡니다.

출처 : http://programmerchoo.tistory.com/2

개인적으로는 netis 를 이용하여 구축하였으나 대부분 iptime 을 이용하시기 때문에 위의 링크로 참고하시면 좋을 것 같습니다. 

이상하게 웹 서버는 잘 열리는데 윈도우 원격접속은 안되더라구요.

시간 엄청 썼는데, 나중에 다시 시도해 보려고 합니다. 


2. jupyter 를 설치하고 

http://goodtogreate.tistory.com/entry/IPython-Notebook-%EC%84%A4%EC%B9%98%EB%B0%A9%EB%B2%95

Jupyter가 다중 kernel을 지원한다고 한다.
즉, python 2,3 모두를 지원 한다.

python2는 pip이고 python3은 pip3이다.

pip install jupyter

실행 방법

jupyter notebook

위와 같은 형태로 설치를 해준다. python3 버전을 사용하려면 pip -> pip3 로 명령어를 사용한다. 

실행방법은 jupyter notebook 을 입력하면 된다. 바로 미리 config 파일에 입력 된 형태로 포트가 열리게 된다. 

다만 귀찮은 점이라고 한다면 이는 백그라운드 실행 명령어가 아니기 때문에 terminal 을 계속 열어두어야 한다. 


3. 단순히 열리기만 할 수는 없으니 서버로 설정해보자. (2와 출처 같음 ) 

포트포워딩도 되었고, 이제 포트만 설정해서 백그라운드에서 작동하게 해준다면 웹 서버가 됩니다. 

우분투환경

Securing a notebook server

jupyter notebook --generate-config

profile 생성없이 defalut내용을 바로 변경한다. 전체 Jupyter에 영향을 미친다.

Writing default config to: /root/.jupyter/jupyter_notebook_config.py

위와 같은 명령어 --generate-config  를 입력해주면 보이지 않는  .jupyter 디렉토리가 생성되고 그 안에 config 파일이 생성된다.

파일 위치를 기억해 두는게 좋을 것이다. 대부분 홈이나 루트를 통해서 생성되기 때문에 헷갈리면 두 곳에 가서 cd .jupyter 를 해주면 된다. 

juptyer 의 기본 동작을 제어 하는 곳이기 때문에 설정을 몇 개 해야 할 필요가 있다. 


다음으로는 암호를 설정해야 한다. 

jupyter 는 내부의 디렉토리를 직접 사용하는 것이기 때문에 아무나 사용하면 안된다.

실제 우분투에 있는 파일을 누구나 접근해서 지울 수 있기 때문이다. 


linux 에 python 이 깔려있다는 전제 하에서

ipython  을 명령어로 입력한다. 

Preparing a hashed passwrod

In [1]: from notebook.auth import passwd

In [2]: passwd()
Enter password: 
Verify password: 
Out[2]: 'sha1:f24baff49ac5:863dd2ae747212ede58125302d227f0ca7b12bb3'


그 다음에는 위와 같이 명령어를 입력해주고 원하는 password 를 입력해서 sha1 로 암호화된 값을 얻는다. 

jupyter_notebook_config.py를 열어서 아래의 내용을 입력한다.

# Password to use for web authentication
c = get_config()
c.NotebookApp.password =
u'sha1:f24baff49ac5:863dd2ae747212ede58125302d227f0ca7b12bb3'

암호화 된 값을 얻으면  .jupyter /  jupyter_notebook_config.py  

경로로 가서 수정해준다. 


서버 설정 내용을 jupyter_notebook_config.py를 열어서 아래의 내용을 입력한다.

# The IP address the notebook server will listen on.
# c.NotebookApp.ip = 'localhost'
c.NotebookApp.ip = '192.168.174.131'
# c.NotebookApp.port_retries = 50
c.NotebookApp.port_retries = 8888

다음으로는 위 내용을 config 파일에서 찾아서 수정해준다. 

ip 는 자신의 ip 가 포트포워딩을 해야한다면 로컬 ip 로 아니라면 그냥 wan ip 로 입력하면 된다. 

port 는 설정하기 나름이다.



기타설정

#실행과 동시에 web-browser를 실행하지 않게 한다.
c.NotebookApp.open_browser = False
#시작 디렉터리를 변경한다.
c.NotebookApp.notebook_dir = u'/root/DataScience/'

기타로 설정해야 할 것은 위와 같은 것이 있다. 

jupyter notebook 이 실행되면 자동으로 browser 가 실행되는 데 그걸 방지하는 설정,

notebook_dir 는 주피터의 시작 경로를 설정해주는 설정이다.

저 앞에 u 는 입력하지 않아도 되고 원하는 경로를 루트를 시작으로 하여 해주어야 한다. 

home 으로 ( ~ / ) 설정했는데 안 된다. 



서버를 백그라운드에서 시작하는 방법 
$ jupyter notebook& --ip=자신의 ip:port

위와 같이 명령어를 사용하면 열리게 된다.

단  .jupyter /  jupyter_notebook_config.py   파일에서 ip 와 포트를 설정해주었다면 


$ jupyter notebook&

까지만 실행해 주면 된다. 




- 백그라운드로 돌아가고 있는 jupyter notebook 을 끄는 방법 

http://stackoverflow.com/questions/38511673/cannot-quit-jupyter-notebook-server-running

위의 링크에 잘 나와있지만 간단히 정리해본다면 

netstat -tulpn

위의 명령어를 사용해서 현재 작동하는 PID 를 확인하고

kill ~~~ 를 이용해서 그 PID 를 끄면 됩니다.