ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Jupyter Notebook을 통한 서버 접속
    개발도구 2021. 5. 24. 00:48

     

    AWS EC2 인스턴스의 서버를 Jupyter Notebook을 통해 접속

     

    cmd 창에서 ssh 통신으로 접속

    AWS EC2 인스턴스 대쉬보드 -> 연결 -> SSH 클라이언트 명령어 로 접속

     

     

     

    환경세팅

    현 시점에서는 python3 사용

    python3는 ubuntu 최근 버전에서 기본적으로 깔려있다

     

    pip 설치를 위한 리눅스 패키지 매니저 업데이트 : apt-get 

    $ sudo apt-get update

     

     

    python 패키지 매니저 설치 : pip3 

    $ sudo apt-get install python3-pip

     

     

    python 웹기반 개발환경 관리 패키지 설치 : jupyter notebook

    $ sudo pip3 install notebook

    호스팅시 CLI 환경이 아닌 웹브라우저를 통해 쉽게 개발환경을 관리할 수 있다.

    ssh 클라이언트가 없어도 웹브라우저만 있으면 접속 및 관리 가능

     

     

    python3 인터프리터 실행

    $ python3

     

     

    python 명령창에서 jupyter notebook 호스트 접속 비밀번호 설정

    >>> from notebook.auth import passwd
    >>> passwd()
    Enter password:

    보안을 위해 접속 비밀번호를 설정해준다.

    설정시 Verify password 라는 문장과 함께 비밀번호에 대한 해쉬값이 출력된다. 

    값은 따로 저장해둔다.

     

    jupyter notebook 환경 설정하기

    $ jupyter notebook --generate-config

    $ sudo vi /home/ubuntu/.jupyter/jupyter_notebook_config.py

     

    config 파일 생성하기

    리눅스 vi 에디터로 config 파일 편집하기

    a 로 편집모드 전환

     

     

    config 파일끝에 다음 문장 추가

    c=get_config()
    c.NotebookApp.passsword = u'비밀번호해쉬값'
    c.NotebookApp.ip = '호스팅서버의 private IP'
    c.NotebookApp.notebook_dir = '/'
    c.NotebookApp.port = 8888

    vi 에디터 편집 끝내고 저장하고 나가기

    esc 눌러서 모드 전환 후 :wq! 입력

     

     

    클라우드 호스팅 서버에서 보안목록에 포트 추가(tcp, 8888)

     

     

    주피터 노트북 실행

    $ sudo jupyter-notebook --allow-root --config=/home/ubuntu/.jupyter/jupyter_notebook_config.py

     

     

    다른 프로세스가 포트 사용중이면 해당 포트 사용중인 프로세스 강제 종료시키는 명령어

    $ sudo fuser -k 8888/tcp

     

     

    웹브라우저로 서버 접속하기 

    http://호스팅 서버의 public IP:8888/

     

     

    터미널이 닫혀도 백그라운드에서 실행하도록 설정하기

    $ bg
    $ diswon- h

    백그라운드 실행-소유권 포기

     

     

     

    HTTPS 적용을 위한 사설키 만들기 : SSL

    $ sudo kill -9 호스팅서버의pid
    $ cd /home/ubuntu
    $ mkdir ssl
    $ cd ssl
    $ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout "jupyter_key.key" -out "jupyter_cert.pem" -batch

     

    .key는 개인키 .pem은 공개키이다. 개인키인 .key는 보안을 위해 절대 노출되어선 안된다

     

     

    주피터 config 파일에 ssl 통신 설정하기

    $sudo vi /home/ubuntu/.jupyter/jupyter_notebook_config.py
    ...
    설정 파일에 밑에 줄 추가
    c.NotebookApp.certfile = u'/home/ubuntu/ssl/jupyter_cert.pem'
    c.NotebookApp.keyfile = u'/home/ubuntu/ssl/jupyter_key.key'

    다시 jupyter notebook을 실행하면 http가 아닌 https 통신이 적용된것을 확인할 수 있다

     

     

     

     

    신뢰받지 않는 인증서 자신이 만든 사설 ssl 인증서이므로 그냥 

     

     

    시스템 서비스로 등록하여 리부팅되어도 항상 실행되도록 설정하기 

     

    $sudo netstat -nap | grep 8888   # 해당 포트를 사용중인 프로세스 확인
    $sudo kill -9 프로세스pid        # 해당 pid 프로세스 종료 
    
    $sudo vi /etc/systemd/system/jupyter.service     # 서비스 파일 작성
    

     

    vi 에디터에서 다음과 같이 입력

    [Unit]
    Description=Jupyter Notebook Server
    
    [Service]
    Type=simple
    User=ubuntu
    ExecStart=/usr/bin/sudo /usr/local/bin/jupyter-notebook --allow-root --config=/home/ubuntu/.jupyter/jupyter_notebook_config.py
    
    [Install]
    WantedBy=multi-user.target

     

     

    서비스 등록하기 

    $sudo systemctl daemon-reload  	    # 시스템 데몬 실행
    $sudo systemctl enable jupyter		# 주피터 서비스 사용가능상태 만들기 
    $sudo systemctl start jupyter		# 주피터 서비스 항상 실행시키기
    $sudo systemctl status jupyter		# 실행중인 주피터 서비스 확인하기

     

    완료

    서버가 재부팅 되어도 jupyter notebook 서비스는 재구동되어 항상 서비스됨 

    q 눌러서 출력창 나가기 

     

     

    주피터 서비스 재시작 해보기

    $ sudo systemctl restart jupyter
Designed by Tistory.