#29 AWS

#29 AWS

이제 pybo가 간단하지만 어느정도의 기능을 갖춘 웹페이지가 되었으니 다른 사용자들도 ip만 알고있다면 접속

가능하도록 서버를 구축해야한다. 직접 서버를 구축하는 방법도 있지만 개인용 pc로는 성능에도 한계가있고 방법도

쉽지 않기 때문에 여기서는 AWS(Amazone Web Services) 의 라이트세일 서비스를 사용하여 보다 쉽고 저렴하게

pybo를 배포해본다.

1. AWS 가입

먼저 AWS 공식 홈페이지에서 계정을 만들어야한다.

홈페이지에서 계정 생성을 누르면 위와 같은 화면을 볼 수 있다. 이메일 주소와 암호, 계정이름을 입력하고 진행한다.

사용 타입은 개인으로, 전체이름에는 서버의 이름을, 전화번호에는 국가번호와 휴대폰번호를 입력한다. 주소는 한국을

기준으로 국가는 대한민국, 첫 번째 칸에는 건물의 주소를, 두 번째 칸에는 동/층/호수 를 입력하고 시에는 ㅇㅇ구,

ㅇㅇ군, ㅇㅇ시 등의 정보를, 시, 도 또는 리전에는 대한민국을 입력해주면 된다. juso.go.kr 등의 사이트에서 주소를

검색한 뒤 영문보기를 하면 쉽게 입력할 수 있다. 우편번호까지 입력하고 다음으로 진행한다.

결제정보를 입력하는 화면이 나온다. 2021년 10월기준 결제정보 확인을 위해 100원이 빠져나가는데 짧은시간내에

다시 입금되기 때문에 걱정할 필요는 없다.

이후부터는 카드와 전화번호의 인증절차만 거치면 AWS 코드가 발송되고 이를 입력하면 성공적으로 계정이 생성된다.

지원 플랜을 선택하라고 하는 창이 뜨면 무료인 기본 플랜을 선택하면 된다. 이후 콘솔에 로그인 버튼을 클릭하여

생성한 계정으로 로그인해준다.

2. AWS 라이트세일 인스턴스 생성3

로그인을 마치고 AWS 라이트세일 공식 홈페이지에 접속하면 위와 같은 화면이 뜬다. 필자의 경우 이미 인스턴스를

만들어두었기 때문에 Ubuntu-1 이라는 인스턴스가 존재하지만 처음 가입한 상태에서는 바로 인스턴스 생성 화면이

보일 것이다.

플랫폼으로는 Linux/Unix 환경과 Windows 환경을 모두 지원한다. 여기서는 Linus 환경을 사용하기로 한다.

blueprint는 앱과 OS를 결합시킨 버전도 있고 OS만을 지원하는 버전도 있는데, 우린 이미 앱으로 django 를

사용하고있으니 OS Only 에서 개인프로젝트에 사용하기에 가장 무난한 Linux 환경인 우분투를 선택한다.

마지막으로 인스턴스 플랜으로 첫 3달간 무료지원을 해주는 플랜을 선택한다. 5달러, 10달러 플랜도 3달 무료를

지원하지만 여기서는 3.5달러의 가장 저렴한 플랜을 선택하기로 한다.

인스턴스를 생성하고나면 Running 이라고 표시된 위치에 Pending 또는 대기 중이라는 메시지가 떠있을 것이다.

조금 기다리면 Running 또는 실행 중이라는 메시지로 바뀌면서 서버가 실행된다.

3. 서버시간 설정

AWS 콘솔에 로그인한 후 AWS 라이트세일 홈페이지에 접속해서 위의 동그라미친 셸 아이콘을 클릭하자.

그러면 우분투의 터미널과 같은 창이 열린다. 여기서 우리가 생성한 서버를 조작할 수 있다.

처음 서버의 시간은 UTC 기준으로 맞춰져있다. 한국 시간에 맞게 조정하려면 다음 명령어를 실행하자.

sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

Asia/Seoul 타임존의 심볼릭 링크를 생성하여 /etc/localtime 을 덮어씌우는 리눅스 명령어이다. 실행하고나서 다시

date 명령어를 실행하면 이제 정상적으로 한국시간이 표시되는 것을 확인할 수 있다.

4. 파이썬 설치 확인

장고를 사용하기 위해서는 파이썬이 필요하다. 서버에 파이썬이 설치되어있는지 확인하자.

셸에서 python 을 실행하면 찾을 수 없다는 메시지가 나오지만 python3 을 찾아보라는 메시지가 떠서 python3 을

입력해보니 정상적으로 설치가 되어있는 것을 확인할 수 있다. 설치된 것을 확인했으면 exit() 로 파이썬 셸을 종료한다.

5. 가상환경 설치

처음 프로젝트를 시작했을 때 처럼 가상환경을 구성해보자. 먼저 다음 명령어를 호출하여 우분투의 패키지들을

최신버전으로 업데이트하자.

sudo apt update

가상환경의 설치를 위해 python3-venv 패키지를 설치하자.

sudo apt install python3-venv

필자의 경우 이미 설치가 끝나있기 때문에 변경사항이 없다. 중간에 선택화면이 나타나면 y(yes) 를 선택해주면 된다.

홈 디렉토리(~) 에 파이보가 위치할 projects 디렉토리와 가상환경을 생성할 venvs 디렉토리를 생성한다.

mkdir projects mkdir venvs

정상적으로 두 디렉토리가 만들어진 것을 볼 수 있다.

프로젝트 초반에 했던 것 처럼 다음 명령어들을 실행하여 venvs 디렉토리로 이동한 뒤 가상환경을 생성한다.

cd venvs python3 -m venv mysite

