#はじめに
Apache上でPythonを動作させるにあたって色々と苦労したので忘却録も兼ねての投稿になります。まだまだ初心者ですので、至らない点、アドバイス等がありましたら遠慮なく指摘して頂けるとありがたいです。
#概要
- Apache上でPythonを動かすための手順
- PythonでInfluxDBにアクセスして、取得したデータをブラウザに表示
#環境
- Windows 10
- Python 3.8.0
- Apache 2.4
- InfluxDB 1.7
#Apacheインストール準備
Apacheインストーラーは以下のサイトからダウンロードできます。
Apache Lounge : https://www.apachelounge.com/download/
zip形式ファイルを解凍すると中にApache24
というファイルがあると思いますので、任意のディレクトリ(今回はCドライブ直下)に配置します。
#Apacheインストール
Apacheのインストールはコマンドプロンプトで行います。**そうなんです、あの黒い画面でやるんです。**管理者として開く必要がありますので、起動したら以下のコマンドを入力してください。
powershell start-process cmd -verb runas
実行すると管理者として開くことができます。
また、「コマンドを打つのが面倒くさい!」という方は下記の画像のように検索して、「管理者として実行」を押してもらえば同じ結果が得られます。
実行できたら、カレントディレクトリを下記の画像のようにC:\Apache24\bin
に設定します。
ここでhttpd -k install
を入力することでApacheのインストールは完了です。
今後はこの画面でコマンドを入力して、起動、停止、再起動を行います
起動:httpd -k start
停止:httpd -k stop
再起動:httpd -k restart
ブラウザでhttp://localhost
を入力して、**It works!**と表示されればOKです。
#ApacheでPythonを処理
Apacheのhtdocs
に.py
ファイルを配置し実行してもデフォルトではPythonを処理してくれません。処理がされないためスクリプトがただのテキストとして返ってきます。そのため、設定ファイルの書き換えやPythonスクリプト自体に少し手を加える必要があります。
##httpd.confの書き換え##
C:\Apache24\conf
にhttpd.conf
というファイルがあるので、それを開き、下記のように書き換えます。
#LoadModule cgi_module modules/mod_cgi.so
↓
LoadModule cgi_module modules/mod_cgi.so
Options Indexes FollowSymLinks
↓
Options Indexes FollowSymLinks ExecCGI
#AddHandler cgi-script .cgi
↓
AddHandler cgi-script .cgi .py
完了したらApacheを再起動してください。
##Pythonスクリプト作成・実行##
まずは簡単な表示ができるかの確認ということで、簡素なスクリプトを書いて実行してみます。
#!C:/Users/"ユーザー名"/AppData/Local/Programs/Python/Python37/python.exe
# -*- coding: utf-8 -*-
print("Content-Type: text/html;\n")
print("<h1>hello</h1>")
1行目の#!C:/Users/"ユーザー名"/AppData/Local/Programs/Python/Python37/python.exe
では、Apache上で動作させるPythonを指定しています。お使いのPCにインストールされているPythonまでのパスを通してください。これがないとPythonを処理することができないので必ず書いてください。
今回はただのテキストとして返ってきた場合と区別しやすいように<h1></h1>
タグをつけてみました。
このスクリプトを実行して、太文字でhello
が表示されれば成功です。
#InfluxDBのデータを取得して出力
InfluxDBのデータをPythonで取得するためにはinfluxdb
モジュールを使用します。標準ではインストールされていないため、ターミナルからpip
でインストールする必要があります。
pip install influxdb
学内や社内のネットワークをお使いの方はプロキシサーバーを指定する必要があるかもしれません。その場合は、
pip install influxdb --proxy="プロキシサーバー:ポート"
としてやれば大丈夫です。
それでは実際にInfluxDBの値を取得してブラウザ上で表示させてみます。先ほど使用したhello.py
を書き換えてみました。
#!C:/Users/ユーザー名/AppData/Local/Programs/Python/Python37/python.exe
# -*- coding: utf-8 -*-
from influxdb import InfluxDBClient
print("Content-Type: text/html;\n")
client = InfluxDBClient(
host='ホスト名',
port=8086,
username='root',
password='root',
database='データベース名'
)
dbq = client.query("select * from test_measurement")
for i in dbq:
for n in i:
print(n)
print("<br>")
これを実行するとブラウザでは以下のように表示されました。
ちゃんと改行の<br>
も有効になっています。
#最後に
ミスがないように実行した手順をそのまま書いたつもりですが、もし指摘やアドバイス等がありましたら遠慮なく言って頂けるとありがたいです。Qiitaに投稿したのは初めてですが、これくらいの文でも結構書くの大変ですね...
#参考