Flask製アプリケーションをCentOS7+Apache+WSGIで動かす
想定環境
Pythonの導入(pyenv)
pyenvを利用したPythonの導入については過去記事を参照。
今回はPython 3.6.2が導入された状態からスタートします。
Apacheの導入
Apache HTTPサーバについてはyumでインストールした状態だとします。
普通に yum install httpd
としてインストールします。
WSGIについて
Wikipediaいわく、WSGIは、WebサーバとPython製Webアプリを接続するためのインターフェース定義らしいです。
mod_wsgiの導入
ApacheでWSGIするためのモジュールが mod_wsgi
です。
普通にyumでインストールすることもできますが、
その場合使用されるPythonがyumでインストールしているもの(Python 2.7.x)になってしまうみたいです。
ですので今回はソースからコンパイルして導入します。
まずは公式サイトから最新版を落としてきます。今回は mod_wsgi-4.5.18.tar.gz
をダウンロードしました。
今回は /usr/local/mod_wsgi-4.5.18
に展開して、ディレクトリに入ります。
$ tar mod_wsgi-4.5.18.tar.gz $ mv mod_wsgi-4.5.18 /usr/local/ $ cd /usr/local/mod_wsgi-4.5.18
./configure --with-python=/usr/local/pyenv/shims/python make make install
これでとりあえずmod_wsgiが手に入りました。ファイルは /usr/lib64/httpd/modules/mod_wsgi.so
に作られています。
しかしApacheで読み込むようになっていないので、設定を追加します。
CentOS 7では /etc/conf.module.d
の下にモジュール関係の設定ファイルを置くっぽいです。
vim /etc/conf.module.d/10-python.py # 10-python.pyでmod_wsgi.soを読み込むようにする LoadModule wsgi_module /etc/httpd/modules/mod_wsgi.so
WSGI用のファイルを作成する
WSGI用のファイルを作成します。
/var/www/html
にhtmlファイルがあるとして、Flask製のアプリケーションは /var/www/flask_test_app
に配置します。
WSGIのファイルとして、 /var/www/flask_test_app/adapter.wsgi
を作成します。
$ vim /var/www/flask_test_app/adapter.wsgi # adapter.wsgiは以下のように編集 # coding: utf-8 import sys sys.path.insert(0, '/var/www/flask_test_app') #from flask_test import app as application from [Flaskアプリの*.pyファイル] import app as application
[Flaskアプリの*.pyファイル] については、 たとえば作成したFlaskアプリのエントリポイントが flask_test_app.py だった場合は flask_test_app となります。
ApacheでWSGIを設定する
作成した adapter.wsgi をApacheに設定します。
$ vim /etc/httpd/conf.d/flask_test_app.conf # flask_test_app.confを以下のように編集 WSGIScriptAlias /flask_test_app /var/www/flask_test_app/adapter.wsgi <Directory "/var/www/flask_test_app"> order deny,allow Allow from all </Directory>
これで動くはず
最後はかなり雑でしたがこれで動くはずです。
うまくいかない場合は大体 /var/log/httpd/error_log
を見れば大体出ているハズ。