kuroの覚え書き

96の個人的覚え書き

apache + flask +wsgiで動かす

サーバに上げて運用できそうな感じになってきたのでwwwサーバをapacheに切り替えてみたい。

まずはローカルでテストっと。
なになに最近のOSXはweb共有コントロールパネルがなくなっちゃったから

sudo apachectl start

で手動起動すると。

$ ps aux | grep httpd

おや?起動してない・・・
http://hubfactory.jp/act/1127171
このサイトと同じ状況っぽいので

$ sudo apachectl configtest
Password:
AH00526: Syntax error on line 20 of /private/etc/apache2/extra/httpd-mpm.conf:
Invalid command 'LockFile', perhaps misspelled or defined by a module not included in the server configuration

同じだね。

$ sudo nano /private/etc/apache2/extra/httpd-mpm.conf

LockFile “/private/var/log/apache2/accept.lock”
コメントアウトし、

$ sudo apachectl restart
$ ps aux | grep httpd
kuro             1286   0.1  0.0  2423376    228 s000  R+    9:53AM   0:00.00 grep httpd
_www              1272   0.0  0.0  2458072    872   ??  S     9:52AM   0:00.00 /usr/sbin/httpd -D FOREGROUND
root              1271   0.0  0.0  2450904   4960   ??  Ss    9:52AM   0:00.08 /usr/sbin/httpd -D FOREGROUND

できたね。
http://localhost/
を開くと、お約束の"It works!"が見れた。

このままだと/Library/WebServer/Documents/がドキュメントルートなので、ちょい面倒だから設定を変える。
諸々の設定は
http://tonop.cocolog-nifty.com/blog/2016/02/os-x-1011-el-ca.html
こちらを参考にした。

これで
http://locahost/~kuro/
のようにユーザのディレクトリにアクセスできるようになった。

続いてwsgiのインストール

$ pip3 install mod_wsgi
Collecting mod_wsgi
  Downloading mod_wsgi-4.5.18.tar.gz (2.5MB)
    100% |                 | 2.5MB 604kB/s 
Installing collected packages: mod-wsgi
  Running setup.py install for mod-wsgi ... done
Successfully installed mod-wsgi-4.5.18

簡単にpipで済ませてしまおう。

さて、今回まずはテスト用に

flasktest
    +-template
   |      +-index.html
   |        +-layout.html
    +-sample.py
    +-sample.wsgi

こういう感じの構成で用意した。
sample.wsgiの中身は

import sys, os
sys.path.append('~/kkuro/Sites/flasktest')

from sample import app as application

これだけで、sample.pyは特に手を加えない。
wsgiが入っていないと
http://localhost:5000/
で動作することを確認したら、おもむろに
http://[サーバのアドレス]:5000/でアクセス!

できた。
このままではポート5000で占領してしまうのでポートのセッティングとディレクトリを調整してやればいけるはず


っと思ったがなんかおかしい。ポート5000で開いているってことはapacheを介していないってことだ。これはflaskで直接動いているわ。 ちょっとみなおす。

おかしい原因はpipでのインストールにありそうな気配がする(今回の環境はMacOSX)ので一旦
pip3 uninstall mod_wsgi
として、改めてbrewでインストールすることにする。
http://qiita.com/arc279/items/df28bd100cc2f72fad3c

なるほど

You must manually edit /etc/apache2/httpd.conf to include
  LoadModule wsgi_module /usr/local/opt/mod_wsgi/libexec/mod_wsgi.so

とな
/private/etc/apache2/httpd.conf

Include /private/etc/apache2/other/*.conf
のコメントを外しておいたので
/private/etc/apache2/other/python.conf

LoadModule wsgi_module /usr/local/opt/mod_wsgi/libexec/mod_wsgi.so
ScriptAlias /flasktest /Users/kuro/Sites/flasktest/sample.py

とかくと良さそうだ。