Jupyter Notebook 설치와 원격 접속 설정 기록
서버에 Jupyter Notebook을 설치하고 원격에서 접속할 수 있도록 설정했던 기록입니다. 당시에는 Python 3.6과 NotebookApp 설정을 사용했습니다.
아래 명령은 구형 Notebook 환경의 기록입니다. Notebook 7이나 Jupyter Server에서는 설정 이름과 실행 구성이 달라질 수 있습니다.
설치와 설정 파일 생성
당시 설치 명령은 다음과 같습니다.
pip3.6 install jupyter
jupyter-notebook --generate-config설정 파일은 ~/.jupyter/jupyter_notebook_config.py에 생성됩니다. 실행하는 계정의 홈 경로를 기준으로 하므로 서비스 계정이 바뀌면 읽는 파일도 확인해야 합니다.
접속 주소와 작업 디렉터리
당시에는 서버의 내부 IP와 작업 디렉터리를 지정했습니다. 아래는 경로와 주소를 바꾼 예시입니다.
c.NotebookApp.ip = '127.0.0.1'
c.NotebookApp.notebook_dir = '/home/notebook/workspace'
c.NotebookApp.open_browser = False127.0.0.1은 서버 내부에서만 접근하는 예시입니다. 원격에서 직접 접속하려면 실제 수신 주소와 네트워크 구성을 맞춰야 합니다. 프록시를 통해 제공하는 경우에는 프록시에서 서버에 접근할 수 있는지도 확인해야 합니다.
당시 설정에는 allow_origin='*'도 있었지만, 원격 접속을 연다는 이유만으로 필요한 설정은 아닙니다. 수신 주소와 CORS 허용 출처는 구분해서 설정해야 합니다.
비밀번호 설정
jupyter-notebook password비밀번호를 설정한 뒤 실제 접속에서 인증이 적용되는지 확인합니다. 주소와 포트가 열린 것만으로 접속 준비가 끝난 것은 아닙니다.
백그라운드 실행
당시에는 nohup으로 실행하고 부팅 시 스크립트가 실행되도록 rc.local에 등록했습니다. 당시에는 root 계정으로 실행하기도 했지만, 여기서는 일반 사용자 환경에서 동작을 확인하는 예시로 바꿨습니다.
nohup jupyter-notebook > "$HOME/jupyter.log" 2>&1 &운영 서비스를 구성한다면 실행 계정과 환경, 로그 위치, 재시작 방식을 함께 정해야 합니다. 가상환경을 사용한다면 서비스에서도 같은 Python과 Jupyter 실행 파일을 참조해야 합니다.
Notebook과 JupyterHub 구분
커널을 여러 개 등록하는 것과 사용자별 서버를 나누는 것은 다릅니다. 하나의 Notebook 서버에 Python 커널을 더한다고 사용자 간 파일과 권한이 자동으로 분리되지는 않습니다.
여러 사용자의 서버를 관리하는 JupyterHub 설치 준비는 폐쇄망 JupyterHub 설치 기록에서, 포털에 화면을 넣는 설정은 iframe CSP 글에서 다룹니다.