오늘도 개발

[AWS] AWS에서 EC2, RDS 생성해서 배포하기 본문

웹 프로그래밍/웹의 이해

[AWS] AWS에서 EC2, RDS 생성해서 배포하기

Sueeeeeee 2022. 7. 28. 13:56

EC2는 AWS에서 제공하는 서버 컴퓨터, RDS는 데이터베이스이다. 

AWS에서 EC2와 RDS를 사용하여 배포할 때 흐름은 다음과 같다.

 

1. EC2 생성(외부 요청 받을 수 있게 설정)

2. RDS 생성 

   1) 기존 데이터베이스를 sql 파일로 dump

   2) sql 파일을 RDS에 dump 

3. EC2 터미널에서 배포

   1) 가상환경 설치

   2) git clone

   3) 필요한 패키지 모두 설치(requirements.txt, bcrypt, jwt, pyjwt)

   3) settings.py의 ALLOWED_HOSTS에 EC2의 퍼블릭 IP 주소 입력

   4) my_settings.py 생성 후 내용 추가(데이터베이스는 RDS 정보로 입력)

   5) gunicorn 설치

   6) nohup으로 서버 켜기 => 백그라운드에서 실행

 

EC2 생성하기

* 한국 지역인지 확인하기

1. AWS 가입 후 ec2 생성(외부 접속 허용하도록 설정)

2. ssh 키 다운로드(ex. loctea.pem)

3. terminal에서 다운받은 ssh파일 권한 바꿔주기

chmod 400 loctea.pem

4. ssh 키 사용해서 EC2 접속 요청

ssh -i loctea.pem ubuntu@EC2의 퍼블릭 IP v4 주소

5. 메시지 뜨면 yes 입력

This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])?

6. EC2에 접속됨

RDS 설정하기

1. 파라미터 그룹 생성

2. 생성된 파라미터 그룹으로 들어가서 기본 세팅하기(파라미터 이름 클릭 -> 파라미터 편집 클릭)

 1) character_set 검색

   - 모든 값으로 utf8mb4 선택(한글, 이모지도 db에 저장할 수 있도록 함)

  2) collation 검색

    - collation_connection : utf8mb4_general_ci

    - collation_server : utf8mb4_unicode_ci

RDS 생성하기

RDS 최초 생성

(한 번 RDS 생성했으면 다음 프로젝트에서 또 생성할 필요 없음)

1. 데이터베이스 생성 클릭

2. 엔진으로 MySQL 선택

3. 프리 티어 선택

4. DB 인스턴스 식별자, 마스터 사용자 이름(root), 비밀번호 입력 

5. VPC 보안 그룹 '새로 생성' 선택, 새 VPC 보안 그룹 이름 입력(wecode_rules), 가용 영역 선택(us-west-2a)

6. 자동 백업 활성화 취소 언체크

7. 데이터베이스 생성 

 

계정 정보와 비밀번호만 알면 어느 컴퓨터에서든 해당 RDS 접속할 수 있게 설정하기

(접속할 때마다 ip 입력할 필요 없어서 간편하지만 덜 안전하므로 일반 프로젝트에서는 권장 x)

1. 데이터베이스 생성 완료되면 클릭해서 들어가기

2. VPC 보안 그룹 클릭해서 들어가기

3. 인바운드 규칙 클릭 => 인바운드 규칙 편집 클릭

4. 소스 유형 위치 무관(Anywhere-IPv4) 선택

5. 규칙 저장

 

생성한 RDS 들어가보기

1. 데이터베이스 클릭해서 엔드포인트 복사

2. 로컬 터미널에서 RDS 접속하기

mysql -h <rds 엔드포인트> -u root -p

 

로컬 데이터베이스의 데이터 RDS에 넣기

1. 로컬 터미널에서 다음 입력 : loctea.sql 파일 생성됨

mysqldump -u root -p loctea > loctea.sql

2. RDS 접속해서 데이터베이스 loctea 생성 

mysql -h <rds 엔드포인트> -u root -p

3. 로컬 터미널에서 다음 입력

mysql -h <rds 엔드포인트> -u root -p <데이터베이스명> < loctea.sql

mysql -h 엔드포인트 -u root -p loctea < loctea.sql

 

EC2에서 runserver 해보기

1. EC2 서버 접속

ssh -i loctea.pem ubuntu@EC2의 퍼블릭 IP v4 주소

2. EC2 환경설정

1) 미니콘다 설치

- miniconda 홈페이지에서 Linux installers python 3.9 주소 복사

- EC2 터미널에서 설치

wget https://repo.anaconda.com/miniconda/Miniconda3-py39_4.12.0-Linux-x86_64.sh

- 설치파일 실행권한 변경

chmod +x Miniconda3-py39_4.12.0-Linux-x86_64.sh

- 미니콘다 설치 실행

./Miniconda3-py39_4.12.0-Linux-x86_64.sh

- 미니콘다 설정

source .bashrc
sudo apt-get update
sudo apt-get upgrade

2) GCC 설치 (GCC를 설치해야mysql 연동 시 오류나지 않음)

sudo apt-get install gcc

3) mysql 클라이언트 설치

sudo apt-get install libmysqlclient-dev

3. EC2 서버에 git 설정

1) git clone

git clone <리모트 저장소 주소>

2) 클론된 폴더로 이동

3) requirements.txt 열어보기

cat requirements.txt

4) requirements의 패키지 한 번에 설치하기(bcrypt, jwt, pyjwt 포함)

pip install -r requirements.txt

5) settings.py에 EC2 퍼블릭 ip 주소 넣기 

ALLOWED_HOSTS = ['*', 'EC2의 퍼블릭 ip 주소', 'EC2의 퍼블릭 ip 주소:8000']

6) my_settings.py 생성 후 정보 넣기 : 데이터베이스 host에 RDS 엔드포인트 입력

7) runserver 실행 (다음으로 실행하면 EC2의 퍼블릭 IP로 요청을 받을 수 있음)

python manage.py runserver 0:8000

8) 포스트맨에서 테스트해보기 : 작동하면 성공!

 

django server는 요청이 많은 경우 처리를 잘 못하기 때문에 실제 서비스를 배포할 때는 추천하지 않음.

실제 배포할 때는 멀티 쓰레드를 지원하는 gunicorn 사용을 추천.

 

Gunicorn 사용하기

Gunicorn

웹 애플리케이션 서버 프로그램.

1) EC2에 Gunicorn 설치

pip install gunicorn

2) 서버 켜기

# 백그라운드가 아니라 그냥 돌릴 때 
gunicorn --bind=0.0.0.0:8000 loctea.wsgi
# 백그라운드로 돌릴 때
gunicorn --bind=0.0.0.0:8000 --daemon nhouse.wsgi
# 리눅스에서 제공하는 데몬 nohup 사용도 가능
# ssh 세션이 끊어져도 서버는 끄지 않는 명령
# &는 백그라운드에서 서버를 항상 켜달라는 뜻

nohup gunicorn --bind=0.0.0.0:8000 loctea.wsgi &

3) 잘 실행되는지 확인해보기

ps -ef | grep python

4) 서버 종료하기

kill [PID]