개발 환경 설정

wimes·2020년 4월 7일
0

CI/CD tutorial

목록 보기
1/7

본 포스팅은 동빈나 님의 Docker 활용 및 배포 자동화 실전 초급을 보고 정리한 글입니다.

실습용 AWS EC2 인스턴스 생성 및 접속

AWS EC2 인스턴스 생성

  1. https://aws.amazon.com/ko/console/ 에서 AWS Console에 로그인 합니다.

  2. 로그인 후에 EC2 서비스를 찾도록 합니다.

  3. 인스턴스 시작을 눌러 인스턴스를 생성하도록 합니다.

  4. AMI를 선택하는데 Ubuntu Server 18.04 LTS 를 선택하도록 합니다.

  5. t2.micro(프리티어 사용 가능) 를 선택 후 검토 및 시작을 눌러줍니다.

  6. 시작하기 를 누릅니다.

  7. 시작하기를 눌렀을 경우 키페어를 생성하는 팝업이 뜹니다. 새로운 키페어를 생성해주고 이름은 원하시는 것을 적어줍니다.

    키 페어 다운로드 합니다. 키페어 파일은 잃어버리면 매우 귀찮아 지므로 잃어버리지 않도록 주의합니다.

    인스턴스 시작을 눌러줍니다.

  8. 이제 인스턴스 생성이 완료되었습니다. 인스턴스 보기를 눌러 현재 실행중인 인스턴스를 볼 수 있습니다.

SSH로 접속

EC2 대시보드의 연결을 누른 후 다음의 행동을 따릅니다.

chmod 400 ci_cd_tutoria.pem

ssh -i "ci_cd_tutoria.pem" ubuntu@ec2-15-164-162-227.ap-northeast-2.compute.amazonaws.com

접속 성공!

Jupyter Notebook 설치, HTTPS 적용, 시스템 서비스 설정하기

Jupyter Notebook 설치

Terminal로 작업 시에 불편함이 많아 GUI환경에서 작업을 진행하기 위해 Jupyter notebook을 이용하도록 합니다.

EC2에 접속되어있는 상태에서 아래의 명령어를 실행 해 줍니다.
sudo sapt-get update

현재 우리가 설치한 Ubuntu 18.04 버전의 경우에는 python 설치가 되어있기 때문에 따로 python을 설치할 필요는 없습니다.
(혹시나 python이 없다면 python을 설치해주도록 합니다.)

python package를 설치해줍니다.
sudo apt-get install python3-pip

pip를 설치했다면 이제 pip를 이용해 jupyter notebook을 설치해줍니다.

sudo pip3 install notebook

Jupyter notebook 설정

이제 notebook에 비밀번호를 설정해줍니다.

ptyhon3

from notebook.auth import passwd
passwd()

비밀번호를 설정 후 나오는 hash 값을 복사해서 갖고있어야 합니다.

이제 jupyter 환경설정을 해줍니다. jupyter notebook --generate-config !

vim을 이용해 환경설정 파일을 수정해줍니다.
vim /home/ubuntu/.jupyter/jupyter_notebook_config.py

해당 파일의 제일 밑에 부분에 다음과 같이 추가해줍니다.

c = get_config()
c.NotebookApp.password = u'{아까 설정했던 비밀번호의 hash값}'
c.NotebookApp.ip = '{현재 접속된 ec2의 내부 ip값}'
c.NotebookApp.notebook_dir = '/' # notebook dir을 root로 설정했음.

Jupyter notebook 외부에서 실행

이제 jupyter notebook을 root권한을 갖고 실행하도록 합니다.
sudo jupyter notebook --allow-root

위의 사진에서 보듯이 8888번 포트로 접속을 해야합니다.

AWS EC2 dashboard에서 외부 방화벽 설정을 해줍니다.(왼쪽에 보이는 보안그룹 클릭)!

현재 실행중인 ec2 인스턴스의 인바운드 규칙을 편집해주도록 합니다.

