Jupyter Notebook을 로컬이 아닌 서버에 올려서 어디서나 접속 가능하여 사용하게 해보자
서버 준비
먼저 서버가 필요한데 여러군데를 본 결과 저렴하게 많이 사용하고 있는 것 같은 Vultr 여기서 인스턴스를 생성해서 사용했다.
서버 세팅
# xxx.xxx.xxx.xxx -> 접속할 IP Address
ssh root@xxx.xxx.xxx.xxx
# 그리고 비밀번호를 입력해서 접속하자
생성한 인스턴스로 접속을 하고
# 파이썬 버전정보 확인
python3 --version
# pip3 버전정보 확인 (파이썬과 버전을 맞추는게 좋다)
pip3 --version
# Jupyter Notebook 인스톨
pip3 install jupyter
위를 차례대로 실행해서 주피터 노트북을 설치하면 된다.
추가로 파이썬 버전이 3이상이면 pip3를 쓰고 아니면 그냥 pip를 사용하면 된다.
비밀번호 생성
from notebook.auth import passwd()
passwd()
...
quit() # 파이썬 종료 함수
python의 passwd()함수를 실행하면 주피터 노트북을 실행할 때마다 사용할 비밀번호를 입력하고 한번 더 입력하고 나면 SHA~ 또는 argon~ 이런 해시값이 생성된다. 이 값을 복사해서 다른 곳에 저장해두자!
주피터 노트북 세팅
# jupyter config 생성
jupyter notebook --generate-config
위를 입력하면 경로에 config파일이 생성되었다고 나오는데 이를 기억해두자
나의 경우는 /root/.jupyter/jupyter_notebook_config.py
이 위치에 생성되었다.
vi /root/.jupyter/jupyter_notebook_config.py
위 폴더로 직접 들어가거나 경로를 통째로 복사해서 vi편집기를 실행시켜준다.
c = get_config()
c.NotebookApp.password = u'저장한 비밀번호 해시 값'
c.NotebookApp.ip = 'xxx.xxx.xxx.xxx'
c.NotebookApp.notebook_dir = '/root/notebook/'
i키를 눌러서 편집모드로 변경하고 파일 맨 위나 맨 아래에 설정할 것들을 입력하면된다.
password는 위에서 저장한 SHA~나 argon~ 값을 그대로 여기에 붙여넣기하면 되고,
ip에는 현재 접속한 서버의 IP주소를 입력하면된다.
추가로 주피터 노트북의 기본 포트는 8888인데 그게 아닌 다른 포트로 사용한다면 c.NotebookApp.port = 8888 같이 입력하면된다.
notebook_dir는 주피터 노트북의 베이스가 되는 폴더인데 나는 root에 notebook이라는 폴더를 생성해서 그 곳을 베이스 디렉토리로 설정했다. 폴더가 없으면 주피터 노트북 실행시 오류가 발생하므로 꼭 폴더를 먼저 생성하고 실행하자.
입력을 완료했다면 esc키를 눌러 편집모드를 종료하고 :wq를 입력하고 엔터를 눌러서 저장하고 vi편집기를 종료한다.
주피터 노트북 실행하기
# 주피터 노트북 실행하기
jupyter notebook --allow-root
나는 8888포트로 하나 사용하고 있어서 자동으로 8889포트로 주피터 노트북이 실행되었다. 위 같은 메시지로 나왔다면 성공이다!
이제 저 URL을 복사해서 붙여넣으면...
안된다...!
여기서 조금 막혔었는데 이 부분을 공유하고자 포스트를 작성했다.
방화벽 설정
서버 인스턴스의 방화벽이 기본 SSH 22포트에만 열려있는데 여기에 TCP 8888포트를 허용해주면된다.
위에는 앞서말한 Vultr의 방화벽 설정화면인데 TCP 8888 0.0.0.0/0 이 세개만 잘 설정 해주면된다.
(또 Vultr의 경우 방화벽과 인스턴스를 링크시켜주는 작업이 있는데 이 것도 까먹지 말고 꼭 해주자)
# 주피터 노트북 실행하기
jupyter notebook --allow-root
종료가 되었다면 다시 주피터 노트북을 실행시키고 URL을 다시 입력해보면...
여전히 안된다...!
ㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎ
사실 여기서 멘붕이 왔었는데 결국 해답을 찾아냈다.
서버 방화벽 설정
문제는 바로 서버의 방화벽에 막혀있어서 그랬던 것이였따..
주피터가 켜져있다면 Control + C 키로 종료시켜주자 진짜 나갈거냐고 한번 더 물어보면 y를 눌러서 종료시켜주자
그리고 방화벽을 설정해보자
# 방화벽 상태 확인하기
ufw status verbose
# 8888/tcp 포트 허용하기
ufw allow 8888/tcp
먼저 ufw status verbose로 방화벽 상태를 확인해본다. 나는 기존에 8888포트를 허용해 놔서 22포트와 8888포트가 허용되어 있는 것으로 나왔는데 만약 기존에 하지 않았다면 22포트만 허용이 되어있었을거다. 그러면 ufw allow 8888/tcp를 입력해서 8888포트를 허용시켜주면된다!
이제 다시
# 주피터 노트북 실행하기
jupyter notebook --allow-root
종료되었던 주피터 노트북을 실행시키고 URL을 다시 입력해보면...
성공적으로 실행된화면을 볼 수있다!!!
처음에 설정한 비밀번호를 입력하고 로그인을 누르면 로컬처럼 주피터 노트북을 서버에서 실행시켜 사용할 수 있다.
+) 추가
사실 위 경우에는 Vultr에서 한 번, 우분투에서 한 번 총 두 번의 방화벽이 설정되어 있다. 한 곳에만 방화벽을 설정해서 사용하고 싶다면 Vultr에서 방화벽과 링킹된 인스턴스를 해제하던가 우분투에서 ufw disable을 사용하여 서버의 방화벽을 비활성화하면된다.
++) 추가
주피터 노트북을 매번 커맨드라인으로 실행시키지 않고 항상 켜둔 상태(백그라운드)로 실행되게 하려면
nohup jupyter notebook --allow-root
앞에 nohup을 작성하면 백그라운드에서 작동한다.
# 현재 실행중인 주피터 노트북 리스트 조회하기
jupyter notebook list
# 현재 서버에서 동작하는 jupyter가 포함된 파일 조회하기
ps -ef | grep jupyter
# 위에서 조회한 PID로 백그라운드 주피터 노트북 강제 종료하기
kill -9 pid [PID]
ps -ef | grep jupyer로 조회하면 위와 같이 나오는데 jupyter-notebook을 찾아서 두 번째에 있는 50579 같은 PID값으로 강제 종료하면된다.
'Dev' 카테고리의 다른 글
Typescript의 자주쓰는 유틸리티 타입들 (Pick, Omit, Partial, Exclude, Record) (0) | 2023.09.03 |
---|---|
우분투 서버에 MySQL 설치부터 MySQL Workbench에 연결하기까지 (0) | 2023.08.07 |
정규표현식 요약지 (Regex Cheatsheet) (0) | 2023.03.19 |