deploy by AWS-EC2

sihwan_e·2020년 10월 3일
1

AWS

목록 보기
2/3

1.인스턴스시작

인스턴스는 컴퓨터 개수라고 생각합시다.
가령 이야기를할때 인스턴스 몇대 띄웠어 라고 하면 "아 가상 컴퓨터 몇대 띄웠냐, 서버 몇개 띄웠냐"로 받아들이면 될거같습니다.

인스턴스 시작을 누르면
단계1 아마존 머신 이미지 고르기 Os고르는거라고 생각하면되고 우분투 18.04 LTS 고른다

단계2 인스턴스 유형에서는 프리티어 t2.micro 를 사용해줍니다.
이때 옵션중에서 EBS, IPv6 에 대해 알아 보겠습니다.

Amazon EBS


Amazon Elastic Block Store의 약자로서 Amazon EBS는 대규모로 처리량과 트랜잭션 집약적인 워크로드 모두를 지원하기 위해 Amazon Elastic Compute Cloud(EC2)에서 사용하도록 설계된 사용하기 쉬운 고성능 블록 스토리지 서비스 입니다. 관계형 및 비관계형 데이터 베이스, 컨테이너화된 애플리케이션와 같은 다양한 워크로드가 Amazon EBS에 널리 배포됩니다.
(aws 홈페이지 참고)

IPv6

Internet Protocol version 6 의 준말로서 인터넷 프로토콜 스택중 네트워크 계층의 프로토콜로서 버전 6 인터넷 프로토콜로 제정된 차세대 프로토콜입니다.기존 IPv4프로토콜은 할당된 주소가 거의 소진되고 있다는 한계점에 봉착하여 대안으로 제안 되었습니다.

단계7 시작하기

기존키 페어 선택 또는 새키 페어 생성
페어는 서버 접속할때 항상 필요한 것입니다.
인스턴스 생성시 처음 발급할때 이외엔 발급이 되지 않으므로 잘 보관을 해두도록합시다.

키페어가 없다면 새키페어 생성해서 키페어 다운로드를 한다.

기존키페어가 있다면 기존키페어 고르고 인스턴스 시작을 하면된다

그러면 인스턴스, 즉 가상컴퓨터가 가동된다.

초록색 버튼 running이 뜨면 잘돌아가고 있는 것이다.

2.인바운드 세팅

네트워크 및 보안 에서 보안그룹으로 들어가서 인바운드에 들어가서 셋팅을 좀해야한다.
없다면 보안 그룹 생성 해주면되지만 보통은 존재한다.
인바운드 규칙편집에가서

HTTP TCP 80 0.0.0.0/0
HTTP TCP 80 ::/0
SSH TCP 22 0.0.0.0/0

서버를 열기 위해서 방화벽이 외부에서 서버로 접속하려는 시도를 막지않도록 하기 위한 작업입니다.

까지 작업을 했다면 이제 서버 접속을 할수 있게 된다.
그리고 퍼블릭 DNS복붙해서 이제 터미널로 가자.

터미널에서
방금 받은 키파일을 chmod를 통해 세팅을 해줍니다. chmod는 소유자나 pem키파일을 읽게하도록 권한을 부여하는 작업을 하는것이라고 보면 됩니다.

chmod 400 pem파일 경로

