[서버] 2:Jupyter Notebook로 관리하기

 

 

 

 

0️⃣ 사전 설명


Jupyter Notebook

  • 터미널에서 관리하기 보단, gui환경으로 서버를 관리하는 편리함을 얻기 위해 설치해보자
    • 이후엔 터미널이 아니라 웹 브라우저로 서버를 관리할 수 있을 것이다
  • python의 pip를 통해 설치할 것이다
    • 즉, python을 설치하고, python의 pip 명령어를 통해 install할 것이다
    • 그러므로 서버 접속> python 설치 > pip install 주피터 절차로 가야하는 것이 정석이다

 

1️⃣ 주피터 설치


~$: sudo apt-get update  ~$: python3 //ubuntu에는 기본적으로 python이 깔려있음, 확인하기
~$: exit() //python이 깔려진 버전을 확인 한 후, 파이썬 접속 종료 
~$: sudo apt-get install python3-pip 
~$: sudo pip3 install notebook

 

 

2️⃣ 주피터 접근권한을 위한 비밀번호 설정


  • passwd라는 라이브러리를 통한 jupyther 비밀번호 생성하기
~$:python3 //파이썬 쉘 진입 
>>> passwd() 

Enter password: [비밀번호] 
Verity password: [비밀번호] 
'해시화된 암호' // 복사하여 따로 저장 

>>> exit() // 종료

이제 이 암호를 통해 외부에서 접근시 이 암호를 통해서만 서버 접속 가능

 

3️⃣ jupyter 환경설정 파일 만들기


  • jupyter 환경설정과 실행
    // 환경설정 파일 제작 
    ~$: jupyter notebook --gernerate-config Writing default config to: /home/ubuntu/.jupyter/jupyter_notebook_config.py 
    ~$: sudo vi /home/ubuntu/.jupyter/jupyter_notebook_config.py  
    // a키를 눌러 편집모드 진입 후 아래 작성 
    
    c = get_config() 
    c.NotebookApp.password = u'[해시화된 암호]' 
    c.NotebookApp.ip = '[현재 aws ip주소]' 
    c.NotebookApp.notebook_dir = '/'  // esc키를 누른 후, 아래의 명령어로 편집모드 탈출 :wq!  
    
    // root권한을 가진 상태로 jupyter 실행, 외부에서 접속할 수 있도록 실행해보기 
    ~$: sudo jupyter-notebook --allow-root  
    //대충 서버아이피:8888포트가 열렸다는 내용 확인 
    
    ~$:

 

4️⃣ AWS 인바운드 규칙 추가하기


 

  •  aws에서 인스턴스창 > 보안 탭> 보안 그룹 > 인바운드 규칙 
  • 인바운드 규칙 편집 
    •  사용자 지정 TCP, 8888포트, Anywhere

 

  • 해당 아이피에 :8888포트를 붙여서 접속하면 됨

 

  • 패스워드 입력하여 접속후 화면 확인(해시화되지 않은 패스워드를 입력)

 

5️⃣ Jupyter를 항상 실행될 수 있는 상태로 만들기


  • ubuntu 터미널에서 jupyter활성화 설정
    [notebookApp] ... [notebookApp] ...  //ctrl + z를 통해 탈출 
    ~$: bg [1]+ sudo jupyter-notebook --allow-root & //백그라운드에서 실행됨을 확인 
    ~$: disown -h //소유권을 포기하게 만듦, 항상 실행중인 상태가 되었음 
    ~$: ls

 

  • jupyter를 웹브라우저에서 터미널로 확인하기
  • 이제 이 웹브라우저에서 동일한 진행이 가능하게 되었다
    • 이제 ssh없이도 가능하다는 것이다
  • 여기까지는 통신상태가 위험한 상태다
    • 별도의 설정을 다시 해주자

 

6️⃣ 현재 실행중인 notebook 종료하기


  • 기존의 ubuntu 터미널에서 현재 실행중인 notebook 종료시키기 
~$: sudo netstat -nap | grep 8888 // 해당 포트를 이용중인 ip확인 가능 (LISTEN 포트번호/python)
//이용중인 포트들 확인
~$: sudo kill -9 [포트번호]  //실행중인 ip off 시키기

 

  • https를 적용할 수 있도록 하기
~$: cd /home/ubuntu
~$: pwd
// print working drectory, 현재 경로 확인

// 이하로 사설 인증서 만들기 위한 작업
~$: mkdir ssl //폴더 생성
~$: cd ssl
~ssl$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout [키이름.key] -out [pem이름.pem] -batch
//키 생성 내용 확인
~ssl$ ls
//키 확인
sudo openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout
  • 인증서 유효기간 365일, rsa 알고리즘을 통해 키를 만듦 (공개키 기반)
    • 보통 ssl인증서는 공개키 기반 구조에 입각한 알고리즘을 채택한다
      • 자세한 건 🔎 ‘공개키 기반 구조’
      • 인증과정에서는 공개키과 개인키로 각각 구분이 된다~
-keyout “[키이름.key]” -out “[pem이름.pem]” -batch
  • [키이름.key]는 절대로, 다른 사람에게 노출이 되어선 안 된다

 

     

    • jupyter 설정편집  
    ~ssl$ sudo vi /home/ubuntu/.jupyter/jupyter_notebook_config.py
    
    // a키를 통해 insert, 최하위에 공개키 파일 내용 추가하기
    c.NotebookApp.certfile = u'/home/ubuntu/ssl/[pem이름].pem'
    c.NotebookApp.keyfile = u'/home/ubuntu/ssl/[key이름].key'
    // esc키 누르고 아래 명령어를 통해 편집모드 탈출
    :wq!
    
    ~ssl$ sudo jupyter-notebook --allow-root // 주피터 재실행
    //실행 문구 확인

    • safari를 통해 https:// 아이피:8888 로 접근하기
      • 크롬은 암만해봤자 보안설정으로 안 됨
      • 사파리 접속을 통해 위험성 인지 체크하고 넘어가면 접속 가능
      • 기존의 해시코드 이전 비밀번호를 작성하고 들어가면 연결 완료

     

    7️⃣ 시스템 서비스로서 jupyter 등록하기


    • 내 로컬 노트북을 껐다 키면 그때마다 다시 해야하므로 이에 대한 설정을 해주자
      • 정확히 말하자면 :우분투 서버 진입 > sudo jupyter-notebook —alow-root 명령어 입력 를 생략하게 만들기
    ~ssl$: which jupyter-notebook //주피터 실행파일의 경로 확인  
    ~ssl$ sudo vi /etc/Systemd/Syste/jupyter.service //서비스 파일 작성 
    
    [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   
    
    
    ~ssl$

     

    sudo systemctl daemon-reload // 데몬 재로딩
    sudo systemctl enable jupyther // 주피터 서비스 사용 가능 상태로 만들기
    //생성문구 확인
    sudo systemctl start jupyter // 주피터 서비스를 항상 서비스 하도록함
    sudo systemctl status jupyter // 주피터 서비스 실행 상태 확인 
    //실행중인 로그 확인
    
    sudo systemctl restart jupyter // 필요하다면 주피터 재실행
    • 이제, 아마존 웹 서비스에서 인스턴스를 재부팅 시키는 경우까지 포함하여 주피터는 자동 실행될 것이다