AWS / PHP / Python ちょいメモ

amazon web service , PHP, Python を使ったときのメモ。日本語でググってもわからなかった事を中心に。

mod_wsgi は pip でも提供ありなのかぁ

今回 Ubuntu 14.04 に PPA を使って Python 3.5.x を導入したところ、PPAには mod_wsgi がないことに気づき対応策を調べた。

結果 pip で mod_wsgi が提供されてるといううれしい事実を発見し、無事に環境構築完了。

Ubuntu 14.04 だと オフィシャルのリポジトリでは Python3.4 が提供されてます

手順

インストール by pip
  1. 次のパッケージが apt でインストールされてることを確認
    • apache2
    • apache2-dev (apxs : APache eXtenSion tool が インストール時に必要)
  2. pip3 でインストール
    • pip3 install mod_wsgi
インストール確認

pip3 にて:

$ pip3 show mod-wsgi
Name: mod-wsgi
Version: 4.5.14
Summary: Installer for Apache/mod_wsgi.
Home-page: http://www.modwsgi.org/
Author: Graham Dumpleton
Author-email: Graham.Dumpleton@gmail.com
License: Apache License, Version 2.0
Location: /usr/local/lib/python3.5/dist-packages
Requires: 

同梱の mod_wsgi-express にて:

$ mod_wsgi-express start-server
Server URL         : http://localhost:8000/
Server Root        : /tmp/mod_wsgi-localhost:8000:1000
Server Conf        : /tmp/mod_wsgi-localhost:8000:1000/httpd.conf
Error Log File     : /tmp/mod_wsgi-localhost:8000:1000/error_log (warn)
Request Capacity   : 5 (1 process * 5 threads)
Request Timeout    : 60 (seconds)
Startup Timeout    : 15 (seconds)
Queue Backlog      : 100 (connections)
Queue Timeout      : 45 (seconds)
Server Capacity    : 20 (event/worker), 20 (prefork)
Server Backlog     : 500 (connections)
Locale Setting     : ja_JP.UTF-8
インストール to Apache2

同梱の mod_wsgi-express を使って、Apache2のモジュールフォルダにインストールしてくれます (要root権限)。表示されてるメッセージは、次のように apache.conf に記述せよってことみたいです。

$ sudo mod_wsgi-express install-module
LoadModule wsgi_module "/usr/lib/apache2/modules/mod_wsgi-py35.cpython-35m-x86_64-linux-gnu.so"
WSGIPythonHome "/usr"

Ubuntu 14.0.4 + Apache 2.4 の場合 /etc/apache2 配下には mods-enabled , mods-available フォルダがあります。

そこで次のようにファイルを作成。

  • cp mods-available/wsgi.conf mods-available/wsgi-py3.5.conf
  • cp mods-available/wsgi.load mods-available/wsgi-py3.5.load
  • vi mods-available/wsgi-py3.5.load
    • 前述の LoadModule wsgi_modue ... に書き換え
  • モジュールを入れ替え
    • a2enmod wsgi-pi3.5
    • a2dismod wsgi : 古い Python2用のもの
  • 再起動
    • apachectl restart
  • モジュールの読み込み確認
    • apache2ctl -M

メモ

apxs がない時にでたエラー。このツールの存在、初めて知りました。

      File "/tmp/pip-build-ts8zrdpw/mod-wsgi/setup.py", line 164, in <module>
        'missing Apache httpd server packages.' % APXS)
    RuntimeError: The 'apxs' command appears not to be installed or is not executable. Please check the list of prerequisites in the documentation for this package and install any missing Apache httpd server packages.

公式

かなり親切にかかれていて Apache 2.2 / 2.4 / はたまた RedHat/CentOS の SCL を利用している場合など、事細かに説明があります。

参考

あれこれ順を追いますが、こちらのAnswerと、ほぼ同じであることが後にわかりました。。

こちら参考にさせてもらいました。