저번 글에서 aws의 EC2 인스턴스를 생성해서 접속해 보았다.
그런데 콘솔창에서 해당 인스턴스에 접근을 해서 서버를 관리하는 것은 불편할 수 있기 때문에 Jupyter Notebook(GUI 환경)으로 서버를 관리해보려고 한다
Jupyter Notebook은 콘솔 창이 아니라 웹브라우저 환경에서 해당 서버에 바로 접근해서 서버를 관리할 수 있도록 해준다
먼저 apt-get 명령어를 이용해 설치할 것이기 때문에 아래처럼 apt-get을 업데이트 해준다.
sudo apt-get update
그리고 기본적으로 ubuntu에는 python3가 깔려있다. 그렇기 때문에 python3를 추가적으로 설치하지는 않고 관련 패키지를 설치할 수 있도록 도와주는 python3 pip를 설치할 것이다.
sudo apt-get install python3-pip
이제 설치된 파이프를 이용해서 Jupyter Notebook을 설치할 것이다.
sudo pip3 install notebook
여기까지 했다면, 만들어진 Jupyter를 이용해 서버 외부에서 해당 서버에 웹브라우저를 이용하여 접속할 수 있도록 된 상태이다.
하지만 여기서 우리는 아무나 서버에 접근하면 안되기 때문에 쥬피터 접속을 위한 비밀번호를 설정해 줄 것이다.
이렇게 python3를 이용해서 notebook.auth 라이브러리를 이용하면 된다.
그리고 비밀번호를 설정하겠다는 패스워드 함수를 호출하여 패스워드를 입력해주면 완료가 된다.
이 과정이 끝나면 내가 설정한 비밀번호의 hash값이 argon2:로 시작하는 키로 나온다. 그러면 메모장에 그대로 복사해둔다.
이제 우리가 이 서버에서 Jupyter Notebook을 실행해서 외부해서 접속을 했을 때 비밀번호를 입력해야지 서버에 접속할 수 있도록 하기 위해서 주피터 환경설정을 진행해줄 것이다.
이를 위해서는 먼저 주피터 환경설정 파일을 만들어 주어야한다.
jupyter notebook --generate-config
이렇게 --generate-config 옵션을 붙여서 환경설정 파일을 만들 수 있고, 아래에 환경설정 파일에 존재하는 경로가 반환되는걸 확인할 수 있다.
이제 vi 에디터를 이용해서 해당 환경설정 파일을 수정해보겠다.
sudo vi [환경설정 파일 경로]
제일 아래로 내려서 아래 내용들을 모두 입력해준다.
c = get_config()
먼저 환경설정 객체를 만들기 위해 해당 코드를 맨 위에 입력하고, 나머지는 아래와 같이 코드 수정
외부 접속 허용하기
c.NotebookApp.allow_origin = '*'
작업경로 설정
c.NotebookApp.notebook_dir = '원하는/작업경로를/입력'
아이피 설정
c.NotebookApp.ip = '사용할.아이피.입력.'
Private IP를 입력한다
포트 설정
c.NotebookApp.port = '사용할 포트번호 네자리를 입력, 초기값은 8888.'
비밀번호 설정
c.NotebookApp.password = u'복사해둔 암호화된 비밀번호
예) c.NotebookApp.password = u'argon2:' '
시작시 브라우저 실행여부
c.NotebookApp.open_browser = False # 서버로 실행될때 서버PC에서 주피터 노트북 창이 새로 열릴 필요가 없다.
모든 설정을 마쳤다면 :wq를 이용해 저장을 하고 나간다
이제 Jupyter Notebook을 root권한을 가진 상태로 실행해서 외부에서 접속할 수 있도록 할것이다.
먼저 아래 명령어들을 입력해준다.
sudo jupyter-notebook --allow-root
cd /home/ubuntu/.jupyter // .jupyter 폴더로 이동
jupyter notebook --config jupyter_notebook_config.py // 서버 실행
그 다음에는 aws에서 생성한 인스턴스를 확인하고 보안그룹을 클릭해준다
인바운드 규칙 편집을 눌러 아래 사진과 같이 규칙을 추가하고 저장한다. (8888포트로 누구나 접속할 수 있도록 방화벽을 열어주는 과정)
Jupyter Notebook 서버는 초기에 8888 포트로 열린다.
이제 이전 화면으로 돌아와서 퍼블릭 주소에 :8888을 붙여서 접속을 하면
예)18.118.20.88:8888
아래와 같은 화면을 볼 수 있고 설정한 패스워드를 입력하면 터미널까지 접속 가능해진걸 확인할 수 있다.
만약 접속할 수 없다는 에러가 뜬다면 포트 방화벽이 해제가 안된 것이기 때문에 아래 명령어를 입력하여 해제해준다.
sudo ufw allow 8888
이제 이렇게 더 이상 ssh가 필요하지 않고 바로 웹브라우저에서 해당 서버에 접속할 수 있게 되었다.
하지만 우리는 Jupyter Notebook을 항상 실행될 수 있는 상태로 만들고 싶기 때문에 기존의 터미널에 다음과 같은 작업을 해준다
여기까지 끝내면 터미널에서 서버를 종료해도 웹브라우저에서 Jupyter Notebook 서버가 항상 켜져있는걸 확인할 수 있다.