djnago 프로젝트 서빙 + aws특강

김하진·2022년 6월 10일
0

오늘은 타임어택구현테스트 + django 프로젝트 + aws 특강까지 정신없이 하루가 지나간것 같다

오늘은 프로젝트 진도는 많이 나가지 못한거 같다

배포란 무엇인가?

the action of bringin resources into effective action

효과적인 운용을 위해 자원을 가져다 놓는 행위이다.

효과적인 운용은

  • 사용자들이 웹브라우저를 통해 특정 서비스에 접속시 원하는 결과를 순조롭게 얻는것

자원을 가져다 놓는다

  • 사용자들의 호출에 대응하는 어플리케이션을 서버에 이관해 놓는것
  1. 어플리케이션을 서비에 올리고
  2. 어플리케이션 응답을 사용자 요청에 맞춰 잘 전달할 수 있게 흐름을 구성하는 행위

on-premise, Cloud

배포의 첫번째행위는 어플리케이션을 바로 서버에 옮기는것
그렇다면 서버는

  • 우리가 쓰고있는 '컴퓨터' 가 서버이다.

  • 클라우드와 대치되는 개념으로 기업이 서버를 자체 설비로 보유하고 운영하는 겄을 '온프레미스' 라고 한다

Cloud
클라우는, 클라우드 컴퓨팅의 줄임말이다

AWS, Azure, GCP, KT, Naver 같은 회사에서 서버를 제공받아서 운영한다.

차이점은

  1. 자체로 서버로 운영
    (비용과 인력, 물리적인 요소들이 많이 소모됨)
  2. 서비스 런칭시의 사용자
  • 보안과, 사용자, 그리고여러가지 상황에 맞게 서버를 증설하거나, 자체스펙을 업그레이드 하거나 유연하게 움직인다.

AWS EC2

  1. 프리티어 1년 무료
  2. 온리인상 가장 많은 referrence !
  • Elastic compute Cloud(C가 2개라 EC2)

즉 AWS가 구축해놓은 IDC 서버용 컴퓨터의 자원을 원격으로 사용할 수 있게 해주는 서비스. -> AWS 로부터 한대으 컴퓨터를 임대한다.

  1. 인스턴스(AWS 가상서버를 지칭)

  2. 운영체제(os)선택
    ex) ubuntu
    ubuntu 는18.04, 20.04 등 LTS 버전을 선택하는 것이 안정성에 좋다.

  3. Spec 설정

해당 컴퓨터의 스텍, t2.nono,micro,small 등등
프리티어는 micro 정도 사용 가능!
micro 는 웹어플레이케이션 간단하게 하나정도 서빙할 수 있는 정도 스펙

  1. 키페어 생성

보안 요소중 하나.
키를 생성을 해서 보안을 해야한다.
.PEM or .PPK
선택 하는 os 나 사용하는 컴퓨터 환경에 따라 달라질 수 있다.
보통은 .PEM 으로 많이 사용한다.

  1. 용량 구성
    기본으로 6gb 인데 30까지 올릴 수 있다.
    30gb 가 넘으면 과금이 발생 한다.

  2. 인스턴스 생성 확인

인스턴스 상태가 대기-> 실행 중 으로 바뀌면 정상적으로 실행 중

  1. 인스턴스 접속

다양한 방법이 있으나 윈도우는 Putty, MAC은 Homebrew 를 통한 awscil 접속을 사용하는게 제일 간편한 방법이다. 접속방법은 AWS 공식문서나 강의에서 확인!

접속 이후 키 없이 비밀번호 만으로도 접속을 변경 할 수 있다.
다만 보안적으로 약해지기 때문에 프로젝트 진행시에만 경험으로 사용해보기.

  • 운영체제마다 초기유저명이 다르니 확인 후 접근이 필요하다.

ex) ubuntu AMI 를 사용자 이름은 ubuntu

인스턴스 종류 후 재시작 시 할당된 public ip 가 변경됩니다.
변경을 방지하려면 AWS 제공하는 EIP(탄력적IP)를 이용해야 한다.

Djagno & WSGI,gunicorn

장고프로젝트를 세팅

  1. 가상환경 세팅

vetualenv 나 미니콘다등 가상환경을 사용

  1. Djnago 프로젝트 Clone

EC2 내 적당한 장소에 git clone 명령어를 이용하여 Django 프로젝트를 받아준다.

2-1 (필요시) EC2 인바운드 규칙 수정

django 프로젝트가 로컬에서 작동시 주로 사용하는 포트는 8000이므로, EC2 콘솔로 들어가서 '인바운드' 규칙을 수정해준다.

  1. Django 프로젝트 실행

