2017년 11월 16일 목요일

아마존에 파이썬 플라스크 로 배포 세팅과정

퍼온글 : http://yonggari.com/deploying-flask-app/


aws 환경에서 flask , nginx, uwsgi 로 웹에 배포


프로그램 설치

[python 설치]
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install python3-pip python3-dev nginx

가상환경 설정

[가상환경 설정을 위한 virtualenv 설치]
$ sudo pip3 install virtualenv

[원하는 디렉토리에 가상환경 설정]
$ mkdir ~/flaskapp
$ cd ~/flaskapp
$ virtualenv -p python3 flaskappenv

[가상환경 실행]
$ source flaskappenv/bin/activate

* 실행되면 프롬프트가 아래와 같이 변경된 걸 확인할 수 있다.
(flaskappenv) $

Flask App 설정

Flask와 uWSGI 설치

[uwsgi flask 설치]
(flaskappenv) $ pip install uwsgi flask

flask app 작성(flaskapp.py)

[flask app]
from flask import Flask
app=Flask(__name__)

@app.route("/")
def hello():
    return "<h1>Hello Python Flask</h1>"

if __name__=="__main__":
    app.run(host='0.0.0.0')

5000번 포트 열고, 실행하기

[포트열고, flask app 실행]
(virtualenv) $ sudo ufw allow 5000
(virtualenv) $ python flaskapp.py

http://site address:5000 로 접속하면 실행되는 걸 확인할 수 있다.
하지만 매번 이렇게 해야 하는가? 더 좋은 방법은? nginx 와 같은 전문 웹서버를 통해 보다 안정적이고 빠른 서비스를 기대할 수 있다.

WSGI Entry Point 생성하기

[py 파일생성 및 소스]
(virtualenv) $ nano ~/flaskapp/wsgi.py

[wsgi.py 소스]

from flaskapp import app

if __name__=="__main__":
    app.run()

uWSGI 설정

먼저 테스트를 하겠다.  entry 포인트인 wsgi에 app이 잘 실행되는지 테스트하는 단계이다.
[설정 테스트]
(virtualenv) $ uwsgi --socket 0.0.0.0:5000 --protocol=http -w wsgi:app

http://site address:5000 로 접속하면 실행되는 걸 확인할 수 있다.
실행이 잘 되면 uWSGI 설정파일 생성하는 것으로 넘어가겠다.
우선 가상환경에서 나오겠다. 간단히 deactivate 를 입력하면 가상환경에서 벗어난다.

uWSGI 설정파일 생성

[flaskapp.ini 생성]

$ nano ~/flaskapp/flaskapp.ini

[flaskapp.ini 소스]

[uwsgi]
module = wsgi:app

master=true
processes=5

socket = flaskapp.sock
chmod-socket = 660
vacuum= true

die-on-term=true

systemd Unit File 생성

systemd Unit File을 생성해주면 server 부팅을 할 때마다 자동으로 uWSGI와 Flaskapp이 실행된다.

[systemd Unit file 생성]
$ sudo nano /etc/systemd/system/flaskapp.service

[source]

[Unit]
Description=uWSGI instance to serve flaskapp
After=network.target

[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/flaskapp
Environment="PATH=/home/ubuntu/flaskapp/flaskappenv/bin"
ExecStart=/home/ubuntu/flaskapp/flaskappenv/bin/uwsgi --ini flaskapp.ini

[Install]
WantedBy=multi-user.target

설정파일을 시작하고, 활성화 하겠다.
[실행 및 활성화]
$ sudo systemctl start flaskapp
$ sudo systemctl enable flaskapp

마지막으로 Proxy Requests에 Nginx를 설정하겠다.

[flaskapp 파일 생성 및 소스작성]

$ sudo nano /etc/nginx/sites-available/flaskapp

[설정코드]

server { 
    listen 80;
    server_name server_domain_or_IP;

    location / {
        include uwsgi_params;
        uwsgi_pass unix:/home/ubuntu/flaskapp/flaskapp.sock;
    }
}


[링크 설정]

$ sudo ln -s /etc/nginx/sites-available/flaskapp /etc/nginx/sites-enabled


[설정한 파일에 대한 문법 체크]
$ sudo nginx -t

[웹서버 Nginx 재시작]
$ sudo systemctl restart nginx

[사용하지 않는 5000포트 닫고, Nginx server접속허용하기]
$ sudo ufw delete allow 5000
$ sudo ufw allow 'Nginx Full'

코드를 수정해서 반영하고 싶으실때는

[코드 수정 후 재시작]

$ sudo systemctl restart flaskapp

댓글 없음:

댓글 쓰기