AWS Ec2-인스턴스로 runserver 하기

AWS란?

아마존 웹 서비스(영어: Amazon Web Services; AWS)는 아마존닷컴이 제공하는 각종 원격 컴퓨팅 서비스(웹 서비스)이다.

아마존 웹 서비스는 다른 웹 사이트나 클라이언트측 응용 프로그램에 대해 온라인 서비스를 제공하고 있다. 이러한 서비스의 상당수는 최종 사용자에 직접 공개되는 것이 아니고, 다른 개발자가 사용 가능한 기능을 제공하는 플랫폼을 제공하는 PaaS이다.

아마존 웹 서비스의 각종 서비스는 REST 프로토콜 및 SOAP 프로토콜을 통해 접근, 이용 및 관리가 가능하다. 비용은 실제 사용량에 따라 결정되며, 일부 서비스의 경우 미리 고정된 금액을 지불하는 형태도 있다.

1. Amazon 아이디 생성 및 로그인

aws1

  • 최초 계정 생성의 경우 해외결제가 가능한 카드를 등록해야 한다.(1달러 결제 진행)
  • 결제가 안되는 카드거나 잔액이 없는 경우 인스턴스 시작 불가

2. 우측 상단 나라 탭에서 서울 설정

aws2

  • 서울을 제외한 다른 국가로 설정하여 시작하는 경우 속도가 현저히 저하됨
  • 만약, 국가를 잘못 선택하여 시작했던 경우 인스턴스를 삭제 후 다시 구성해야 함

3. AWS 서비스 탭에서 ec2 검색 후 첫번째 EC2 선택

aws3

4. 인스턴스 시작

aws4

5. 유저 환경에 맞는 인스턴스 선택

aws5

  • 2018년 7월 현재는 Ubuntu 16.04 LTS SSD Volume Type을 선택하고 업데이트를 진행
  • 향후 18.04 버전이 업데이트되어 선택 가능하다면 해당 버전을 선택하는게 좋다.

6. 인스턴스 유형 선택

aws6

  • 표시한 2번째 유형을 선택 후 우측 하단 다음 버튼 선택

7. 보안 그룹 구성 탭 선택

aws7

  • 3~5단계는 Pass

7-1. 보안 그룹 구성 설정

aws8

  • 보안 그룹 이름과 설명 부분 수정
  • default값으로 launch-wizard라고 설정되어 있는데 추후 알아보기 어려우니 본인이 식별하기 쉽게 수정.
    • 나의 경우는 EC2 Security Group으로 설정

8. 키 페어 생성 및 다운로드

aws9

  • 기존 키 페어가 없는 경우 새 키 페어 생성 후 다운로드
    • 키 페어 이름은 본인이 원하는 것으로 작성
  • 인스턴스 시작

9. 인스턴스 이름 수정

aws10

  • 표시한 Name의 Default값이 비어있으니 원하는 이름으로 수정하면 됨.

10. pem파일 경로 지정

보안 상 중요한 파일이기 때문에 숨김폴더인 .ssh폴더로 이동시킨다.

mv ~/Downloads/fc-8th.pem ~/.ssh

11. ssh명령어 실행

ssh -i ~/.ssh/fc-8th.pem ubuntu@ec2-13-209-87-29.ap-northeast-2.compute.amazonaws.com
  • @ 뒤에 있는 부분은 아래 표시된 퍼블릭 DNS(IPv4) 값.
  • 개별적으로 할당되는 값이 다르기 때문에 아래 표시된 부분을 복사하여 @ 뒤에 붙여넣기 할 것.

aws11

  • 실행하면 터미널에서 아래와 같은 메시지가 나오게 되고 yes를 입력하여 접속 진행.
