도커1: AWS EC2 인스턴스 생성 및 Jupyter 시스템 서비스 등록

인생노잼시기·2021년 3월 7일
0

🐳Docker

목록 보기
1/4

나동빈님의 도커 강의 실습
https://www.youtube.com/watch?v=HbKCxBFT2wk&list=PLRx0vPvlEmdChjc6N3JnLaX-Gihh5pHcx

Jupyter를 활용해 웹 브라우저에서 서버를 관리할 수 있도록 시스템 서비스로 등록하기
https://13.125.214.81:8888/terminals/1
이제 여기로 들어가서 관리하면 된다.

목표: 젠킨스 다뤄보고 도입여부 결정하기

키워드: CI/CD, Jenkins, Docker

AWS

서버 인스턴스 생성

EC2 클라우드의 가상 서버 대여
Ubuntu Server 18.04 LTS (HVM), SSD Volume Type

1GB의 메모리와 1개의 가상CPU

  • 새 키페어 생성하기
    .pem 형식의 파일이 생성됨
    나중에 사용해야하기 때문에 로컬에 폴더를 만들어 저장해둔다.

  • 키페어 파일 > 우클릭 > 속성
    보안 > 고급 > 상속 사용하지 않음 > 명시적 어쩌구
    나머지 사용자는 제거(관리자, 시스템만 접근 가능)

  • 인스턴스에 연결
    AWS에서 [연결]버튼 > ssh명령어 복사하기
    ssh -i "Docker_practice.pem" ubuntu@ec2-3-34-134-110.ap-northeast-2.compute.amazonaws.com
    cmd를 관리자 권한으로 실행시킨다.
    pem 파일이 있는 곳으로 cd한 뒤 위의 ssh명령어를 입력한다.

  • 연결 확인
    ubuntu@ip-172-31-12-189:~$ pwd
    /home/ubuntu

Jupyter Notebook 설치

웹 브라우저에서 gui로 서버를 조작하기 위한 유틸리티

ssh를 더이상 입력하지 않아도 되고
웹브라우저에서 해당 서버에 접근할 수 있어서 편리하다

  • apt-get 명령어 업데이트
    ubuntu@ip-172-31-12-189:~$ sudo apt-get update
    python은 이미 설치되어 있고 pip파이프 설치
    ubuntu@ip-172-31-12-189:~$ sudo apt-get install python3-pip
    ubuntu@ip-172-31-12-189:~$ sudo pip3 install notebook

  • 주피터 사용 시 비밀번호 입력하도록 환경설정
    ubuntu@ip-172-31-12-189:~$ python3
    >>> from notebook.auth import passwd
    >>> passwd()
    텍스트파일에 붙여넣기
    >>> exit()

  • sha1알고리즘을 사용하는 해시코드 발급받기
    >>> from notebook.auth import passwd
    >>> passwd(algorithm='sha1')
    텍스트파일에 붙여넣기
    >>> exit()

주피터 환경설정 파일 생성

ubuntu@ip-172-31-12-189:~$ jupyter notebook --generate-config
Writing default config to: /home/ubuntu/.jupyter/jupyter_notebook_config.py
ubuntu@ip-172-31-12-189:~$ sudo vi /home/ubuntu/.jupyter/jupyter_notebook_config.py

c = get_config()
c.NotebookApp.password = u'sha1:8e907d2dc5ea:38aa70d916c2a09c48b2e36d721145c50d642d62'
c.NotebookApp.ip = '172-31-42-206'
c.NotebookApp.notebook_dir = '/'
c.NotebookApp.allow_origin = '*'
패스워드 u뒤에 위에서 발급받은 sha1을 복붙해주고, ip주소도 변경해준다.

esc누르고 :wq!누르고 저장

Jupyter 명령어로 실행시키기

루트 권한으로 실행
ubuntu@ip-172-31-42-206:~$ sudo jupyter-notebook --allow-root

8888포트로 주피터 실행시키기

  • 방화벽 열기
    EC2 > 보안 그룹 > sg-06e0a05736315038c - launch-wizard-1 > 인바운드 규칙 편집
    포트범위: 8888 0.0.0.0/0

  • 퍼블릭 ipv4주소로 접근
    EC2 > 인스턴스 > i-019d6fda3e50ce398

13.125.214.81:8888

주피터 노트북이 백그라운드에서 돌아가려면

서버가 죽어도 돌아가게 만들기

ctrl Z 서버 종료
ubuntu@ip-172-31-12-189:~$ bg
ubuntu@ip-172-31-12-189:~$ disown -h
소유권을 포기하게 되면 스케줄러가 주피터 노트북 프로세스가 호스트의 것이 아닌 걸로 알고 프로세스를 죽이지 않는다.

주피터 https 설정해주기

주피터는 ssh로 접근하지 않아서 https를 설정해주는 것이 필요하다

