오늘은 타임어택구현테스트 + django 프로젝트 + aws 특강까지 정신없이 하루가 지나간것 같다
오늘은 프로젝트 진도는 많이 나가지 못한거 같다
the action of bringin resources into effective action
효과적인 운용을 위해 자원을 가져다 놓는 행위이다.
효과적인 운용은
자원을 가져다 놓는다
배포의 첫번째행위는 어플리케이션을 바로 서버에 옮기는것
그렇다면 서버는
우리가 쓰고있는 '컴퓨터' 가 서버이다.
클라우드와 대치되는 개념으로 기업이 서버를 자체 설비로 보유하고 운영하는 겄을 '온프레미스' 라고 한다
Cloud
클라우는, 클라우드 컴퓨팅의 줄임말이다
AWS, Azure, GCP, KT, Naver 같은 회사에서 서버를 제공받아서 운영한다.
차이점은
즉 AWS가 구축해놓은 IDC 서버용 컴퓨터의 자원을 원격으로 사용할 수 있게 해주는 서비스. -> AWS 로부터 한대으 컴퓨터를 임대한다.
인스턴스(AWS 가상서버를 지칭)
운영체제(os)선택
ex) ubuntu
ubuntu 는18.04, 20.04 등 LTS 버전을 선택하는 것이 안정성에 좋다.
Spec 설정
해당 컴퓨터의 스텍, t2.nono,micro,small 등등
프리티어는 micro 정도 사용 가능!
micro 는 웹어플레이케이션 간단하게 하나정도 서빙할 수 있는 정도 스펙
보안 요소중 하나.
키를 생성을 해서 보안을 해야한다.
.PEM or .PPK
선택 하는 os 나 사용하는 컴퓨터 환경에 따라 달라질 수 있다.
보통은 .PEM 으로 많이 사용한다.
용량 구성
기본으로 6gb 인데 30까지 올릴 수 있다.
30gb 가 넘으면 과금이 발생 한다.
인스턴스 생성 확인
인스턴스 상태가 대기-> 실행 중 으로 바뀌면 정상적으로 실행 중
다양한 방법이 있으나 윈도우는 Putty, MAC은 Homebrew 를 통한 awscil 접속을 사용하는게 제일 간편한 방법이다. 접속방법은 AWS 공식문서나 강의에서 확인!
접속 이후 키 없이 비밀번호 만으로도 접속을 변경 할 수 있다.
다만 보안적으로 약해지기 때문에 프로젝트 진행시에만 경험으로 사용해보기.
ex) ubuntu AMI 를 사용자 이름은 ubuntu
인스턴스 종류 후 재시작 시 할당된 public ip 가 변경됩니다.
변경을 방지하려면 AWS 제공하는 EIP(탄력적IP)를 이용해야 한다.
장고프로젝트를 세팅
vetualenv 나 미니콘다등 가상환경을 사용
EC2 내 적당한 장소에 git clone 명령어를 이용하여 Django 프로젝트를 받아준다.
2-1 (필요시) EC2 인바운드 규칙 수정
django 프로젝트가 로컬에서 작동시 주로 사용하는 포트는 8000이므로, EC2 콘솔로 들어가서 '인바운드' 규칙을 수정해준다.
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접근 허용
보안상 좋지 않음
사용자들이 웹브라우즈를 사용하여 프로젝트 접속시 동적, 정적 총 2개의 요청
동적요청: DB를 거쳐서 돌아는 즉, 호출시마다 변할수 있는데 데이터를 요청(views.py)
정적요청: 정적파일, 즉,파일(css,js,이미지)등을 읽어서 그대로 리턴하는 요청(static 폴더 내 파일)
runserver 명령어로 실행되는 서버는 동적, 정적 요청을 잘 받아서 처리해줄 수 있는 기능을 가지고 있다.
장고를 개발하는 입장으로서 웹 프레임워크를 만들고 있으며, 웹 서버를 만드는 것이 아니다.
runserver 기능을 프로덕션(상용)환경에서도 쓸 수 있께 개선하는 것은 장고 개발 범주에 벗어난다.
장고는 웹 프레임워크이며 운용을 위해선 별도의 웹 서버가 필요하다
runserver 기능은 상용으로 쓰기에는 부적합 하다
(상용 환경에서의 사용자의 대규모 또는 잦은 요청을 처리하는데 성능이 부족하다)
웹 서버는?
runserver 기능처럼 동적/정적 요청을 처리해 줄 수 있는 서버를 말한다.
정적인 요청은 스스로 처리가 가능하나 동적 처리는 WSGI 서버라는 존재가 등장하여 대신 처리해준다.
이 서버는 동적 요청 수령시 웹서버가 하지 못하는 파이썬 어플리케이션 호출을 대신 해주는 역할로, 웹서버-Django 프로젝트 간 '중간자' 또는 '번역가' 의 역할이라고 볼 수 있다.
WSGI 는 Gunicorn 과 uWSGI 가 대표적이며 요즘은 Gunicorn 을 많이 사용하는추세이다.
EC2 에서 pip install gunicorn 으로 설치 진행
Gunicorn 기동
gunicorn --bind 0:8000 프로젝트명.wsgi:application
1회성
nohup gunicorn --bind0 0:8000 프로젝트명.wsgi:application &
항상
외부의 동적요청만 처리해준다.
Djnago admin 접속을 통해 정적파일 서빙되는지 여부로 간단히 확인 가능
웹서버는 runserver 기능 같이 정적 요청을 처리한다.
대표적으로 아파치틈캣, Ngnix
CLIENT -> 웹서버(아파치틈캣,Ngnix) -> Gunicorn -> Django -> DB
웹 서버는 서버의 최전방, 이에 가상환경에 종속되지 않기에 리눅스 패키지 툴인 apt 를 이용해 설치를 진행한다.
먼저 apt 패키지 리스트가 업데이트 되어 있지 않아 최신 버전을 못받을 가능성이 있기에 업데이트를 진행 해준다.
현재 사용자가 root 유저가 아니라면 sudo (superuser do) 권한으로 각각 실행
sudo apt update
sudo apt install nginx
Nginx 설정
설치된 ngnix 의 설정은 하단 경로내'default'에 위치하고 있습니다.
/etc/ngnix/sites-avilable/
default 는 기본 제공되며, 설정 파일이며, 한개 서버에 nginx를 통한 여러 프로젝트 서빙을 위해서는 설정 파일을 여러개 만들어서 쓸 수 있다.
하기 명령어를 통해 default 파일 내 'server' 블록을 수정한다.
수정후 'wq 명령어를 통해 저장후 ui 에디터 나오기를 진행합니다.
cd/etc/nginx/sites-availble/
sudo vi default
:wq
js 에서 server 관련해서 입력을 해준다.
외부에 노출되는 포트는 22번(SSH)와 80번 포트만 있으면 된다.
sudo nginx -t
sudo service nginx restart
sudo service nginx status