AWS EC2 / RDS 배포

JunePyo Suh·2020년 6월 7일
0

AWS

나중에 서버 만들고 다시 지울때는 EC2 의 경우에 볼륨 (가상의 하드디스크라고 생각하면 됨) 도 삭제해줘야합니다. 안그러면 돈이 계속 빠져나갑니다.

EC2 생성

  1. Amazon Machine Image 선택: os 쇼핑이라고 생각하면됨, 내가 선택할 하드에 어떤 os 를 설치할건지
  2. 인스턴스 갯수: 이런 스펙의 서버를 몇개만들건지
  3. 네트워크:
  4. 서브넷: 네트워크를 받는다는건 몇만개의 아이피주소를 수용할수있을정도의 레인지를 받음: 몇번부터 몇번까지로 그 네트워크를 나누는게 서브넷임
    1. A, b, c, 로 나눠서 하나가 다운되도 계속 유지될수있게..
    2. 웹서버랑 디비서버는 다른곳에 보관해야함 (a 에는 웹서버, b 에는 데이터베이스, 관리자도 직접접근 못하게, 격리시켜야 보안이 철저해짐)
    3. 퍼블릭아이피: 전세계 어디서든 접근가능한 아이피 /.
    4. IAM: AWS 웹사이트에 따르면, "AWS IAM을 사용하면 AWS 리소스에 대한 개별 액세스 및 그룹 액세스를 안전하게 제어할 수 있습니다. 사용자 자격 증명(“IAM 사용자”)을 생성 및 관리하고, 이러한 IAM 사용자에게 리소스에 액세스할 수 있는 권한을 부여할 수 있습니다. 또한, AWS 외부의 사용자( 연동 사용자)에게 권한을 부여할 수도 있습니다."
    5. 종료방식: 서버를 중단하고싶을때 중지 = 컴퓨터를 끊다, 종료 = 서버 없엠 —> 항상 중지선택
    6. Cloud watch: 세부모니터링 기능, 서버의 세밀한 수치들을 제공해줌
    7. 사용자데이터: 서버가 실행될때 bash script 같은걸 써서 뭘 설치해줘야한다 등등 보여줌
  5. 스토리지추가:
    1. 범용ssd: 일반적인 ssd
    2. 프로비저닝된 iOPS 칩으로 되어있는 ssd (좀더좋음)
    3. 마그네틱: 걍 하드디스크
  6. 보안그룹구성
    1. 터미널에서 접속할경우 ssh 치면 됨 포트범위 22
    2. 프론트는 사용자지정TCP - 3000 -
    3. 노드사용시 http -80
    4. 백엔드는 사용자지정TCP -8000
  7. 실행 후 키를 다운로드에서 디렉토리로 옮김
  8. chmod -R 400 keyName_key.pem
  9. ll keyName.pem 했을때 -r—— 여야함
  10. ssh -I keyName_key.pem ubuntu@xx.xxx.xxx.xx (ec2 서버 아이피 주소) —> ubuntu 이 부분은 서버 생성할때 어떤 os 했냐에 따라 달라짐

RDS 생성

  1. Aurora mysql 은 아마존에서 개선된 mysql 버전임
  2. 파라미터 그룹 생성:
    character_set : utf8mb4
    collation : utf8mb4_general_ci / utf8mb4_unicode_ci
  3. databse 생성 --> mysql version 을 파라미터 그룹에 사용한 버젼과 동일한 걸로 선택
  4. 추가 옵션들: 삭제 방지 활성화, ap-northeast-2a, 3306, 암호인증, etc..
  5. 생성 완료 후 보안 그룹 수정: inbound 보안 그룹 규칙 클릭, 소스를 위치무관으로 바꾸면 어디에서나 접속할 수 있음
  • ec2 서버의 ip 주소를 rds settings.py 에 추가해 놓아야 ec2 서버가 rds 에 접속할 수 있음.

데이터 밀어넣기

Local 에 있는 데이터를 원격으로 뽑는 방법: mysqldump
Mysqldump -u root -p aboutteatime > aboutteatime.sql
그다음 밀어넣기
Mysqldump -h django.cdd1iexki9d.ap-northeast-2.rds.amazonaws.com -u root -p aboutteatime < aboutteatime.sql

Collation error 가 생길 경우

ERROR 1273 (HY000) at line 25: Unknown collation: 'utf8mb4_0900_ai_ci' 에러가 뜰 경우, .sql 파일로 이동한 후 COLLATE=utf8mb4_0900_ai_ci 로 되어있는 부분을 utf8_general_ci 로 변경해줘야함

EC2 초기세팅

  1. Linux miniconda installer python3.7 버젼을 다운로드함
    wget https://설치스크립트...
  2. chmod +x Miniconda3-latest-Linux-x86_64.sh
  3. miniconda 실행하여 설치
  4. source .bashrc 실행하여 로컬환경에서 처럼 base 세팅
  5. sudo apt-get update / sudo apt-get upgrade
  6. conda 로 가상환경 만들기
  7. git clone
  8. requirements.txt 에 작성되있는 모듈 설치 pip install -r requirements.txt
  9. ec2 접속
  10. Allowed_hosts = [*, ec2 서버 아이피주소, 주소:8000]
  11. my_settings.py 기존 로컬 환경에서 가져와서 작성해놓기
    • host 부분에 rds 주소 넣기: django.cdd1iexki9d.ap-northeast-2.rds.amazonaws.com

EC2 RDS 연동 gunicorn 배포

장고에서 쓰는 Manage rusnerver 명령어는 단일스레드로 작동하여 개발 및 테스트에는 적당하지만, request 가 많을수 있는 운영환경에서는 사용하기 적합하지 않으므로 멀티쓰레드를 지원하는 웹어플리케이션 서버 프로그램인 gunicon 을 설치하여 배포하는게 적당함

Gunicorn
1. 웹 어플리케이션 서버가 잇고, 여기서 장고 웹 어플리케이션을 실행해준다.
2. Pip install gunicorn
3. gunicorn 을 백그라운드로 동작시키기 위해서는 nohup 이라는 툴을 사용해야함.
1. Nohup gunicorn —bind=0.0.0.0:8000 aboutteatime.wsgi &. (&은 백그라운드로 동작하는 명령, Wigs 파일에 있는 정보를 적어주는데, 이는 장고의 웹 어플리케이션을 지정해주는 역할을 함)
2. Gunicorn —bind=0.0.0.0:8000 aboutteatime.wsgi (백그라운드로 안돌리고 그냥 돌리는 방법)
3. Ps -ef | grep
4. Kill [PID] 를 통해서 백그라운드에서 돌아가고 있는 서버를 꺼줄수 있다.

0개의 댓글