규칙추가 버튼을 눌러 888번 포트로 언제어디서나 누구나 다 접속할 수 있도록 해줍니다.!

다시 인스턴스 탭으로 돌아와서 해당 아이피로 접속을 해보겠습니다.

{IPv4 퍼블릭 IP}:8888 을 웹브라우저로 접속하게 되면 다음과 같이 성공 한 모습을 볼 수 있습니다.

터미널도 접근이 가능합니다.

이제 jupyter notebook이 항상 돌아갈 수 있도록 terminal에서 설정을 해줍니다.

ctrl-z를 눌러서 jupyter 를 잠시 실행을 중단하고
bg 상태로 돌아가게 하고
소유권을 포기한 상태로 만들면 이제 jupyter notebook이 항상 실행중인 상태가 됩니다.

bg

disown -h

HTTPS 적용

현재 SSL인증서가 적용되지 않은 상태여서 보안에 취약한 상태입니다. 따라서 인증서를 적용(https)하도록 하겠습니다.

netstat 명령어로 현재 8888포트로 돌아가고 있는 process를 확인합니다.

sudo netstat -nap | grep 8888

kill 명령어로 종료하도록 합니다.
sudo kill -9 17091

cd /home/ubuntu

pwd

mkdir ssl

cd ssl

그다음 ssl을 만들어줄 수 있습니다. 인증서 유효기간은 365일 rsa 알고리즘을 적용한 key를 만들어 줍니다.
개인키(private key)는 cert.key 공개키(public key)는 cert.pem 이라는 이름으로 만들어 줍니다.

sudo openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout "cert.key" -out "cert.pem" -batch

이후에 jupyter notebook 환경설정 파일을 다시 열어서 수정해줍니다.

vim /home/ubuntu/.jupyter/jupyter_notebook_config.py

이제 다시 jupyter notebook을 실행해 줍니다.
sudo jupyter-notebook --allow-root

https 가 적용된 것을 확인할 수 있습니다.

이제 웹브라우저로 접속할 때 https 를 붙여서 접속하도록 합니다.

Jupyter notebook을 시스템 서비스로 등록

서버가 종료된 후 재부팅 되어서도 jupyter notebook 관련 명령어들이 자동으로 실행될 수 있도록 합니다.

우선 ctrl-c 를 눌러서 jupyter notebook을 종료 시켜줍니다.

jupyter-notebook 실행파일의 위치를 찾도록 합니다.
which jupyter-notebook

이제 서비스 파일을 작성해도록 합니다.
sudo vim /etc/systemd/system/jupyter.service

[Unit]
Description=Jupyter Notebook Server

[Service]
Type=simple
# 현재 특정한 명령을 수행하는 user 값
# aws ec2를 default로 실행했다면 user이름이 ubuntu 일 것이다.
User=ubuntu 

# 어떤 명령을 수행을 할 것인가
# sudo명령으로 jupyter-notebook을 실행, 환경설정 파일의 위치를 같이 넣어준다.
ExecStart=/usr/bin/sudo /usr/local/bin/jupyter-notebook --allow-root --config=/home/ubuntu/.jupyter/jupyter_notebook_config.py

# 
[Install]
WantedBy=multi-user.target

이제 jupyter-notebook을 실행시키도록 하겠습니다.

sudo systemctl daemon-reload

jupyter를 사용가능한 모드로 만들어줍니다. sudo systemctl enable jupyter

jupyter를 이제 항상 실행상태로 만들어 줍니다. sudo systemctl start jupyter

확인. sudo systemctl status jupyter

profile
iOS/Swift & Node.js Dev.

3개의 댓글

comment-user-thumbnail
2020년 7월 17일

안녕하세요 좋은 글 감사합니다 :-)
주피터가 계속 실행되면 주피터에 올린 .py 파일 내부에 scheduler 등록 없이도 계속 돌아가게 되는 건가요?

2개의 답글