일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- MySQL
- php
- Python
- tracking
- Android
- Object Detection
- 지능형
- tensorflow
- IMAGE
- Video
- Raspberry
- sw
- keras
- Deep Learning
- 라즈베리파이
- Linux
- 머신러닝
- 가상환경
- RapidCheck
- 서버
- FLASK
- 안드로이드
- 데이터
- 디버그모드
- 영상분석
- detection
- C언어
- 정리
- Machine Learning
- 고급C
- Today
- Total
건프의 소소한 개발이야기
[AWS-Flask 사용법] Flask 로 원격지 서버 구축 및 개발하기 - (2) 본문
안녕하세요, 건프입니다.
로컬(내 컴퓨터) 에서 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 라는 프로그램을 연결해주면 됩니다!
이는 다음 포스팅에서 이어서 작업하겠습니다.
도움이 되었길 바랍니다 .
고맙습니다 :)
' 개발 이야기 > AWS-Flask 이야기' 카테고리의 다른 글
[Flask - WebSocket] 웹소켓으로 실시간 채팅 통신 구현하기 (0) | 2016.09.11 |
---|---|
[AWS-Flask 사용법] Flask 로 원격지 서버 구축 및 개발하기 - (3) (7) | 2016.07.15 |
[AWS-Flask 사용법] Flask 로 원격지 서버 구축 및 개발하기 - (1) (5) | 2016.07.15 |
[AWS-Ubuntu] 인스턴스 만들기 (0) | 2016.06.19 |