Ubuntu 16.04 환경에서 패키지 매니저를 최대한 많이 이용하여 설치하는 방법을 소개함
pip install Flask
pip install Flask-Cors
sudo apt install libapache2-mod-wsgi-py3
wsgi란 Web Server Gateway Interface를 의미하는데, Apache나 Nginx 등의 웹서버에서 Python 애플리케이션을 서비스로 구동시킬 수 있는 인터페이스임
여기서는 Apache에서 mod_wsgi를 이용하여 Flask 애플리케이션을 서비스로 구동하는 것에 해당함
<VirtualHost *:80>
<IfModule wsgi_module>
WSGIDaemonProcess Flask앱이름 user=사용자아이디 group=그룹아이디 threads=4
WSGIScriptAlias /flask /Flask_앱의_경로/index.wsgi
<Directory /Flask_앱의_경로>
WSGIProcessGroup Flask앱이름
WSGIApplicationGroup %{GLOBAL}
WSGIScriptReloading On
Require all granted
</Directory>
</IfModule>
</VirtualHost>
<VirtualHost *:80>
...
</VirtualHost>
<VirtualHost *:443>
...
</VirtualHost>
<IfModule wsgi_module>
WSGIDaemonProcess myflaskapp user=사용자아이디 group=그룹아이디 threads=4
WSGIScriptAlias /flask /...Flask 앱의 경로.../index.wsgi
<Directory /...Flask 앱의 경로...>
WSGIProcessGroup myflaskapp
WSGIApplicationGroup %{GLOBAL}
WSGIScriptReloading On
Require all granted
</Directory>
</IfModule>
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
from flask import Flask, jsonify, request
from flask_cors import CORS
app = Flask(__name__)
app.config.from_object(__name__)
CORS(app, resources={r"/*": {"origins": "*"}})
@app.route("/check", methods=["GET"])
def check():
return jsonify("ok")
http://localhost/flask/check로 접근 가능하도록 라우팅 설정
#!/usr/bin/env python
import logging
import sys
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0, 'Flask 앱의 경로')
sys.path.insert(1, '사용하고 있는 파이썬 런타임의 site-packages 경로')
from index import app as application
index.py라는 파일에서 Flask 인스턴스인 app을 import하겠다는 의미임
index.py의 다음 코드와 관련 있음
app = Flask(__name__)
ImportError: No module named 'flask'
Flask 애플리케이션의 코드를 변경해도 웹서비스에 반영되지 않으므로 Apache를 재실행하거나 wsgi 파일의 타임스탬프를 업데이트하여 Flask 애플리케이션에 변경이 생겼음을 Apache에게 알려주는 작업이 필요함
sudo service apache2 restart
touch index.wsgi
Flask 애플리케이션의 코드 뿐만이 아니라 Flask 애플리케이션이 관리하는 템플릿 파일이나 정적 리소스에 변경이 생길 때마다 Flask 애플리케이션에 변경이 생겼음을 Apache에게 알려줘야 함