Apache + Flask 연동 ( ubuntu ) - 한글

2021. 4. 6. 23:56it

반응형

 

Flask는 Python web framewark 중 하나다.

 

사용이 간편해, 가벼운 api 서버로 사용하기에 안성 맞춤이다.

 

하지만, Python의 고질적인 문제이자, Flask의 문제인...

 

Multi Thread 의 약점 때문에, 이를 활용해 프로젝트를 수행하는 경우, 이슈로 제기 된다.

 

이러한 약점을 보안하기 위해, 많은 Flask 개발자들은 Apache 서비스와 함께 사용한다.

 

그래서 금일은 Flask와 Apache web 서비스를 연동하는 방법에 대해 알아 보겠다.  

 

0. 본 환경은 ubuntu 20 버전이다.

- ubuntu 18 버전에서 무난히 잘 된다.

 

1. 먼저 필요한 패키지를 설치한다.

$ sudo add-apt-repository universe

$ sudo apt-get update

$ sudo apt-get install python3-pip

$ sudo apt install apache2

$ sudo apt install libapache2-mod-wsgi-py3

 

2. Flask를 설치한다.

$ pip3 install flask

 

3. Flask 실행 경로를 만들어 준다

$ mkdir /flask

 

 

4. Flask의 권하늘 부여한다. ( ubuntu는 현재 내가 사용하는 user id/user group 이다 )

$ sudo chown -fR ubuntu:ubuntu flask

 

5. ubuntu에 해당 경로가 있는지 확인한다.

$ cd /etc/apache2/sites-available

$ cd /var/www

 

6. Flask 에 링크를 걸어준다.

$ sudo ln -s /flask

 

7. Flask 로 이동하고, 디렉토리를 구성해준다.

$ cd flask

$ mkdir app

$ mkdir wsgi

 

8. Flask conf 파일을 만들어 준다.

$ cd /etc/apache2/sites-available/

$ sudo vi flask.conf

<VirtualHost *:80>

       ServerName localhost

       WSGIDaemonProcess flaskApp user=ubuntu group=ubuntu threads=5 maximum-requests=10

       WSGIScriptAlias / /var/www/flask/wsgi/mod.wsgi

       DocumentRoot /var/www/flask

       <Directory /var/www/flask>

                WSGIProcessGroup flaskApp

                WSGIApplicationGroup %{GLOBAL}

                Order deny,allow

                Allow from all

       </Directory>

</VirtualHost>

 

9. wsgi를 작성해준다.

$ cd /flask/wsgi

$ vi mod.wsgi

import sys

sys.path.insert(0, '/var/www/flask/app')

from flaskApp import app as application

 

10. app를 작성해 준다. ( 실질적으로 실행되는 파일 )

$ cd ..

$ cd app

$ vi flaskApp.py

from flask

import Flask

app = Flask(__name__)

@app.route("/")

def index():

     return "hello World!"

 

11. Flask conf 파일을 우리가 작성한 conf로 바꿔준다.

$ sudo a2dissite 000-default

$ sudo a2ensite flask

$ sudo service apache2 restart

 

12. 방화벽을 풀어준다.

$ sudo ufw allow 80

 

13. 접속을 해본다.

http://123.456.789.123:80

 

 

 

flask와 wsgi의 python 버전을 통일해 주는 것이 중요하다.

 

버전이 다르면, 실행 되지 않고 에러가 발생한다.

 

이거 때문에 한참을 고생했다.

 

파이썬 친구들인 왠만해서 버전가지고 속 안썩이는데,

 

좀 고통스러웠다.

 

위 내용만 주의하고 실행한다면, 큰 문제는 없을 것이다.

반응형