Apache と WSGI の連携
Apache と WSGI の連携設定
Flask のアプリを Apache の mod_wsgi から動作させる設定。Python2.6 の CentOS 6 くらいです。古めかしいですね。
workon XXXX
sudo easy_install pip
sudo pip install flask
sudo yum install httpd-devel python-devel
cd /usr/local/src
sudo wget http://modwsgi.googlecode.com/files/mod_wsgi-3.3.tar.gz
sudo tar xzvf mod_wsgi-3.3.tar.gz
cd mod_wsgi-3.3
sudo ./configure --with-apxs=/usr/sbin/apxs --with-python=/usr/bin/python
sudo make
sudo make install
ls /etc/httpd/modules
vim /var/www/flask.wsgi
なかみ
# -*coding:utf-8 -*-
# virtualenv を使う場合
activate_this = '/home/user/.virtualenvs/work_name/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
# Flaskアプリケーショントップのパスをpathに追加
import sys, os
sys.path.append('/home/user/flask_apl')
# sys.pathで追加したアプリケーションのpythonスクリプトを指定。
# ここでは、app.py 内に「app = Flask(__name__)」があるため、次のように指定。
# モジュール名が main.py であれば from main import app as application などとする。
from app import app as application
ローカルで動作させてたサーバスクリプトをサーバにアップ
sudo vim /etc/httpd/conf/httpd.conf
なかみ
LoadModule wsgi_module modules/mod_wsgi.soa
WSGISocketPrefix /var/run/wsgi
<VirtualHost *:80>
ServerName example.com
WSGIDaemonProcess example.com user=apache group=apache threads=5
WSGIScriptAlias / /var/www/flask.wsgi←WSGIスクリプトがあるところ!権限にきをつける
WSGIScriptReloading On
<Directory /home/foo/flask>←実際に動作するサーバスクリプトがあるところ!これも権限注意。
WSGIProcessGroup example.com
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
ログ周りちゃんとしとかんと、なんで動いてないのかよくわからなくなってしまう。 print の標準出力は /var/log/httpd/error_log に出力されてました。 /var/log も権限注意。
WSGIScriptAlias ほそく
http://hogehoge/api/ を wsgiアプリケーションに振り分けたいときは、
WSGIScriptAlias /api/ /var/www/flask.wsgi
ではなく、
WSGIScriptAlias /api /var/www/flask.wsgi
とすること。
こうすれば、
- @app.route('/') → http://hoge/api/
- @app.route('/abc') → http://hoge/api/abc
となる。
あと、同じ VirtualHostディレクティブで複数のWSGIアプリケーションを動作させるときは、
WSGIScriptAlias /api1 /var/www/flask1.wsgi
WSGIScriptAlias /api2 /var/www/flask2.wsgi
こんな感じにするといいです。