[EC2] Flask, Gunicorn, ngnix를 사용해 호스팅 하기 - 1

옥영빈·2023년 2월 10일
0

python

목록 보기
1/1

문제점

python 기반의 서버를 구축 해서 web으로 호스팅 하려고 하는데 이전에는 flask만 사용해 python server.py로 서버를 켜놨었다.
하지만 이렇게 하는것은 안정성이 떨어진다고 들었고 개인적인 욕심으로 flask + wsgi + ngnix를 구축하면 안정성이 높다고 이전에 찾아본 기억이 남았다.

그래서 flask + wsgi(gunicorn) + nginx를 이용해 EC2에 배포 하기로 했다!

선정이유

우선 python으로 서버를 만들어 본적이 거의 없어 여러가지 자료를 찾아본 결과

flask
소규모 프로젝트 단위로 많이 사용한다고 한다.
거기다 확장성이 좋아 다른 라이브러리와 연계성이 좋다고 한다.

gunicorn
웹 서버 소프트웨어와 파이썬으로 작성된 웹 응용 프로그램간의 표준 인터페이스 라고 한다.
사실 잘 몰라서 gunicorn이 많이 쓰이고 또 자료 또한 많아서 사용하기로 했다.

nginx
apche와 nginx를 단순 비교 했을 때 nginx가 단점을 보완하여 나왔다고 들었고 성능이 좋다고 했다.

사실 위의 3가지를 선정한 가장 절대적인 이유는
참고할수 있는 자료의 유무와 정보의 양이었다.

참고 사이트 part1
https://faun.pub/deploy-a-flask-ml-model-on-ngnix-using-wfastcgi-gunicorn-gateway-ubuntu-18-04-part-i-8c621beda19d

참고 사이트 part2
https://faun.pub/deploy-a-flask-ml-model-on-ngnix-using-wfastcgi-gunicorn-gateway-ubuntu-18-04-part-ii-2a3adbf25f57

위의 좋은 참고 자료가 없었다면 엄청 해맸을 것이다.

AWS EC2 : Ubuntu 20.04
conda 가상환경
버전으로 구성했기 때문에 위의 자료와 버전만 다르고 나머진 다 똑같다 그래서 참고했다.

그래서 위의 사이트에 있는 내용을 나의 환경에 맞춰 조금씩 바꿨다.

  1. EC2 Ubuntu 20.04 버전 설치
    콘솔 창에
sudo apt update && apt get upgrade
python3 --version    --- 파이썬 버전 확인
  1. Miniconda 설치
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh

[Y/n] 가 나오면 y 엔터

설치 확인
cd /home/ubuntu/miniconda3/

가상환경 만들기
conda create -n [가상환경 이름] python=3.7
ex) conda create -n myenv python=3.7
가상환경 이름은 myenv 파이썬3.7버전 으로 설치

가상환경 리스트 확인 - 자기가 만든 환경 확인해보기
conda env list

가상환경이 만들어 지면
(myenv) ~~ 라고 떠야 가상환경에 접속한 것 이므로 안뜬다면 재접속 할 것
  1. 플라스크 설치
pip install flask
  1. Gunicorn 설치
(myenv) cd /home/ubuntu/miniconda3 pip install gunicorn
  1. server.py 생성
nano server.py

아래의 코드를 작성한다.

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "<h1 style='color:blue'>Hello There!</h1>"

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

콘솔 창에서

python server.py
 * Serving Flask app "server" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://0.0.0.0:8000/ (Press CTRL+C to quit)

으로 나오면 http://localhost:8000/ 이 주소로 들어가면 브라우져 화면이 나올 것이다.

그리고 wsgi.py 생성하기

(myenv) ~~ nano wsgi.py
from server import app
if __name__ == "__main__":
        app.run()

저장 후 콘솔 창에서

gunicorn --bind 0.0.0.0:8000 wsgi:app

바인딩 해준다.

profile
webGL개발 초보

0개의 댓글