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
댓글 없음:
댓글 쓰기