프로그래밍/Linux

[Linux] Flask, NGINX, UWSGI 연동하여 홈페이지 만들기

Beginner:) 2022. 9. 23.
320x100

AWS 사용

OS : 우분투 18.0.4

python : 3.6.9 (기본 설치)

 

먼저 기본적인 구조이다.

 

파일 위치는 /home/ubuntu/www이며  tree -L 3을 실행하였을 때의 디스플레이

 

 

이건 파일 위치가 /etc/ningx이며 혹시나 첨부해둔다.

 

 

코드 중 대괄호 [ ]로 되어있는 건 파일 이름, 없는 건 터미널 명령어이다.

 

모두 가상 환경에서 진행해도 된다. 

 

AWS에서 인스턴스를 막 시작했을 때부터 시작 

 


 

1. FLASK, UWSGI, 가상환경 설치

 - 가상 환경을 건너뛰는 분 있는데 가상환경을 꼭 설치하자. 

sudo apt-get update
sudo apt-get upgrade
sudo apt install python3-pip python3-dev build-essential libssl-dev libffi-dev python3-setuptools
sudo apt-get install python-virtualenv


mkdir www
cd www
mkdir logs
virtualenv -p python3 env
source env/bin/activate
pip3 install flask
pip3 install uwsgi

 

[main.py]

from app import app

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

 

[app.py]

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Parduck?"

 

2. flask.ini 작성

외부에서 패킷이 날아오면 nginx가 처리를 하는데 nginx는 파이썬을 모르기 때문에 uwsgi로 넘기면 uwsgi가 파이썬 코드를 호출한다. 한마디로 호환성을 위해

 

이외 자세한 내용은 https://uiandwe.tistory.com/1268

 

cd /home/ubuntu/www
touch flask.ini

 

[flask.ini]

[uwsgi]
module = main:app

master = true
processes = 5

vitualenv = /home/ubuntu/www/env
chdir = /home/ubuntu/www

socket = /home/ubuntu/flask.sock
chmod-socket = 666

vacuum = true

daemonize = /home/ubuntu/www/logs/uwsgi.log

die-on-term = true

 

uwsgi 실행

uwsgi --ini flask.ini

 

3. nginx  설치

nginx란 비동기 이벤트 구조 웹서버로 아파치 톰캣 같은 거라 생각하면 된다.

sudo apt-get install nginx
sudo rm /etc/nginx/sites-enabled/default
sudo rm /etc/nginx/sites-available/default

cd /etc/nginx/sites-available
sudo touch flask

 

본글은 아무것도 설치하지 않은 os에서 시작하기 때문에 80번 포트를 사용 중이지 않다. 

특히 톰캣 같은 거 깔려있으면 에러 나니 80번 포트를 사용하고 있다면 포트를 바꾸거나 사용 중인 포트를 킬 하거나

 

[flask]

server {
    listen 80;

    location / {
        include uwsgi_params;
        uwsgi_pass unix:/home/ubuntu/www/flask.sock;
    }
}
sudo ln -s /etc/nginx/sites-available/flask /etc/nginx/sites-enabled

 

flask.ini도 그렇고 아래도 그렇고 사실 개발하다 보면 에러를 분명히 마주치는데 로그를 여러 군데 두면 이동하기 귀찮아서 /home/ubuntu/www/logs에 모아둔다. (심볼릭을 걸어도 상관은 없지만) 

로그를 default인 곳에 그대로 두고 싶다면 아래  코드들은 작성하지 않아도 된다.

cd /etc/nginx
sudo vim nginx.conf
http {
   ...
   ...
   ...
   
   access_log /home/ubuntu/www/logs/access.log;
   error_log /home/ubuntu/www/logs/error.log;
   
   ...
   ...
   ...
}

 

4. 실행

실행하기 전, 서비스를 재시작한다..... 보단 다시 시작이 최고다.

sudo reboot
cd /home/ubuntu/www

 

reboot 하면 uwsgi를 다시 시작해야 한다. (서비스 등록을 하자!)

source /home/ubuntu/www/env/bin/activate
uwsgi --ini flask.ini

 

그리고 페이지에 접속해본다.

 

http://3.34.4.63/

 

http://3.34.4.63/

 

3.34.4.63

 

귀차니즘이 없어지면 멋진 페이지가 있겠지... 

반응형

댓글