LoginSignup
0
2

More than 3 years have passed since last update.

ApacheでPythonを動作させてInfluxDBのデータを表示

Posted at

はじめに

 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

実行すると管理者として開くことができます。

また、「コマンドを打つのが面倒くさい!」という方は下記の画像のように検索して、「管理者として実行」を押してもらえば同じ結果が得られます。
スクリーンショット (6).png

実行できたら、カレントディレクトリを下記の画像のようにC:\Apache24\binに設定します。
スクリーンショット (9).png

ここで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\confhttpd.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スクリプト作成・実行

 まずは簡単な表示ができるかの確認ということで、簡素なスクリプトを書いて実行してみます。

hello.py
#!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が表示されれば成功です。

スクリーンショット (17).png
こんなのが表示されれば成功です。

InfluxDBのデータを取得して出力

 InfluxDBのデータをPythonで取得するためにはinfluxdbモジュールを使用します。標準ではインストールされていないため、ターミナルからpipでインストールする必要があります。

pip install influxdb

学内や社内のネットワークをお使いの方はプロキシサーバーを指定する必要があるかもしれません。その場合は、

pip install influxdb --proxy="プロキシサーバー:ポート"

としてやれば大丈夫です。

それでは実際にInfluxDBの値を取得してブラウザ上で表示させてみます。先ほど使用したhello.pyを書き換えてみました。

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>")

これを実行するとブラウザでは以下のように表示されました。
スクリーンショット (22).png
ちゃんと改行の<br>も有効になっています。

最後に

 ミスがないように実行した手順をそのまま書いたつもりですが、もし指摘やアドバイス等がありましたら遠慮なく言って頂けるとありがたいです。Qiitaに投稿したのは初めてですが、これくらいの文でも結構書くの大変ですね...

参考

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2