ubuntu@ip-172-31-12-189:~/.jupyter$ sudo apt install net-tools
ubuntu@ip-172-31-12-189:~/.jupyter$ netstat -nap | grep 8888
tcp 0 0 172.31.12.189:8888 0.0.0.0:* LISTEN 8485/python3
ubuntu@ip-172-31-12-189:~/.jupyter$ sudo kill -9 8485

사설 인증서 만들고 적용

ubuntu@ip-172-31-12-189:~/.jupyter$ cd ~
ubuntu@ip-172-31-12-189:~$ pwd
/home/ubuntu
ubuntu@ip-172-31-12-189:~$ mkdir ssl
ubuntu@ip-172-31-12-189:~$ cd ssl
ubuntu@ip-172-31-12-189:~/ssl$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout "cert.key" -out "cert.pem" -batch
Generating a RSA private key
..............+++++
.+++++
writing new private key to 'cert.key'

rsa:1024로 만들었었는데...
길이가 너무 짧다고 해서 rsa:2048로 만들어 봤다

공개키 기반
rsa알고리즘 활용

  • 개인키 cert.key 외부에 노출되면 안됨
  • 공개키 cert.pem

환경설정 파일에 아래 내용 추가하기
ubuntu@ip-172-31-12-189:~$ sudo vi /home/ubuntu/.jupyter/jupyter_notebook_config.py
c.NotebookApp.certfile = u'/home/ubuntu/ssl/cert.pem'
c.NotebookApp.keyfile = u'/home/ubuntu/ssl/cert.key'

  • ssh를 적용한 퍼플릭주소로 접근
    https://13.125.214.81:8888/

ctrl+Z: 서버 종료
netstat -nap | grep 8888
sudo kill -9 프로세스아이디

주피터로 서버 재실행
sudo jupyter-notebook --allow-root

http에 's'를 붙이고 접근 성공! 터미널로 이동!
https://13.125.214.81:8888/terminals/1

주피터를 시스템 서비스로 등록하기

주피터가 자동실행되지 않고
명령어를 통해 실행시키고 있다.

  • 주피터 위치 확인
    ubuntu@ip-172-31-12-189:~/.jupyter$ which jupyter-notebook
    /usr/local/bin/jupyter-notebook

  • 서비스파일 작성
    ubuntu@ip-172-31-12-189:~/.jupyter$ 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
  • sudo명령어로 jupyter-notebook을 설정했던 config파일을 루트 권한으로 실행시킨다
    ubuntu@ip-172-31-12-189:~/.jupyter$ sudo systemctl daemon-reload
    ubuntu@ip-172-31-12-189:~/.jupyter$ sudo systemctl enable jupyter
    Created symlink /etc/systemd/system/multi-user.target.wants/jupyter.service → /etc/systemd/system/jupyter.service.
    ubuntu@ip-172-31-12-189:~/.jupyter$ sudo systemctl start jupyter
    ubuntu@ip-172-31-12-189:~/.jupyter$ sudo systemctl status jupyter

● jupyter.service - Jupyter Notebook Server
Loaded: loaded (/etc/systemd/system/jupyter.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2021-03-18 05:21:01 UTC; 8s ago
Main PID: 25597 (sudo)
Tasks: 2 (limit: 1160)
Memory: 43.4M
CGroup: /system.slice/jupyter.service
├─25597 /usr/bin/sudo /usr/local/bin/jupyter-notebook --allow-root --config=/home/ubuntu/.jupyter/jupyter_notebook_conf>
└─25598 /usr/bin/python3 /usr/local/bin/jupyter-notebook --allow-root --config=/home/ubuntu/.jupyter/jupyter_notebook_c>

Mar 18 05:21:01 ip-172-31-12-189 systemd[1]: Started Jupyter Notebook Server.
Mar 18 05:21:01 ip-172-31-12-189 sudo[25597]: ubuntu : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/usr/local/bin/jupyter-notebook ->
Mar 18 05:21:01 ip-172-31-12-189 sudo[25597]: pam_unix(sudo:session): session opened for user root by (uid=0)
Mar 18 05:21:01 ip-172-31-12-189 sudo[25598]: [I 05:21:01.965 NotebookApp] Serving notebooks from local directory: /
Mar 18 05:21:01 ip-172-31-12-189 sudo[25598]: [I 05:21:01.966 NotebookApp] Jupyter Notebook 6.2.0 is running at:
Mar 18 05:21:01 ip-172-31-12-189 sudo[25598]: [I 05:21:01.966 NotebookApp] https://172.31.12.189:8888/
Mar 18 05:21:01 ip-172-31-12-189 sudo[25598]: [I 05:21:01.967 NotebookApp] Use Control-C to stop this server and shut down all kerne

  • q를 누르고 재시작 가능
    ubuntu@ip-172-31-12-189:~/.jupyter$ sudo systemctl restart jupyter
profile
인생노잼

0개의 댓글