Study/Linux

[Linux/Ubuntu] 우분투로 Jupyter Notebook 원격접속하기 (+ 간단한 vi 에디터 명령어와 에러 해결법)

growingtree 2021. 5. 14. 03:10

 

 

 

우분투 서버에 주피터 노트북을 설치 후 주피터 노트북 서버를 실행해두면 원격으로 접속이 가능하다.

 

우분투에 기본적으로 파이썬이 깔려있으므로 주피터는 pip명령어로 설치한다.

자신의 파이썬 버전에 맞게 설치하면 된다. 

python3 ==> pip3 

python2 ==> pip 

 

1. 주피터 설치

pip3 install jupyter

 

2. 주피터 설정

홈(~)에서 jupyter notebook --generate-config 명령어 실행

설정 파일이 생긴 위치를 반환해준다. 

이때 생성한 파일은 추후 수정한다.

# 우분투 홈(~)에서 실행
jupyter notebook --generate-config

 

1) 우분투 홈(~)에서 파일 목록 살펴보기 

우분투 홈(~)에서 ls -al 명령어 실행

ls 명령어는 현재 위치에 있는 폴더 목록을 알려준다.

숨김폴더까지 확인하고 싶다면 ls -al 

주피터 파일은 보통 숨김폴더로 되어있기 때문에 ls -al로 .jupyter 파일을 찾아본다.

(없으면 다시 설치해야함) 

 

2) 주피터 디렉토리 확인 후 패스워드 생성

패스워드를 생성하는 과정은 사실 생략해도 상관은 없다.

생략하게 되면 나중에 주피터 노트북을 실행할 때 비밀번호가 아닌 주피터 노트북 생성 시 생기는 토큰으로 접속을 해야한다.

우분투 홈(~)에서  ipython 명령어 실행

위의 화면처럼 왼쪽에 In [1] : 이 떠야함.

 

참고) ipython은 (Interactive Python)의 줄임말로 Jupyter Kernel 중 하나임. 

주피터 셀에서 패스워드를 직접 지정해보자.

# notebook.auth 라이브러리에서 passwd 임포트 
from notebook.auth import passwd

# 주피터 노트북에 접속할 때 사용할 비밀번호 지정
passwd() 

paswd() 명령어를 치면 Enter password :  창이 뜨는데 비밀번호를 입력해도 창에서는 표시가 안된다. 

창에 아무것도 안뜬다고 해서 걱정할 필요 X 

Verify password:  부분에는 아까 Enter password : 에서 입력한 비밀번호를 다시 입력하면 된다.

 

Verify password 까지 하면 return 값으로 알 수 없는 문자열을 알려주는데 이는 꼭 다른 곳에 복사해둔다.

(나중에 설정할 때 필요함) 

 

참고) 우분투에서 복사는 그냥 드래그만 하면 됨. 

참고)  ipython에서 나가고 싶으면 exit() 입력하면 끝

아까 .jupyter 디렉토리를 찾았다면 이제 디렉토리 안으로 들어가보자.

우분투에서 디렉토리 안으로 들어가는 명령어는 cd 이다.

# .jupyter 디렉토리 안으로 접근 
cd .jupyter 

맨처음에는 경로가 홈(~)이었는데 cd .jupyter를 실행하면 ~/.jupyter 로 경로가 변경된 것을 확인할 수 있다.

ls 명령어로 아까 만들었던 jupyter_notebook_config.py이 존재하는지 확인한다.

# ls 명령어 실행 시 jupyter_notebook_config.py 파일이 제대로 생성되었는지 확인한다. 
# 만약 없으면 jupyter notebook --generate-config 명령어를 실행해 파일을 만든다.
ls 

이제 이 파일의 내용을 수정해서 원격으로 주피터 노트북에 접속할 수 있도록 한다. 

파일을 수정할 때 vi 에디터를 사용한다. 

 

참고) vi Editor 란? Visual Editor의 약자로 유닉스/리눅스 계열에서 쓰이는 기본적인 문서 편집기이다.