pythonj manage.py runserver 0:8000
AWS 퍼블릭 IP:8000 접속시 Djnago 프로젝트로 접근하게 구성한다.
ex) 15.164.214.70:8000

3-1.(필요시) ALLOWED_HOSTS 수정

Djnago 프로젝트는 허용된 주소가 아니라면 접근을 막는 기능을 제공한다.
프로젝트 내 setting.py ALLOWED_HOSTS=['AWS 퍼블릭 IP'] 로 변경

ALLOWED_HOST =['*'] 로 해놓으면 모든 IP접근 허용
보안상 좋지 않음

  • WSGI

사용자들이 웹브라우즈를 사용하여 프로젝트 접속시 동적, 정적 총 2개의 요청

동적요청: DB를 거쳐서 돌아는 즉, 호출시마다 변할수 있는데 데이터를 요청(views.py)
정적요청: 정적파일, 즉,파일(css,js,이미지)등을 읽어서 그대로 리턴하는 요청(static 폴더 내 파일)

runserver 명령어로 실행되는 서버는 동적, 정적 요청을 잘 받아서 처리해줄 수 있는 기능을 가지고 있다.

  • runserver 명령어로 실행되는 서버는 계속 켜놓고 서비스 제공이 안된다.
  1. 장고를 개발하는 입장으로서 웹 프레임워크를 만들고 있으며, 웹 서버를 만드는 것이 아니다.

  2. runserver 기능을 프로덕션(상용)환경에서도 쓸 수 있께 개선하는 것은 장고 개발 범주에 벗어난다.

  • 장고는 웹 프레임워크이며 운용을 위해선 별도의 웹 서버가 필요하다

  • runserver 기능은 상용으로 쓰기에는 부적합 하다
    (상용 환경에서의 사용자의 대규모 또는 잦은 요청을 처리하는데 성능이 부족하다)

  • 웹 서버는?
    runserver 기능처럼 동적/정적 요청을 처리해 줄 수 있는 서버를 말한다.

  • 정적인 요청은 스스로 처리가 가능하나 동적 처리는 WSGI 서버라는 존재가 등장하여 대신 처리해준다.

이 서버는 동적 요청 수령시 웹서버가 하지 못하는 파이썬 어플리케이션 호출을 대신 해주는 역할로, 웹서버-Django 프로젝트 간 '중간자' 또는 '번역가' 의 역할이라고 볼 수 있다.

WSGI 는 Gunicorn 과 uWSGI 가 대표적이며 요즘은 Gunicorn 을 많이 사용하는추세이다.

Gunicorn

  1. EC2 에서 pip install gunicorn 으로 설치 진행

  2. Gunicorn 기동

gunicorn --bind 0:8000 프로젝트명.wsgi:application 1회성
nohup gunicorn --bind0 0:8000 프로젝트명.wsgi:application & 항상

  1. Gunicorn 작동 확인

외부의 동적요청만 처리해준다.
Djnago admin 접속을 통해 정적파일 서빙되는지 여부로 간단히 확인 가능

웹서버

웹서버는 runserver 기능 같이 정적 요청을 처리한다.

대표적으로 아파치틈캣, Ngnix

CLIENT -> 웹서버(아파치틈캣,Ngnix) -> Gunicorn -> Django -> DB

  1. Nginx 설치

웹 서버는 서버의 최전방, 이에 가상환경에 종속되지 않기에 리눅스 패키지 툴인 apt 를 이용해 설치를 진행한다.

먼저 apt 패키지 리스트가 업데이트 되어 있지 않아 최신 버전을 못받을 가능성이 있기에 업데이트를 진행 해준다.

현재 사용자가 root 유저가 아니라면 sudo (superuser do) 권한으로 각각 실행

  1. sudo apt update

  2. sudo apt install nginx

  3. Nginx 설정

설치된 ngnix 의 설정은 하단 경로내'default'에 위치하고 있습니다.

/etc/ngnix/sites-avilable/

default 는 기본 제공되며, 설정 파일이며, 한개 서버에 nginx를 통한 여러 프로젝트 서빙을 위해서는 설정 파일을 여러개 만들어서 쓸 수 있다.

하기 명령어를 통해 default 파일 내 'server' 블록을 수정한다.
수정후 'wq 명령어를 통해 저장후 ui 에디터 나오기를 진행합니다.

cd/etc/nginx/sites-availble/

sudo vi default

:wq

js 에서 server 관련해서 입력을 해준다.

  1. Ec2 포트 재설정

외부에 노출되는 포트는 22번(SSH)와 80번 포트만 있으면 된다.

  1. Nginx 문법검사 & 재실행
    default 에 작성해놓은 설정을 적용하려면 Nginx 재실행이 필요

sudo nginx -t

sudo service nginx restart

sudo service nginx status

profile
진킴

0개의 댓글