CentOS 6.7でWSGIアプリケーションを動かす方法 [まとめ編1]

これまで行ってきた、CentOS 6.7上でPythonウェブアプリケーション(WSGIアプリ)を動かすための試行錯誤をまとめました。

突発的に環境変数の設定を行ったりしているため、少々不格好ですが、「一応」動きます。
「一応」の枕詞を取りたい人は、各自精進してください。

(環境)

OS Apache mod_wsgi
CentOS 6.7(64ビット版) 2.4.20 4.5.2

1. Apache2をソースインストールします。

2. Python3をソースインストールします。
ただし、コンフィギュアオプションに--enable-sharedをつけます。
したがって、コンパイル&インストール方法は以下のようになります。

$ tar xvzf Python-3.5.1.tgz
$ cd Python-3.5.1
$ ./configure --enable-shared
$ make
$ sudo make install
$ sudo ldconfig

※sudo ldconfigをやらないと、
python3: error while loading shared libraries: libpython3.5m.so.1.0: cannot open shared object file: No such file or directory
というエラーメッセージが出る。

3. mod_wsgiをインストールします。

$ curl -L -O https://github.com/GrahamDumpleton/mod_wsgi/archive/4.5.2.tar.gz
※最新バージョンはこちらのサイトで確認する。
$ cd mod_wsgi-4.5.2
$ ./configure --with-python=/usr/local/bin/python3 \
--with-apxs=/usr/local/apache/bin/apxs
$ make
$ sudo make install

これで、/usr/local/apache/modulesの下にmod_wsgi.soが作られます。

4. httpd.confを編集します。

LoadModule wsgi_module modules/mod_wsgi.so
WSGIScriptAlias /wsgi /usr/local/apache/cgi-bin/hello.py

ここでは、/usr/local/apache/cgi-binディレクトリの中にhello.pyというWSGIアプリケーションプログラムを置き、http://ドメイン名/wsgiというURLでアクセスすることを想定しています。

5. Pythonプログラムを書きます。

(ファイル名) python.py

def application(environ, start_response):
    start_response("200 OK", [("Content-type", "text/plain;charset=utf-8")])

    return ['こんにちは、WSGIアプリケーション。'.encode('UTF-8')]

# 以下のifブロックは、開発環境下で動かすときには必要だが、
# Apache2で動かすときには特に必要はない。
if __name__ == '__main__':
    from wsgiref.simple_server import make_server

    httpd = make_server('', 8080, hello)
    httpd.serve_forever()

6. Apache2を再起動し、http://ドメイン名/wsgiにアクセスする。

Pythonプログラミング物語 © 2016 Frontier Theme