vi 에디터에서 발전한 것이 vim 에디터인데 (vi Improved) 의 약자로 기존의 vi 에디터의 업그레이드 버전이다. 요즘 대다수의 리눅스에는 vim에디터가 기본으로 깔려있다. 그냥 vi라고 쳐도 vim 에디터가 실행되는 것이고 vim 이라고 쳐도 vim 에디터가 실행이 된다. 

 

vi 에디터로 jupyter_notebook_config.py 를 열어보자.

# vi 에디터로 jupyter_notebook_config.py 파일을 열어보기 

vi jupyter_notebook_config.py

 

3) jupyter_notebook_config.py 파일 편집 

 

jupyter_notebook_config.py 을 편집하기 위해서는 아래와 같은 간단한 vi 에디터 사용법을 알아야한다.

 

1. 파일에 텍스트를 추가하거나 삭제하기 : 키보드에서 i 를 누르면 INSERT 상태로 변경된다. 이 상태에서 지우거나 추가가 가능하다. 편집이 완료 되었으면 esc키를 눌러 다시 명령 모드로 변경할 수 있다.

 

2. 파일에서 특정 문자열 검색 : 명령 상태에서 /(슬래시) 누른 후 원하는 문자열 적고 enter

 

3. 검색한 문자열이 여러개일 때 : n(소문자) 을 누르면 다음 문자열로 넘어감 N(대문자) 을 누르면 이전 문자열로 넘어감 

 

4. 파일을 저장할 때 : 명령모드에서 :(콜론) 입력후 wq 입력. (:wq 이렇게!) 그냥 q를 누르면 저장이 안되고 종료되니 주의할 것! 

 

 

파일 맨 앞에 c = get_config() 를 삽입

아래 보면 INSERT 상태인 것을 확인 후 진행

c = get_config()