ssh -i 아까 다운로드 받은 키 (

(예제)
ssh -i BlogKey2019.pem ubuntu@ec2-54-180-32-240.ap-northeast-2.compute.amazonaws.com

ec2~ 부분은 퍼블릭dns입니다.

이것도 하나의 커맨드 라인임 .

ssh -i 파일이름경로 /ubuntu (이부분은 유저계정인데 우분투가 기본 디폴트) @ 퍼블릭 DNS 주소

처음 접속할떄 yes/no 있는데 그냥 yes 하면 접속이 됩니다.

그럼이제 ubuntu@ip-172-31-46-148:~$ 가 커맨드에 뜨게 되고
이제 그걸 다루게됩니다.

ubuntu@ip-172-31-46-148:~$

서버접속이 되었다.
이제 서버에 접속해서 필요한걸 세팅해보자.

3.우분투 서버 세팅

세팅하기

1.ubuntu@ip-172-31-46-148:~$
ubuntu@ip-172-31-46-148:~$sudo apt update

apt는 우분투의 명령어입니다(우분투 패키지 관리커맨드). 
그래서 sudo apt install python 식으로 쓰면됩니다.

필요한것을 설치해주도록 합시다.

2.git
ubuntu@ip-172-31-46-148:~$sudo apt install git

3.nginx
ubuntu@ip-172-31-46-148:~$sudo apt install nginx

4.python
ubuntu@ip-172-31-46-148:~$sudo apt install python3-pip

5.vim
ubuntu@ip-172-31-46-148:~$sudo apt install vim

sudo apt install nginx python3-pip vim

vim 은 터미널에서 사용할수있는 에디터라고 보면 된다.

일단 이제 nginx를 세팅하기 위해 root로 가야한다

ubuntu@ip-172-31-46-148:~$sudo su   #이것을 통해 루트로가게됩니다.
root@ip-172-31-46-148:/home/ubuntu# 
root@ip-172-31-46-148:/home/ubuntu#cd /etc/nginx/sites-available/ 
root@ip-172-31-46-148:/etc/nginx/sites-available#
root@ip-172-31-46-148:/etc/nginx/sites-available# ls 
default   
root@ip-172-31-46-148:/etc/nginx/sites-available# mv default default.bak

일단 기존 내용을 지우고 새로 쓸건데 혹시몰라서 디폴트.백 에 빽업을 남겨두는 것입니다.

4. 리버스 프록시

이제 디폴트에 내용을 채워 넣어야한다.

vim default 를 통해 들어가서 수정을 해줍시다.

root@ip-172-31-46-148:/etc/nginx/sites-available# vim default
upstream django{
	server 127.0.0.1:8000;
}
server {
	listen 80;

	proxy_set_header X-Forwarded-Proto $scheme;

	# gunicorn app
	location / {
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Url-Scheme $scheme;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header Host $http_host;
	
		proxy_redirect off;

		proxy_pass http://django;
	}

	location /static/ {
		autoindex on;
		alias /home/ubuntu/FC1/stargram/static/;
	}
	
	location /media/ {
		autoindex on;
		alias /home/ubuntu/FC1/stargram/media/;
	}
}

location/static/ 이건 지금 당장 필요하지 않다. 왜냐하면 s3버킷에 올리고 있기 때문이다. 그래서 지우도록하자

아래가 실질적으로 vim default 해서 안에 써넣어야 할 내용이다.

upstream django{
	server 127.0.0.1:8000;
}
server {
	listen 80;

	proxy_set_header X-Forwarded-Proto $scheme;

	# gunicorn app
	location / {
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Url-Scheme $scheme;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header Host $http_host;
	
		proxy_redirect off;

		proxy_pass http://django;
	}

내용은 대략적으로 80번 포트로 들어오는것을 지정한 8000으로 오게 하려는 것이다.
이러한 것을 “리버스 프록시”라고 부른다.
그리고 저장하고 나오자

5.nginx 실행

이제 nginx 를 실행해보자

아. 참고로 nginx는
Nginx(엔진 x라 읽는다)는 웹 서버 소프트웨어로, 가벼움과 높은 성능을 목표로 한다. 웹 서버, 리버스 프록시 및 메일 프록시 기능을 가진다.
(TMI)
2017년 10월 기준으로 실질적으로 작동하는 웹 사이트(active site)들에서 쓰이는 웹 서버 소프트웨어 순위는 아파치(44.89%), 엔진엑스(20.65%), 구글 웹 서버(7.86%), 마이크로소프트 IIS(7.32%)순이다(TMI)

root@ip-172-31-46-148:/etc/nginx/sites-available# service nginx restart
root@ip-172-31-46-148:/etc/nginx/sites-available#

실행이 된것이다.

root@ip-172-31-46-148:/etc/nginx/sites-available# exit
exit

일단 여기까지 종료를한다.

ubuntu@ip-172-31-46-148:~$

나와졌다 경로가 바뀌었다.
일단 다음으로는 깃(원격저장소)에다가 올린것을 여기다가 가져올것인데 클론해오자

6. git clone

ubuntu@ip-172-31-46-148:~$ git clone (레포지토리 주소)

이렇게 되었다면 복제가 될것이고

ubuntu@ip-172-31-46-148:~$ls

에서 프로젝트가 들어온지 확인을 한다음.

ubuntu@ip-172-31-46-148:~$ cd stargram

vi requirements.txt 에 가보면 있는거를 설치해줘야함

ubuntu@ip-172-31-46-148:~$:~/프로젝트$ pip3 install -r requirements.txt

라고 해주면 바로 저 파일안의 것들을 자동설치해준다.

ubuntu@ip-172-31-46-148:~$:~/프로젝트$ pip3 install -r requirements.txt-- 

뒤에 줄 두개 긋고 한건지뭔지 몰겟네 둘다해보자근데 두줄긋고하더라

분리된 settings 넣기

일단 이제 세팅즈 파일을 분리했잖아 그걸 넣는 작업을 해야함
dev , prod 로 따로 settings를 구분 해놓지 않았다면 skip해도 됌.

ubuntu@ip-172-31-46-148:~$:~/프로젝트$ vi ~/ .bashrc

bashrc에 들어가서
export 를 추가를 할건데. 맨마지막에 걍 넣어도됌
해당 문구를 추가하자

export DJANGO_SETTINGS_MODULE=stargram.settings.prod

저장하고 나가자 :wq
이제 migrate 하자

—————————————————————————————————————————————

gunicorn

Gunicorn은 python의 WSGI 라이브러리.

루비에서 유니콘이라고하던걸 파이썬에서 구현해낸것인데, 많은 기능이 있긴한데 파이썬웹인터페이스라고 생각하면 되겠다.
독립적인 wsgi 웹 응용 프로그램 서버 이다 라고 보면된다.

gunicorn설치

ubuntu@ip-172-31-46-148:~$:~/프로젝트$ pip3 install gunicorn

이제 서버가 가동되게 하는 작업을 해보자

wsgi

WSGI는 (Web Server Gateway Interface) 웹서버와 웹 애플리케이션의 인터페이스를 위한 파이썬 프레임워크다.
웹서버와 우리가 만든 웹 애플리케이션 django는 상호간에 통신이 불가능하기 때문에 그 사이에서 WSGI가 인터페이스 역할을 하여 양쪽을 연결한다.

사용자가 웹서버에 요청을 보내면 WSGI가 django로 넘겨주고, django에서 일련의 과정을 거친 뒤 다시 WSGI를 통해 웹서버로 전달이 된다.

user <-> 웹서버 <-> WSGI Server <-> Django

ubuntu@ip-172-31-46-148:~$:~/프로젝트$ gunicorn stargram.wsgi -D
ubuntu@ip-172-31-46-148:~$:~/프로젝트$ gunicorn stargram.wsgi --bind 0.0.0.0:8000 -D

그럼 지유니콘이 실행되는거고 -D 가 이제이게 SSH창꺼도 쭉 실행되게 해주는거임

서버 끄고싶으면

ubuntu@ip-172-31-46-148:~$:~/프로젝트$ pkill gunicorn

이제 종료가 된다.

ubuntu@ip-172-31-46-148:~$:~/프로젝트$ gunicorn stargram.wsgi --bind 0.0.0.0:8000 -D

하.지.만...

이렇게 서버가 켜져 있는 상태에서

지금 다시 aws 사이트에와서 네트워크 및 보안/ 보안그룹 에 들어와서 인바운드 부분을 수정하지 않으면 접속이 불가능하다.

인바운드 수정에서
편집을 누르고

사용자 지정 TCP 규칙  TCP  8000   0.0.0.0/0

저장하고 나서 다시 인스턴스로 가서 IPv4 퍼블릭 IP 를 복사한다
그래서 주소창에
ex)
54.180.32.240:8000 이 주소가 되어야 접속이된다.
아니면 퍼블릭 DNS 를 복사해가지고 뒤에 :8000 붙여도 접속이 된다.
ex)
ec2-54-180-32-240.ap-northeast-2.compute.amazonaws.com:8000

profile
Sometimes you gotta run before you can walk.

0개의 댓글