클라우드 엔지니어/클라우드 캠프과정

Flask , nginx , gunicon (by sock)

해아's 2022. 10. 26. 13:47
더보기

어제까지 배운것을 기반으로 플라스크를 백앤드

엔진엑스를 프론트엔드로 CI/CD를 진행해보려 한다.

그러면 일단 플라스크와 엔진엑스를 연동하는 작업을 처음해보고 나서 CI/CD를 진행하면 될거같다.

플라스크는 장고보다 가벼워서 MSA에 좋다고 하는데 그건 뭐 개발하는 팀에서 쓰고싶은 것을 쓰면되는데

장고는 배워봤고 이번시간에는 플라스크를 이용하려고한다.

 

프로젝트 실행해서

pip install Flask

플라스크 설치후

파이썬파일에 기본실행코드를 넣어보자

from flask import Flask
app = Flask(__name__)
#장고기준으로 함수
@app.route("/")
def main():
    return "Hello World!"
#장고기준으로 url
@app.route("/meet")
def meet():
    result = {"code":200,"message":"hello Flask"} #json 형태로 반환되는형태
    return result
#장고기준으로 서버실행해주는애
if __name__ == '__main__':
    app.run(host='0.0.0.0',port=80)

 

백앤드 프론트 구분할떄

사용자들이 ui입력하고 백엔드에서 처리하고 리턴될떄 json형태로 주고받는다.

백엔드를 따로 구성하고 연결하면 strict-origin-when-cross-origin에러가 난다

출발지와 도착지가 달라서 그렇다플라스크에서 CROS를 설치하여 셋팅해주자

#커맨드에서 pip install flask_cors 설치
from flask_cors import CORS

app = Flask(__name__)
CORS(app, resources={r"/*":{"origins":"*"}})

 

파이썬과 엔진엑스를 연결하기위해 uWSGI를 연결하는 프로그램을 설치해야한다.

vm환경에서 테스트를 먼저해보자

#centos8
#nginx 설치
yum update -y
yum install nginx -y
systemctl restart nginx
systemctl stop firewalld

#파이썬 설치
yum install python3-pip python3-devel gcc -y
alias python=python3
alias pip=pip3
pip install flask flask_cors

#사용자생성 및 nginx에게 user 그룹권한 주기
useradd -m user
usermod -a -G user nginx
chmod 750 /home/user


#작업파일 옴기기
vi main.py
#테스트실행(기존80포트 nginx사용중이므로 포트변경하여 실행)
#wsgi.py 생성
from main import app

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


pip install uwsgi
#테스트
gunicorn --bind 0.0.0.0:8000 wsgi:app

#데몬으로 gunicon 실행하기
vi /etc/systemd/system/backend.service
[Unit]
Description=Gunicorn Service
After=network.target

[Unit]
Description=Gunicorn Service
After=network.target

[Service]
User=user
Group=user
WorkingDirectory=/home/user/
ExecStart=/usr/local/bin/gunicorn --workers 1 --bind unix:backend.sock -m 007 wsgi:app

[Install]
WantedBy=multi-user.target

#저장후
 systemctl demon-reload
 systemctl restart backend
 
#nginx 설정
vi /etc/nginx/conf.d/default.conf
server {
    listen 80;
    server_name IP주소;

    location / {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://unix:/home/user/backend.sock;
    }
}

systemctl restart nginx

 

참고자료

 

 

728x90
반응형