WordPress (Ubuntu 上)で Python プログラムの実行結果を表示

1. エグゼクティブサマリー

Ubuntu 上の WordPress 環境において,Python プログラムの実行結果を Web ブラウザに表示する方法を説明する.Python の Web フレームワークである Flask でアプリケーションを作成し,mod_wsgi を介して Apache2 上で動作させる.

WordPress のインストールが終わっていることが前提条件である. Ubuntu での WordPress のインストール手順は, 別ページで説明している.

2. 前準備(必要ソフトウェアの入手)

Python 3 処理系および apache2-dev のインストール(Ubuntu 上) [クリックして展開]

端末を開き,以下のコマンドで Python 3 処理系および apache2-dev をインストールする.

# パッケージリストの情報を更新
sudo apt update
sudo apt -y install python3 python3-dev python3-pip
sudo apt -y install apache2-dev

mod_wsgi,mod_wsgi-httpd のインストール [クリックして展開]

pip3 を使用して mod_wsgi および mod_wsgi-httpd をインストールする.

sudo pip3 install mod_wsgi
sudo pip3 install mod_wsgi-httpd

それぞれの実行後に,エラーメッセージが出ていないことを確認する.

Flask および関連パッケージのインストール [クリックして展開]

以下のコマンドで python3-flask および python3-simplejson をインストールする.

# パッケージリストの情報を更新
sudo apt update
sudo apt -y install python3-flask python3-simplejson

Flask のバージョンを確認する.

python3 -c "import flask; print( flask.__version__ )"

3. 実行のための準備とその確認手順(Ubuntu 前提)

3.1 プログラムファイルの準備

第5章に掲載するソースコードをテキストエディタに貼り付け,以下のファイル名で保存する(文字コード:UTF-8).

3.2 実行コマンド

端末で以下を実行し,Flask の開発サーバーで動作確認を行う.

python3 /var/www/html/added/app/app.py

確認後,「python3 /var/www/html/added/app/app.py」は CTRL + C で終了する.

3.3 動作確認チェックリスト

確認項目期待される結果
Web ブラウザで localhost:5000 を開く「Hello, World!」と表示される
Web ブラウザで localhost:5000/time を開く現在時刻が表示される
Apache2 再起動後に Web ブラウザで http://localhost/added を開くFlask アプリケーションの出力が表示される

4. 概要・使い方・実行上の注意

4.1 Flask アプリケーションの概要

app.py は2つのルートを持つ.ルート / にアクセスすると「Hello, World!」を返し,ルート /time にアクセスすると現在時刻を返す.ソースコードは第5章に掲載している.

4.2 mod_wsgi.so のロードと Apache2 の設定

Flask アプリケーションを Apache2 で動作させるため,wsgi ファイルを作成する./var/www/html/added/app/app.wsgi として保存する.

* 「as application」は変更しないこと.

次に,/etc/apache2/sites-available/added-wordpress.conf を編集する.以下の太字部分を追記する.


LoadModule wsgi_module /usr/local/lib/python3.6/dist-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so
WSGIPythonPath "/usr/lib/python3/dist-packages:/usr/local/lib/python3/dist-packages"

<VirtualHost *:80>
     ServerAdmin webmaster@localhost
     DocumentRoot /var/www/html/added
     ServerName hoge-client.com
     ServerAlias www.hoge-client.com

     WSGIScriptAlias / /var/www/html/added/app/app.wsgi

     <Directory /var/www/html/added>
        Options +FollowSymlinks
        AllowOverride All
        Require all granted
     </Directory>

     ErrorLog ${APACHE_LOG_DIR}/added-error.log
     CustomLog ${APACHE_LOG_DIR}/added-access.log combined
</VirtualHost>

4.3 Apache2 の再起動と動作確認

/etc/apache2/sites-available/added-wordpress.conf を書き換えたので,Apache2 を再起動する.

sudo systemctl restart apache2.service

Web ブラウザで http://localhost/added を開き,動作を確認する.

5. ソースコード

5.1 app.py

以下を/var/www/html/added/app/app.pyとして保存する.

# coding:utf-8
from flask import Flask
from datetime import datetime
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

@app.route('/time')
def show_time():
    return 'Current time: ' + datetime.now().strftime('%Y-%m-%d %H:%M:%S')

if __name__ == '__main__':
    app.run()

Web ブラウザで localhost:5000 を開く.「Hello, World!」と表示されれば動作している.続けて localhost:5000/time を開くと,現在時刻が表示される.

5.2 app.wsgi

以下を/var/www/html/added/app/app.wsgiとして保存する.

# coding:utf-8
import sys
sys.path.insert(0, '/var/www/html/added/app')
from app import app as application

6. まとめ

Flask による Web アプリケーション作成

Flask を使用して Python の Web アプリケーションを作成した.ルート / で定型文を,ルート /time で現在時刻を返す.

mod_wsgi による Apache2 連携

mod_wsgi および mod_wsgi-httpd をインストールし,Apache2 の設定ファイルに LoadModule ディレクティブと WSGIScriptAlias を追記することで,Flask アプリケーションを Apache2 上で動作させた.

WSGI ファイルの役割

app.wsgi は Flask アプリケーションと Apache2 を仲介するファイルである.「as application」の記述は変更しないこと.

WordPress 環境との統合

WordPress 環境において,VirtualHost の設定を編集し,Python プログラムの実行結果を Web ブラウザに表示する構成を実現した.

動作確認の手順

Flask の開発サーバー(localhost:5000)での確認と,Apache2 再起動後(http://localhost/added)での確認の2段階で動作を検証する.