The authenticity of host 'ec2-13-124-186-240.ap-northeast-2.compute.amazonaws.com (13.124.186.240)' can't be established.
ECDSA key fingerprint is SHA256:F6G+EOXm92kZYD8V7XNIUeTaOatVfaqmM0pLhfnk0mw.
Are you sure you want to continue connecting (yes/no)?
  • 만약 진행 중 아래 와 같은 메시지가 나온다면
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0664 for '/home/che1/.ssh/EC2-Che1.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/home/che1/.ssh/EC2-Che1.pem": bad permissions
Permission denied (publickey).
  • 다음의 명령어로 pem 파일의 권한을 제한해준다.
    chmod 400 pem 파일명
    

    여기서 pem 파일명은

    1. 키 페어 생명성 및 다운로드 챕터에서 받은 pem 파일명으로 나의 경우엔 fc-8th.pem이 됨
  • l(엘) 명령어로 pem파일이 읽기만 가능한지 확인
    • -r-------- 1 ksw ksw 1.7K 7월 3 16:18 fc-8th.pem <- 이런식으로 되어 있어야 함.
  • 터미널 창이 제목이 아래처럼 변경되면 AWS서버에 접속이 된것임.

aws12


서버 환경 설정

1. Locale 설정

sudo vi /etc/default/locale
  • 다음을 추가한 뒤 서버에 재접속
LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_ALL=en_US.UTF-8

2. 기본 설정

  • 패키지 정보 업데이트
sudo apt-get update
  • 패키지 의존성 검사 및 업그레이드
sudo apt-get dist-upgrade
  • 간혹 보라색 배경의 Package configuration 화면으로 encoding타입 설정하라고 하면 UTF-8 선택.

2-1. 만약 접속이 안되는 경우

  • 인바운드 규칙보기 탭을 열어보고 포트: 22, 프로토콜: tcp 소스가 0.0.0.0인지를 확인

aws13

aws14

3. zsh 설치

sudo apt-get install zsh

4. oh-my-zsh 설치

sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

5. root유저로 전환

sudo su

6. ubuntu 유저의 shell을 변경

chsh ubuntu -s `which zsh`
  • whici zsh의 양쪽 끝은 따옴표가 아니라 키보드의 탭( Tab)키 바로 위에 있는 억음부호(`) 이다.

7. ~/.zshrc의 첫 번째 줄 주석 해제 (아래 부분)

export PATH=$HOME/bin:/usr/local/bin:$PATH

8.exit후 ssh재접속

ssh -i ~/.ssh/fc-8th.pem ubuntu@ec2-13-209-87-29.ap-northeast-2.compute.amazonaws.com

pipenv 환경 설정

1. pip설치 및 version다운

sudo apt-get install python-pip
sudo python -m pip install -U pip

2. pipenv 설치

sudo -H pip install -U pipenv

python환경 설정

1. pyenv 설치

curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash

2. vi ~/.zshrc에서 맨 아래에 추가

export PATH="/home/ubuntu/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

3. pyenv를 위한 requirements설치

sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev

참고 사이트

exit후 ssh재접속

ssh -i ~/.ssh/fc-8th.pem ubuntu@ec2-13-209-87-29.ap-northeast-2.compute.amazonaws.com

4. pyenv 3.6.5 설치

pyenv install 3.6.5
  • pyenv는 지속 업데이트 되므로 추후엔 3.6.5 이상을 사용할수 있음

Django 프로젝트 시작

1. deploy 폴더 생성 및 Django 기본 설정

~/projects/
	deploy/
		ec2-deploy/
			git init, gitignore
			pipenv install django
			pipenv shell / django-admin.py startproject config
			mv config app

2. ALLOWED_HOSTS 추가

# settings.py

ALLOWED_HOSTS = [
    'localhost',
    '127.0.0.1',
    '.amazonaws.com',
]
  • config폴더의 settings.py파일로 들어가 위와 같이 추가하여 접속을 허용해준다.

3. scp를 사용하여 서버에 업로드하기

scp -i ~/.ssh/fc-8th.pem \
-r ~/projects/deploy/ec2-deploy \
ubuntu@ec2-13-209-87-29.ap-northeast-2.compute.amazonaws.com:/home/ubuntu/project

위의 명령어를 구분하면 아래와 같다.

scp -i 키페어경로 -r 보낼폴더경로 유저명@퍼블릭DNS:받을폴더경로

보안 그룹에 포트 추가하기

1. 해당 보안그룹 편집

aws15

2. 규칙추가

aws16

  • 포트범위는 8000으로 소스는 위치 무관

3. runserver 실행

./manage.py runserver 0:8000

4. 브라우저 에서 runserver 실행확인

ec2-13-209-87-29.ap-northeast-2.compute.amazonaws.com:8000

aws17

Reference

Che1’s Blog

유가희 님 블로그

Comments