AWS배포하기

AWS EC2 배포하기-2 [Jupyter Notebook 설치, HTTPS 적용, 시스템 서비스 설정하기]

o_b:us 2022. 7. 5. 11:39

지난 시간에 이어서 주피터 노트북을 설치해보자

1. 운영체제에서 사용 가능한 패키지들과 그 버전에 대한 정보를 업데이트하기

우선 Ubuntu의 apt-get명령어를 업데이트해주자

//ssh
sudo apt-get update

2. 파이썬 패키지 설치

우분투에선 기본적으로 파이썬3 언어가 깔려 있기 때문에
관련 패키지만 설치하기 위해 pip를 설치하자

//ssh
sudo apt-get install python3-pip

3. 주피터노트북 비밀번호 설정

파이썬 언어를 쓰기 위해 python3를 입력하고 아래와 같이 타이핑해주자

//python3, 주피터노트북 비밀번호 설정
>>> from notebook.auth import passwd
>>> passwd()

<!-- 만약 `from notebook.auth import passwd`를 입력했을 때 `ImportError: No module named notebook.notebookapp`라는
오류가 뜬다면 python을 종료하고 추가적으로 아래 스크립트를 입력하고 다시 진행해주자. -->

//ssh
sudo pip install --upgrade setuptools pip
sudo pip install --upgrade "ipython[all]"

//아래 명령어는 `ModuleNotFoundError: No module named 'jupyter-server-proxy` 자꾸 이런 에러가 뜨길래 추가해줬다.

sudo pip install jupyter-server-proxy

 

비밀번호를 입력하고, 검증까지 하면 SHA1로 암호화되었거나, argon2(여러번 해싱한 알고리즘)로 암호화된 비밀번호가 나온다. 영상에서는 SHA1로 진행되었지만, 내가했을 땐 argon2로 암호화된 키가 나왔었다. 일단 상관없으니까 그대로 진행하자! 'argon2:$argon2id~~~' 키자체를 복사해서 메모장에 옮겨놔야햔다.

※ python을 종료할 땐 ctrl+z

4. 주피터노트북 환경설정파일 생성

주피터 환경설정파일을 만들어주자

//ssh
jupyter notebook --generate-config     //파일생성
//생성 후에 나온 경로/파일.py를 복사해서 아래 명령어에 붙여주자(home/ubuntu/.jupyter/jupyter_notebook_config.py)
sudo vi 경로/파일.py
c = get_config() // 환경설정 개체 만들어주기
c.NotebookApp.password = u'아까복사해둔 argon2키값'
c.NotebookApp.ip = '원격주소'
c.NotebookApp.notebook_dir = '/'

우선 방향키(↓)를 눌러서 맨 밑으로 가자
그리고 위 내용을 작성해주자.
※ a를 누르면 수정모드로 바뀐다
ctrl+c로 수정모드 벗어나고 :wq! 저장

5. 주피터 노트북 실행하기

아래 스크립트를 실행해서 루트권한을 가진 상태로 실행을 해보자.

//ssh
jupyter notebook --allow-root

1. 8888 포트로 실행한것을 볼 수 있다. 이제 웹브라우저에서도 실행할 수 있게 인스턴스의 방화벽을 설정해보자.




2. aws -> ec2 -> 인스턴스 -> 네트워킹 -> 보안그룹 클릭




3. 인바운드 규칙 편집 클릭




4. 규칙추가 버튼 누르고 -> 포트 8888 -> 0.0.0.0/0 기입 후 저장




5. 퍼블릭ip주소 복사후




위 사진대로 url-> 퍼블릭ip:8888포트로 접속할 수 있다.



6. 주피터 노트북 항상 돌아가게 만들기

이제 주피터 노트북을 항상 실행될 수 있는 상태로 만들어보자

//ssh
bg//백그라운드상태에서도 돌아갈 수 있게 해줌
disown -h//소유권을 포기하게하면 항상 실행되게 해준다.

7. https를 적용해보자

차례대로 다음 명령어도 실행해주자

//ssh
sudo apt install net-tools  // netstat 명령어를 사용하기 위해 net-tools설치
sudo netstat -nap | grep 8888

 

이처럼 8888포트에 사용중인 것을 확인할 수 있다. 다음 명령어도 따라하자.

//ssh
sudo kill -9 'pid' //목록에 적힌 pid

cd /home/ubuntu

mkdir ssl

cd ssl

~~sudo openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout "prv.key" -out "pub.pem" -batch //사설인증서만들기 `prv.key`개인키, `pub.pem` 공개키~~

//https연결 부분에서 문제가 생겨서 아래 명령어를 사용하자
//key-> 개인키 , pem -> 공개키 를 의미

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mykey.key -out mycert.pem

ssl 통신을 하기위해서 주피터환경설정 파일을 다시한번 수정해야한다.


//ssh
sudo vi 경로/파일.py //환경설정 파일을 열어주고

//환경설정 파일안에서 작성
c.NotebookApp.certfile = u'/home/ubuntu/ssl/mycert.pem'
c.NotebookApp.keyfile = u'/home/ubuntu/ssl/mykey.key'

//다시한번 주피터노트북을 실행시켜주자
~~sudo jupyter-notebook --allow-root~~
jupyter-notebook    //강의에서는 관리자 권한으로 실행해도 https가 적용되던데 안되길래 일반 실행으로 하니까 https 가 적용되네... 

8. 웹브라우저로 https접속하기

https://퍼플릭ip:8888 로 접속하면 이처럼 웹브라우저에서 한번 오류 메세지를 띄워준다. 고급 버튼을 누르고
퍼블릭ip (안전하지 않음)(으)로 계속하기를 눌러서 접속해보자.

9. 주피터노트북을 시스템 서비스로 등록해보자.

서버가 재부팅 될 때 자동으로 실행되게끔 만들어보자. 우선 서비스 파일을 먼저 작성하자

sudo vi /etc/systemd/system/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

 

다음으로 서비스를 구동시킬 수 있도록 만들자

//ssh
sudo systemctl daemon-reload
sudo systemctl enable jupyter
sudo systemctl start jupyter
sudo systemctl status jupyter

//번외)재실행 명령어 
sudo systemctl restart jupyter

 

※ q를 눌러서 ssh로 돌아오기


출처 : 동빈나 유트브