はじめに
ゴールは「mod-wsgiを使用して"Hello World"を描画すること」です。mod-wsgiとは?
Python製WebFramework Djangoを使用する上でも使用します。
前提として以下を行なっているものとします。
環境
OS: Debian 9.0 stretch
Python: 3.6.3
apache2のinstall
apache2をインストールします
sudo apt install -y apache2 apache2-dev
mod-wsgiのinstall
少し注意が必要です。というのも、インストールする方法がapt-getとpipの二通りあるからです。
apt-getの場合、インストールされるのはapache2のlibapache2-mod-wsgiなのですが、こいつは後にコンパイルされたPythonと実行しているPythonの違いによるwarningを吐き出すことになります。
ということで、pipを使ってインストールすることをオススメします。
まず、使用したいpythonのバージョンが選択されているか確認してください
pyenv versions
確認できたら、mod-wsgiのinstall
pip install mod-wsgi
念のために確認
pip freeze | grep wsgi
mod-wsgi==4.6.5
OKです。
apache2の設定
libapache2-mod-wsgiをインストールした場合とは違い、少し設定が必要になります。
pipでのmod-wsgiインストール時に下記のファイルが作成されています。
/home/USERNAME/.pyenv/versions/3.6.3/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so
このファイルをapache2に認識させてあげましょう。
sudo vim /etc/apache2/mods-available/wsgi.load
以下の一行を書き込みます。USERNAMEを置き換えるのを忘れないでください。
LoadModule wsgi_module /home/USERNAME/.pyenv/versions/3.6.3/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so
その後、wsgiを有効化しましょう。
sudo a2enmod wsgi
以下のようなコメントが出ればOKです。
Enabling module wsgi.
To activate the new configuration, you need to run:
systemctl restart apache2
apache2を再起動してください。
sudo service apache2 restart
Apache2の設定
Apache2の設定ファイル群(/etc/apache2/)をいじりますが、念のためにバックアップをしておきましょう。
cd /etc/apache2/sites-available
sudo cp 000-default.conf 000-default.conf.bk
sudo vim 000-default.conf
以下を最後の行に追加します。
ちなみに、vimではG(shift + g)
で最終行に移動しますね。
WSGIScriptAlias /test_wsgi /var/www/html/test_wsgi.py
test_wsgi.pyを作成
上のWSGIScriptAliasで指定したtest_wsgi.pyファイルを作成します。
sudo vim /var/www/html/test_wsgi.py
ファイルの中身は以下の通りにしてください。
def application(environ, start_response):
status = '200 OK'
output = b'Hello World!'
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
apache2のリスタート
上記が完了したらapache2をリスタートします。
sudo service apache2 restart
この後、ドメイン名(またはIP)/test_wsgiにアクセス(Http←気をつけて)するとHello Worldが表示されるはずです。