[AWS] AWS Backend Deployment

김상웅·2022년 7월 10일
0

[Infra]

목록 보기
1/3

✅ AWS 배포하기


이번 포스팅에서는 개발한 백엔드 서버를 AWS를 통해 배포하는 방법에 대해 알아보겠습니다.

부트캠프 팀 프로젝트를 하면서 개발한 서버는 배포를 완료한 상태입니다.

다만,,, 저처럼 아무 생각 없이 이것저것 누르다가 과금이 되는 분들이 없길 바라는 마음에 처음부터 차근차근 살펴보겠습니다.



📌 회원가입 및 Region 확인하기


보통 구글 아이디로 회원가입을 진행하게 될텐데요.

회원가입 단계 중 카드를 등록하는 단계가 있습니다.

바로 결제가 되는 것이 아니라 결제가 가능한 카드를 확인하는 절차이므로 과감하게 등록해줍니다.

로그인이 완로되면 서비스를 이용하기 전에 Region을 확인해줍니다.

아래 사진처럼 우측 상단에서 서울을 선택해주면 됩니다.


### 📌 parameter group 생성 ---

DB생성 이전에 파라미터 그룹을 생성해줍니다.

좌측 nav바에서 파라미터 그룹으로 이동하여 파라미터 그룹을 생성해주세요.

다음 파라미터를 설정해줍니다.

  • chracter_set_client: utf8mb4로 변경

  • chracter_set_connection: utf8mb4로 변경

  • chracter_set_database: utf8mb4로 변경

  • chracter_set_results: utf8mb4로 변경

  • chracter_set_server: utf8mb4로 변경

  • collation_connection: utf8mb4_general_ci로 변경

  • collation_server: utf8mb4_unicode_ci로 변경

수정 사항이 저장되었으면 이제 데이터베이스를 생성하러 가봅시다.


✅ RDS 만들기


RBS 대시보드를 클릭하면 다음과 같이 데이터베이스를 생성할 수 있는 란이 보이는데요

과감하게 눌러주세요


사용할 데이터베이스의 엔진을 선택하고,

⭐⭐⭐ 반드시 템플릿은 프리 티어 선택!!!! ⭐⭐⭐

아래로 쭉쭉 작성해주세요

만약 새로 생성하는 DB라면 VPC 보안 그룹을 새로 생성해줍니다.

또 우리는 외부에 우리의 서버를 배포해야 하므로 퍼블릭 액세스허용하고

DB 인증 옵션은 위에서 설정한 암호로 인증하도록 암호 인증을 선택합니다.

추가 구성에서 DB 파라미터 그룹을 설정할 수 있습니다.

첫번째 단계에서 생성한 파라미터 그룹을 선택해주면 됩니다.

이러면 DB 생성 완료!


VPC 보안 그룹 편집


생성된 DB는 대시보드의 DB 인스턴스에서 확인할 수 있습니다.

클릭하면,

DB 인스턴스의 정보를 확인해보면

엔드포인트가 my_settings.pyHOST에 해당하는 부분입니다.
포트번호는 my_settings.pyPORT에 해당하는 부분입니다.

우선 위 화면에서 가장 우측의 VPC 보안 그룹으로 이동해주세요

이어서 나오는 화면 하단부의 인바운드 규칙을 수정해주어야 합니다.

다음과 같이 수정해주세요.

사용자 지정 TCP는 사용하려는 포트 번호를 추가해주면 됩니다.

원래는 데이터베이스를 어디서든 접속 가능하게 열어놓으면 안됩니다!!!!!!!


📌 데이터베이스/테이블 생성하기


  1. 기존 DB의 데이터를 담고 있는 Dump 파일을 생성해줍니다.
    (명령어를 입력할 때 위치해있는 경로를 확인해주세요!)
mysqldump -u root -p 기존DB이름 > 생성할sql파일이름.sql
  1. AWS MySQL DB에 접속하여줍니다.
mysql -h DB엔드포인트 -u root -p
  1. DB를 생성해줍니다.
    만약 RDS 생성할 때 초기 데이터베이스 이름을 선택하였으면 만들 필요가 없습니다.
create database DB이름 character set utf8mb4 collate ut8mb4_general_ci

생성 후

exit
  1. Dump 파일을 새로 생성한 AWS DB에 옮겨줍니다.
mysql -h DB엔드포인트 -u root -p DB이름 < 1번에서_생성한_파일이름.spl


✅ EC2 서버 생성하기


이제 DB에 연동해야하는 가상환경인 EC2를 생성해보겠습니다.

