가상환경에서 웹프레임워크의 작동
Flask 를 Apache 웹서비스 하에서 구동시킬때 필요한 설정을 알아보겠습니다. Flask는 conda 가상환경에서 작동합니다. 구체적인 설치방법은 다루지 않고 세부설정에 필요한 파일경로의 의미에 대해서 알아보겠습니다.
mod_wsgi module
우리의 일차적인 목적은 apache 웹서비스에 mod_wsgi module을 추가하는 것입니다. 설정과 관련한 사항을 남깁니다. 먼저 지금 웹서비스 운영환경은 다음과 같습니다.
- 웹페이지는 apache2를 이용하여 서비스를 하고 있습니다.
- /var/www/html 이 웹페이지 root 폴더입니다.
- Apache 설정 파일은 /etc/apache2 에 있습니다. 우리 추가적으로 작성해야할 설정파일이 있는데 위치는 /etc/apache2/sites-available 입니다.
- 가상환경은 miniconda3 로 만들어졌고 vis 라는 이름의 가상환경을 이용할 예정입니다.
- 가상환경 vis 의 root 폴더는 /home/user/miniconda3/envs/vis 입니다. 그리고 파이썬 3.12를 사용하고 있습니다. 이 말은 가상환경 vis의 파이썬 패키지 경로가 '/home/user/miniconda3/envs/vis/lib/python3.12/site-packages' 이라는 뜻입니다.
- flask 의 root 폴더는 /home/user/work/vis 입니다. 여기는 flask 구동파일인 app.py 파일과 templates 폴더, static 폴더가 있습니다. /home/user/work/vis 는 flask 애플리케이션 경로가 됩니다.
하고자 하는 일은 다음과 같습니다.
- 가상환경 vis 에서 flask 웹프레임워크를 구동합니다. flask를 통해 파이썬 패키지를 미리 설치해둔 vis 환경에서 여러 가지 파이썬 시각화 결과물을 만들고자 합니다.
- flask를 통해 웹페이지를 생성하고자 하는 곳은 웹페이지 root 폴더 아래 crypto 입니다. 즉, 웹페이지 기준으로는 /crypto 에 flask 서비스를 구동하고자 합니다. (사용자가 웹페이지의 crypto 링크로 접근하였을때 flask는 맞춤형 웹페이지를 만듭니다. )
먼저 가상환경 vis에서 mod_wsgi 모듈을 설치합니다. mod_wsgi은 웹서비스(apache)와 애플리케이션(flask)를 연결해주는 미들웨어입니다.
#(bash)
pip install mod_wsgi
다음 mod_wsgi-express 실행파일의 위치를 찾습니다.
#(bash)
which mod_wsgi-express
그러면 설치경로를 알 수 있습니다. 여기서는 home/user/miniconda3/envs/vis/bin/mod_wsgi-express 로 확인했습니다. 이 경로에서 다음 명령을 실행합니다.
#(bash)
home/user/miniconda3/envs/vis/bin/mod_wsgi-express install-module
이 명령을 실행하면 실제 wsgi_module을 로딩해야하는 경로와 mod_wsgi의 설정 경로를 얻을 수 있습니다. 이를 apache 설정에 반영해주어야 합니다. 여기서는 아래와 같은 두 개의 경로를 얻었습니다.
#(bash 출력값)
LoadModule wsgi_module "/usr/lib64/httpd/modules/mod_wsgi-py312.cpython-312-x86_64-linux-gnu.so"
WSGIPythonHome "/home/jeon/miniconda3/envs/vis"
이 경로는 apache가 module을 로드하는 설정 경로에 반영시켜줍니다. module을 로드하는 설정 경로는 /etc/apache2/mods-available 이며 파일은 wsgi.load 입니다.
#(apache 설정파일)
LoadModule wsgi_module "/usr/lib64/httpd/modules/mod_wsgi-py312.cpython-312-x86_64-linux-gnu.so"
WSGIPythonHome "/home/jeon/miniconda3/envs/vis"
이 설정을 통해서 아파치에게 올바른 경로 mod_wsgi module 을 추가할 수 있습니다.
Apache configuration
아피치가 시작할때 WSGI 데몬프로세서를 실행하는 올바른 경로를 알려주고, 파이썬을 실행할 수 있는 권한을 폴더에 주는 설정을 합니다. 우리는 /etc/apache2/sites-available 에 myflaskapp.conf 파일을 아래와 같이 추가하였습니다. 아래는 경로에 대한 설명입니다.
- python-home: 가상환경의 root 경로입니다.
- python-path: Flask application 의 root 경로입니다.
- WSGIScriptAlias 의 /crypto 는 웹페이지에서 flask 서비스가 위치하는 곳이며 /home/user/work/vis/myflaskapp.wsgi 는 이후에 설명할 myflaskapp.wsgi 설정파일의 위치입니다.
#(bash)
<VirtualHost *:80>
ServerName http://ranking.uos.ac.kr
ServerAdmin jj.jeon@uos.ac.kr
WSGIDaemonProcess myflaskapp python-home=/home/user/miniconda3/envs/vis python-path=/home/user/work/vis
WSGIScriptAlias /crypto /home/user/work/vis/myflaskapp.wsgi
<Directory /home/user/work/vis>
Require all granted
</Directory>
Alias /static /home/user/work/vis/static
<Directory /home/user/work/vis/static>
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/flaskapp_error.log
CustomLog ${APACHE_LOG_DIR}/flaskapp_access.log combined
</VirtualHost>
Flask 설정
/home/user/work/vis 에 myflaskapp.wsgi 파일을 아래와 같이 작성합니다.
#(nano)
import sys
import os
# 가상 환경의 Python 패키지 경로 추가
venv_path = '/home/user/miniconda3/envs/vis/lib/python3.12/site-packages'
sys.path.insert(0, venv_path)
# Flask 애플리케이션 경로 추가
sys.path.insert(0, '/home/user/work/vis')
from app import app as application