건프의 소소한 개발이야기

[AWS-Flask 사용법] Flask 로 원격지 서버 구축 및 개발하기 - (2) 본문

개발 이야기/AWS-Flask 이야기

[AWS-Flask 사용법] Flask 로 원격지 서버 구축 및 개발하기 - (2)

건강한프로그래머 2016. 7. 15. 09:20

안녕하세요, 건프입니다.


로컬(내 컴퓨터) 에서 Flask 환경 설정하기

-> AWS에서 nginx 설치하기

-> AWS에서 nginx 설정하기

-> AWS에서 uwsgi 에 해당하는 gunicorn 설치 및 사용법

-> AWS에서 Flask 배포하기

-> 로컬에서 git push & AWS 에서 적용 코드 git pull 받고 서버 재시동하는 방법



에서 두번째 포스팅입니다. 이제 원격지 서버인 AWS로 가봅니다.


AWS에 SSH 로 터미널 원격접속을 한 뒤에, 웹서버의 종류 중 하나인 nginx (엔젠엑스)를 설치하고, 그 설정법에 대해서 알아보려고 합니다.

1. 설치

> sudo apt-get update

> sudo apt-get install -y python python-pip nginx gunicorn

-y : 설치할껀지 묻는 과정에 모두 yes 라고 답해달라

nginx : 웹서버

gunicorn : 웹서버와 python 인터프리터를 연결해주는 uwsgi 의 종류 중 하나


2. Start nginx

> sudo /etc/init.d/nginx start


3. Settings nginx for Flask

> sudo rm /etc/nginx/sites-enabled/default > sudo touch /etc/nginx/sites-available/flask_settings

> sudo ln -s /etc/nginx/sites-available/flask_settings /etc/nginx/sites-enabled/flask_settings


4. add config settings to flask_settings (왜 갑자기 영어가 편하지;;)

> sudo vim /etc/nginx/sites-enabled/flask_settings

add :

server { location / { proxy_pass http://localhost:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } location /static { alias <<본인 static 폴더가 위치하는 pwd 명>>/static/; } 

}

이것의 내용은 서버에 들어오는 HTTP Request 가 / 의 endpoint 를 가지고 있으면, 'reverse proxied' 해서 포트번호 8000으로 실행시켜달라는 의미입니다.


5. restart nginx

> sudo /etc/init.d/nginx restart


6. 개발하기 (1) 에서 했던 내용을 github 에 push 하고, 여기서는 해당 프로젝트를 clone 합니다.

가상환경을 activate 하고, 받아온 requirements.txt 를 이용하여, 모듈을 업데이트 합니다.

> pip install -r requirements.txt

여기서 requirements.txt 는

로컬에서 작업해서 원격으로 코드를 보내든,

원격의 코드를 로컬환경으로 가져오든,

프로젝트가 가지고 있는 모듈별 의존성을 기록해놓고, 한번에 세팅할 수 있도록 도와주는 pip 의 큰 장점입니다.

requirements.txt 형식을 얻는 방법은


> pip freeze 명령을 치시면 되고, 여기서 나오는 결과물을 requirements.txt 에 저장하시면 됩니다.


이런식으로 말입니다 ㅎ


clone 한 프로젝트의 server.py 가 위치하는 디렉토리에서 

> gunicorn server:app -b localhost:8000


ip로 접근하였을때, 제대로 동작하는 것을 확인할 수 있습니다. 내용물이 약간 달라진건, 파일을 다르게 해서 제가 올렸기 때문입니다 ㅋㅋ..


7. 좋은데 문제점

원격지 ip 를 이용해서 서버를 만들어 낸 것 까지는 좋은데, 한가지 문제가 있습니다.

터미널에서 gunicorn 프로그램을 종료하면, 서버가 닫힙니다.

왜냐하면 gunicorn 이 nginx 와 파이썬 인터프리터를 연결해주는 다리 역할을 하는데, 

gunicorn 을 끄게되면, 해석을 할 수가 없는 것이죠.

만약 이렇게만 써야한다면, 서버를 쓰기 위해서는 내 컴퓨터의 내 터미널을 끄지 않아야 한다는 소리인데.. 이는 서버사용의 목적에 위배되죠.


게다가,

AWS의 경우 SSH 프로그램을 이용해서 원격으로 터미널에 접근합니다.

gunicorn 을 실행시키고 SSH 터미널을 종료하게되면,

SSH 로 작업한 모든 내용이 터미널이 닫힘과 동시에 모두 종료됩니다. (부모 프로세스가 SSH 프로그램이기 때문에 ,부모가 소멸되면 자식들도 다함께 소멸됩니다...)


어떻게 하면 SSH 터미널을 빠져 나오더라도, guncorn 을 유지할 수 있을까 열심히 찾아봤는데 supervisor 라는 프로그램을 연결해주면 됩니다!


이는 다음 포스팅에서 이어서 작업하겠습니다. 


도움이 되었길 바랍니다 .

고맙습니다 :)






Comments