마찬가지로 좌측 상단의 검색창에 EC2를 검색해주세요.

📌 키페어 생성


EC2 좌측 nav바의 키페어를 클릭하고 키페어 생성을 눌러줍니다.

.pem 형식의 파일을 눌러주고 키페어를 생성한 다음,

home directory로 옮겨줍니다.

저는 wsl2를 사용하고 있기 때문에 경로는 home/.../ 디렉토리의 하위 폴더로 옮겼습니다.

📌 인스턴스 시작


EC2 좌측 nav바의 인스턴스를 클릭하고 인스턴스 시작을 눌러줍니다.

다음과 같은 화면이 나올텐데요.

⭐⭐⭐인스턴스 유형도 프리티어로 사용 가능한 것인지 확인해주세요!!⭐⭐⭐

위에서 만든 키페어를 설정해줍니다.

나머지는 기본값으로 설정해줍니다.

우리는 기존에 생성한 보안 그룹이 있으므로 기존 보안 그룹을 선택해줍니다.

나머지는 역시 기본값으로 설정해줍니다.

이후 우측에 인스턴스 시작을 누르면 EC2를 비로소 시작할 수 있습니다.



✅ 배포단계


이제 진짜 배포 단계입니다.

하나씩 차근차근 명령어를 입력하고 오타를 내지 않는다면 서버 배포에 성공할 것 같습니다.

1. EC2 서버 접속

다음 명령어를 통해 EC2 서버에 접속해줍니다.
최초 ssh 명령어를 실행하면 키페어를 저장하는 문구가 나오는데 저장해주면 됩니다.
.pem 경로 이동 후 실행

ssh -i (.pem) ubuntu@(EC2서버 퍼블릭IPv4주소)

2. 소프트웨어 설치

Miniconda3 설치하기
1. Miniconda3 페이지로 이동합니다.
2. Linux Insataller에서 파이썬 버전 확인하여 다운로드 받을 파일 이름 우클릭하여 링크 주소 복사를 클릭합니다.

터미널에서 다음 명령어를 실행합니다.

wget 복사한_링크_주소_입력

중간에 Enter와 yes를 입력하면 됩니다.

설치가 완료되면 다음 명령어를 차례대로 입력해주세요

chmod +x 설치완료된_Miniconda파일(Mi 까지 입력하고 tab)

./설치완료된_Miniconda파일(Mi 까지 입력하고 tab)

source .bashrc

3. 패키지 설치


다음 명령어를 통해 패키지를 업그레이드 해줍니다.
1)

sudo apt-get update

2)

sudo apt-get upgrade

GCC 컴파일러를 설치합니다.

sudo apt-get insatll gcc

mysqlclient를 설치합니다.

sudo apt-get install libmysqlclient-dev

4. Miniconda3 가상환경 만들기


가상환경을 생성해줍니다.

conda create -n 가상환경이름 python=사용하려는_버전

가상환경 활성화 / 비활성화

conda activate 가상환경이름 / conda deactivate

5. 프로젝트 불러오기 (Git clone)


프로젝트 디렉토리를 클론하여 다운로드합니다.

git clone 깃허브_주소

프로젝트에서 사용한 모듈과 패키지를 다운로드해줍니다.

pip install -r requiremenst.txt

6. 파일 수정


  1. settings.py 수정
ALLOWED_HOST = ["*", "퍼블릭IP주소", "퍼블릭IP주소:8000"]
  1. my_settings.py 생성 후 환경변수 설정
DATABASES = {
	defaults = {
    	...
        ...
        ...
        "HOST" : AWS_DB_엔드포인트_작성
        ...
    }
}

6. 서버 정상 작동 확인


서버를 열어 작동이 잘되는지 확인해줍니다.

python manage.py runserver 0:8000

프론트엔드 결과물(웹)이 없다면, 포스트맨으로 통신을 해보세요!



✅ 백그라운드 서버 실행


매번 터미널을 통해 서버를 껐다 켰다 할 수는 없습니다.

다른 작업을 해야할 때도 있을 것입니다.

gunicorn을 사용해보겠습니다.

우선 gunicorn을 설치해줍니다

pip install gunicorn

서버를 실행하는 명령어입니다.

nohup gunicorn --bind=0.0.0.0:8000 프로젝트이름.wsgi &

PID를 확인하는 명령어입니다.

ps -ef | grep (python 또는 프로젝트이름)

서버를 종료하는 명령어입니다.
위에서 확인한 PID를 입력해줍니다.

kill 서버_PID
profile
누구나 이해할 수 있도록

0개의 댓글