다음 명령어들을 수행하여 mysite/bin 으로 이동한 뒤 activate 를 실행해준다.

cd mysite/bin . activate

어디서든 가상환경을 벗어나려면 deactivate 를 실행해주면 된다. 이후의 작업은 가상환경 내에서 이뤄진다.

6. wheel 패키지, django, markdow 패키지 설치

로컬 환경에서는 문제가 없었지만 서버 환경에서는 pip 로 파이보 관련 패키지들을 설치할 때 wheel 패키지 관련

오류가 발생할 수 있다고 한다. 다음 명령어들을 실행하여 먼저 wheel 패키지를 설치한 뒤 django 와 markdown

패키지를 설치해준다.

pip install wheel pip install django==<버전> pip install markdown

django 의 경우 ==으로 버전을 명시하여 설치한다. 필자의 경우 로컬에서 사용했던 버전인 3.2.6 버전을 쓰기 위해

pip install django==3.2.6 과 같이 실행하였다.

7. Pybo 설치

이제 드디어 우리가 만들었던 Pybo를 설치할 차례이다. 지금까지 작업한 파이보 프로젝트의 파일들은

git 원격 저장소에 push 한 뒤 서버에서 clone 하는 것으로 손쉽게 가져올 수 있다.

cd ~/projects git clone "https://github.com/<유저명>/<레포지토리명>.git <프로젝트이름>

위와 같이 push 해둔 pybo 프로젝트의 레포지토리에서 code 버튼을 클릭, url을 확인한 뒤 projects 디렉토리에서

git clone 명령어를 수행해주면 레포지토리에 저장된 프로젝트를 그대로 가져온다.

원격저장소에 올려둔 파일들이 모두 서버에 복사되었다.

8. 데이터베이스 생성

하지만 아직 서버를 정상적으로 구동할 수는 없는 상태이다. 우리가 간이 db로 사용했던 db.sqlite3 는 당연하게도

원격저장소에 포함되어있지 않기 때문에 먼저 마이그레이션을 실행해줘야 한다.

python manage.py makemigrations python manage.py migrate

pybo/migrations 디렉토리에 makemigration 으로 만들어진 파일들이 모두 들어있다면 makemigrations 는 수행할 필요

없이 migrate 명령어만을 수행해도 마이그레이션이 완료되고 db.sqlite3 이 생성된 것을 확인할 수 있을 것이다.

데이터베이스 외에도 서버의 SECRET_KEY 값을 분리해둔 파일과 같은 원격저장소에 공유해선 안되는 종류의 파일들

또한 서버에는 존재하지 않는 상태이다. 이들 또한 서버에 전송하여 서버가 정상적으로 구동할 수 있는 환경을 조성하자.

9. 고정 IP 생성

이제 pybo 서버는 구동 가능한 상태가 되었지만 다른 사용자들이 접속하기 위해서는 고정 ip를 발행해야한다.

AWS 라이트세일 홈페이지에 접속해서 네트워킹 탭으로 들어가면 Create static IP 로 고정 IP를 생성할 수 있다.

인스턴스 선택 창에서 우리가 만들었던 인스턴스를 선택해주고 생성 버튼만 눌러주면 간단히 만들어진다.

만들어진 고정 IP에 들어가면 IP 주소를 확인할 수 있다. 이제 이 IP를 통해 서버에 접속할 수 있다.

10. 방화벽 설정

pybo 서버의 포트번호는 8000 번이기 때문에 방화벽 규칙을 설정하여 8000번 포트를 개방해야한다.

AWS 라이트세일에서 만들어둔 인스턴스에 들어가 네트워킹 탭을 보면 위와 같이 방화벽 규칙을 추가할 수 있다.

포트번호에 8000 을 입력하고 생성하자.

이제 장고 서버를 8000 포트를 개방하도록 실행하면 외부사용자도 접속이 가능하다.

11. ALLOWED_HOSTS 추가

그런데 서버를 실행하고 브라우저에서 고정 ip로 접속하면 DisallowedHosts 에러가 발생할 것이다. 이는 해당 웹서버를

구동할 수 있는 호스트로 현재 ip를 등록해두지 않았기 때문에 생기는 문제이다.

로컬 프로젝트에서 config/settings.py 를 위와 같이 수정한 뒤 commit 하고 원격 저장소에 push 한다.

ALLOWED_HOSTS 리스트에 발급받은 서버의 고정 ip를 문자열 형태로 넣어주면 된다.

그리고 다시 서버쪽에서 git pull 명령을 실행하여 원격저장소의 변경사항을 서버에 반영해준다. 필자의 경우 이미

업데이트가 진행되어있기 때문에 변경사항이 없지만 변경사항이 있을 경우 정상적으로 반영해줄 것이다.

12. 서버 구동

다시한번 8000 포트를 개방하여 서버를 구동한다.

이제 정말로 고정 ip만 알고있다면 다른 사용자도 pybo에 접속할 수 있게 되었다.

13. AWS 라이트세일 사용종료

2021년 10월 기준으로 AWS 라이트세일의 인스턴스중 3.5달러, 5달러, 10달러 플랜은 첫 3개월간 무료지원을 해준다.

이 기간이 지나고도 의도하지 않은 요금이 발생하지 않도록 사용을 중지하려면 인스턴스와 고정 IP를 삭제해야한다.

인스턴스의 경우 AWS 라이트세일 홈페이지에서 인스턴스 메뉴에서 삭제를 클릭하면 삭제 가능하다.

고정 IP의 경우 네트워킹 탭에서 마찬가지의 방법으로 삭제할 수 있다.

from http://scala0114.tistory.com/117 by ccl(A) rewrite - 2021-10-14 14:01:16