c.NotebookApp.allow_origin 검색 -> 주석(#) 제거 후 위와 같이 수정

c.NotebookApp.allow_origin = "*" 

 

c.NotebookApp.notebook_dir 검색 -> 주석(#)제거 후 위와 같이 수정

이 과정은 노트북 실행 경로 설정하는 것인데 경로는 사람마다 다를 수있다. 

나의 경우 root에서 실행할 것이므로 "/root"로 작성 

# 작업 경로는 사람마다 다를 수 있음 
c.NotebookApp.notebook_dir = "/root"

 

c.NotebookApp.ip 을 검색 -> 주석(#)제거 후 위와 같이 수정

ip를 하나만 쓸거면 특정 ip주소를 넣어도 되지만 여기서는 그냥 *(전체)로 지정

c.NotebookApp.ip = "*"

 

c.NotebookApp.port 을 검색 -> 주석(#)제거 후 위와 같이 수정 

주피터 노트북의 기본 포트번호는 8888이다. 

# 주피터 노트북에 접속할 포트번호 지정. 기본 주피터노트북 포트번호는 8888
c.NotebookApp.port = 8888

 

c.NotebookApp.password 검색 -> 주석(#)제거 후 아까 ipython에서 받은 비밀번호 복사해둔 것 붙여넣기 

문자열로 붙여넣되 앞에 u를 붙여야함

 

참고) 붙여넣기는 오른쪽 마우스 클릭

c.NotebookApp.password = u'아까 ipython에서 비밀번호 설정할 때 받은 문자열 코드'

 

c.NotebookApp.open_browser 검색 -> True를 False로 변경

c.NotebookApp.open_browser = False

 

여기까지하면 jupyter_notebook_config.py 파일 수정이 끝이났다. 

수정한 내용은 저장해야하므로 명령모드에서 :wq(저장 후 나가기) 입력 

 

 

3. 주피터 실행 

설정까지 끝났으니 실제로 실행해보자.

홈(~)에서  jupyter notebook 명령어 실행 위와같은 결과가 나오면 성공!

 

만약 나처럼 사용자 계정을 만들지 않고 root에서 주피터 노트북을 띄운다면 

jupyter notebook --allow-root 명령어를 실행해야 정상작동한다.

# 주피터 노트북 실행 홈(~)에서 실행 or 다른 위치에서 실행해도 됨
jupyter notebook 

# 주피터 노트북을 실행하는 사용자가 root 계정이라면 
jupyter notebook --allow-root

 

크롬이나 사파리와 같은 빈 웹페이지에 http://주피터 노트북이 실행되는 서버 ip:8888를 치면 접속이 가능하다.

나의 경우 우분투 서버가 따로 있어서 http://우분투서버ip:8888로 접근했다.

주피터 노트북이 어디서 돌아가는지 잘 모르겠다면, jupyter notebook 명령어를 쳤을 때 빨간 네모 부분을 참고하면 된다. 

 

이 페이지가 뜨면 패스워드로 맨처음에 ipython 셀에서 설정했던 비밀번호를 치면 된다. 

완료! 

 

 

 

 

 

 

4. 만약 주피터 화면이 제대로 뜨지 않는다면?

저의 삽질 과정을 공유해드립니다.

 

주피터 노트북을 제대로 띄워두고도 접속이 안될 때가 있는데, 이유는 보통 2가지 정도로 추릴 수 있습니다.

 

1) jupyter_notebook_config.py 편집을 잘못한 경우

해결방법 : 저의 경우는 주피터 노트북 작업 경로를 잘못 설정하는 경우였고, 

현재 내 위치를 확인할 수 있는 pwd 명령어로 위치를 파악한 후 경로를 제대로 바꿔주면 됩니다.

 

보통 1번의 에러의 경우, jupyter notebook 명령어를 실행하면 바로 에러가 떠서 에러 메세지 확인 후 수정하면 됩니다.

 

2) 포트가 제대로 열리지 않았을 때 

해결방법 1 : 방화벽 인바운드 규칙 새로 설정

해결방법 2: 클라우드 플랫폼에 방화벽 규칙 추가 

 

2번 에러의 경우, jupyter notebook 실행 시 제대로 실행이 되지만 정작 접속하려고하면 아래와 같은 페이지가 뜨면서 접속을 할 수 없게 됩니다. 

 

1) 방화벽의 인바운드 규칙 추가하는 방법 

 

1. 윈도우 검색 -> "고급 보안이 포함된 Windows Defender 방화벽" -> 왼쪽에서 인바운드 규칙 클릭-> 오른쪽에 새 규칙 클릭

 

 

2. 만드려는 규칙 중 포트 클릭 -> 다음 

 

3. 규칙은 TCP(기본) , 특정 로컬 포트에 주피터 포트 번호 입력 -> 다음 

 

4. 연결 허용 클릭 -> 다음

 

5. 도메인, 개인, 공용 모두 선택 -> 다음 

 

6. 규칙을 구별할 수 있게 이름을 지정 후 마침 

 

 

7. 인바운드 규칙에 잘 추가가 되어있나 확인 + 규칙 왼쪽에 파란 체크표시 ( 현재 사용중인 규칙임) 을 확인한다. 

 

 

8. 다시 우분투에서 jupyter notebook 실행

 

 

2. 우분투의 서버를 클라우드에서 사용하고 있다면 ?

서버를 제공하는 클라우드 내에서 방화벽을 직접 설정할 수 있다. 

저는 네이버 클라우드 플랫폼을 이용하고 있어, 네이버 클라우드 플랫폼을 기준으로 설명함을 알려드립니다.

 

1. 네이버 클라우드 플랫폼 콘솔창으로 접속 후

Server -> ACG 

주피터 서버에 적용되고 있었던 ACG클릭 후 ACG 설정 

프로토콜 : TCP , 접근소스 : 0.0.0.0/0(전체) , 허용포트 : 8888( 주피터 포트번호) 

추가 후 적용

2. 다시 우분투에서 jupyter notebook 실행

 

 

 

에러는 이것말고도 다양할 수 있어서 댓글 남겨주시면 도와드리겠습니다 :)

감사합니다

반응형