[flask와 apache연동] +[apache 경로 한 부분에 넣기]
Flask는 Python web framewark 중 하나다.
사용이 간편해, 가벼운 api 서버로 사용하기에 안성 맞춤이다.
Multi Thread 의 약점 때문에, 이를 활용해 프로젝트를 수행하는 경우, 이슈로 제기 된다.
이러한 약점을 보안하기 위해, 많은 Flask 개발자들은 Apache 서비스와 함께 사용한다.
Flask와 Apache web 서비스를 연동하는 방법에 대해 알아 보겠다.
또한 apache 기본 폴더 속의 한 부분에 넣는 방법을 알아보겠다.
예) http://192.168.59.133/lunch을 치면 flask가 실행되는 형식
환경은 ubuntu 20 버전이다.
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의 권한을 부여한다.
(user_name:user_group 순이다.)
(확인법 groups [사용자 이름])
$ cd /flask
$ sudo chown -fR user_name:user_group 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 nano flask.conf
(WSGIDaemonProcess에서 user과 group은 위에서 4번에서 쓴 user name과 user group으로 바꾼다. )
<VirtualHost *:80>
ServerName localhost
WSGIDaemonProcess flaskApp user=user_name group=user_group 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
$ nano mod.wsgi
import sys
sys.path.insert(0, '/var/www/flask/app')
from flaskApp import app as application
10. app를 작성해 준다. ( 실질적으로 실행되는 파일 )
$ cd ..
$ cd app
$ nano 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
14. apache 기본 폴더 속의 한 부분에 넣기
$ cd /etc/apache2/sites-available/
$ sudo nano flask.conf
(WSGIDaemonProcess에서 user과 group은 위에서 4번에서 쓴 user name과 user group으로 바꾼다. )
<VirtualHost *:80>
ServerName localhost
WSGIDaemonProcess flaskApp user=user_name group=user_group threads=5 maximum-requests=10
WSGIScriptAlias /hi /var/www/flask/wsgi/mod.wsgi
DocumentRoot /var/www/html
<Directory /var/www/flask>
WSGIProcessGroup flaskApp
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
WSGIScriptAlias / 에서 WSGIScriptAlias /[실행 할 경로]
DocumentRoot /var/www/flask 에서 DocumentRoot /var/www/html
15. 접속을 해보기
sudo service apache2 restart
http://123.456.789.123
http://123.456.789.123/hi
성공!!
※추가※
여러 프라스크 를 80번에 쓸려면
$ cd /etc/apache2/sites-available/
$ sudo nano flask.conf
에 밑에 식으로 바꾸면 더 잘된다.
<VirtualHost *:80>
ServerName localhost
WSGIDaemonProcess {프로세스 그룹} user={유저이름} group={그룹} processes=1 threads=5
WSGIDaemonProcess {프로세스 그룹1} user={유저이름} group={그룹} processes=1 threads=5
WSGIScriptAlias /lunch /var/www/flask/lunch/wsgi/mod.wsgi process-group={프로세스 그룹} application-group=%{GLOBAL}
WSGIScriptAlias /lunch1 /var/www/flask/lunch1/wsgi/mod.wsgi process-group={프로세스 그룹1} application-group=%{GLOBAL}
DocumentRoot /var/www/html
ErrorLog /flask/log/error.log
CustomLog /flask/log/access.log combined
</VirtualHost>