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

#はじめに
　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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416050/4b50e693-2022-0ee8-3a04-27f06afc2ff1.png)

実行できたら、カレントディレクトリを下記の画像のように`C:\Apache24\bin`に設定します。
![スクリーンショット (9).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416050/7ebf91c8-9e93-c024-4591-c7c806d9431b.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\conf`に`httpd.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416050/fe957c52-284b-6098-7d07-d2b086dd17c3.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416050/93da238d-a6b8-2274-8966-0b9bf0b0f354.png)
ちゃんと改行の`<br>`も有効になっています。

#最後に
　ミスがないように実行した手順をそのまま書いたつもりですが、もし指摘やアドバイス等がありましたら遠慮なく言って頂けるとありがたいです。Qiitaに投稿したのは初めてですが、これくらいの文でも結構書くの大変ですね...
#参考
- [初心者でもできる！Apacheをインストールする方法](https://techacademy.jp/magazine/1846)
- [apacheでpythonを動かすまで](https://qiita.com/crz/items/cdcd356cfeeb708dcc23)
- [InfluxDB Documentation](https://buildmedia.readthedocs.org/media/pdf/influxdb-python/latest/influxdb-python.pdf)