[Python] Flask & Nginx & Gunciorn 연결하기
Flask
Gunicorn
Nginx
이번에 동아리의 친구와 함께 간단한 웹 개발을 했었다. 둘 다 웹 프로그래밍에 익숙치 않아 공부 혹은 개인적으로 사용할 용도로 Flask 자체에 있는 웹 서버로 구동하고 있었는데, 의외로 동아리 사람들이 많이 사용을 하게 되어 동접자 10명만 넘어도
CSS
,JS
,HTML
파일들을 제대로 불러오지 못하고 렉이 걸리는 문제가 발생했었다.
그래서 웹 서버와 Flask를 연동하자는 생각이 들었고, 하는 김에 전에 들었던Gunicorn WSGI
까지 ㅇ녀동해서 사용해 보려고한다.
- WSGI & Gunicorn
- Nginx
- Flask & Gunicorn & Nginx 연동
WSGI & Gunicorn
추후 추가
Nginx
추후 추가
Flask & Gunicorn & Nginx 연결
서버 : Ubuntu 12.04 LTS(64-bit)
Python v2.7.3
기본적으로
sudo apt-get install nginx-full
sudo apt-get install python-pip
sudo apt-get install python-dev
pip install virtualenv
등등을 설치해야 한다.
그 후 프로젝트 폴더와 virtualenv를 생성하고, 로드
mkdir flask-app ; cd flask-app
virtualenv py-env
source py-env/bin/activate
flask와 Gunicorn 설치
pip install flask
pip install gunicorn
간단한 Flask 앱을 생성한다.
vi run.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from flask import Flask | |
app = Flask(__name__) | |
@app.route('/') | |
def index(): | |
return "<h1>This is Index Page</h1>" | |
if __name__ == "__main__": | |
app.run(host='0.0.0.0', port=80) |
이 후 Nginx 설정을 해야한다. 그 전에 default 삭제
sudo rm /etc/nginx/sites-available/default
sudo rm /etc/nginx/sites-enabled/default
sudo vi /etc/nginx/sites-available/nginx-test
server{
location / {
proxy_pass http://127.0.0.1:8000;
}
location /static{
alias /home/nginx-test/flask-app/static;
proxy_pass http://127.0.0.1:8000;
}
}
sudo ln -s /etc/nginx/sites-available/nginx-test /etc/nginx/sites-enabled/
Nginx를 재시작하고
sudo service nginx restart
gunicorn을 이용해 8000포트로 어플리케이션을 실행한다
gunicorn run:app -b localhost:8000
'Programming' 카테고리의 다른 글
집단지성 프로그래밍 1(Machine Learning, Euclidean Distance, Pearson Correlation Coefficient) (3) | 2015.06.27 |
---|---|
꼬리재귀, Tail Recursion (0) | 2015.06.23 |
[Python] Flask & Socket IO 웹 소켓을 이용한 채팅 (3) | 2015.02.03 |
[Python] gevent & monkey pathcing (0) | 2015.01.28 |
[Python] gevent & mechanize, asynchronous Scraping (1) | 2015.01.24 |