min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

RaspberryPi 3 cgi-binでpython3 スクリプトを動かす

 

せっかく作った Python 3 スクリプト。コンソールだけで動かすのはもったいないから、WebでUIを作って、iPhoneからでも実行できるようにしたい。

ーーー

RaspberryPi3 で apache を動かして、cgi-bin の Python3 を叩けるようにする。Apache はインストール済みの前提。ポートは8083に変えてある。

$ cd /etc/apache2/

$ cat ports.conf

f:id:min117:20170730113429p:plain

http://自分のサーバアドレス:8083 にアクセス。

f:id:min117:20170730113243p:plain

cgi-bin を作っていく。参考はこのへん。

qiita.com

まずは、UserDirの有効化 なるものが必要らしい。a2enmod fedoraには無いコマンドだ。Debian系だけなのか。

$ sudo a2enmod userdir

f:id:min117:20170730120859p:plain

次に Webアクセスした時に最初に表示されるフォルダ(DocumentRoot)を変更する。

(変更前)/var/www/html/

(変更後)/home/pi/Desktop/public_html/

f:id:min117:20170730121601p:plain

設定ファイルで DocumentRoot の記述を変える。

$ sudo vim /etc/apache2/sites-available/000-default.conf

f:id:min117:20170730121606p:plain

DocumentRoot の行 と、<Directory で始まる行 の記述を変更する。

f:id:min117:20170730121611p:plain

サービスを再起動。

$ sudo systemctl restart apache2.service

$ sudo systemctl daemon-reload

f:id:min117:20170730122112p:plain

$ sudo ln -s /etc/apache2/mods-available/cgi.load /etc/apache2/mods-enabled/cgi.load

f:id:min117:20170730123324p:plain

$ sudo vim /etc/apache2/sites/available/000-default.conf

f:id:min117:20170730123328p:plain

Include conf-available/serve-cgi-bin.conf」のコメントを外して有効化する。

↓ この例では36行目 

f:id:min117:20170730123333p:plain

$ sudo vim /etc/apache2/mods-available/mime.conf

f:id:min117:20170730123400p:plain

ハンドラのコメントを外して .cgi と .py を有効化する。

(変更前)#AddHandler cgi-script .cgi

(変更後)AddHandler cgi-script .cgi .py

↓ この例だと220行目

f:id:min117:20170730123406p:plain

$ sudo vim /etc/apache2/conf-available/serve-cgi-bin.conf

f:id:min117:20170730123414p:plain

ScrpitAlias の行と、<Directory の行 を変更する。

↓ この例だと12行目 と 14行目

f:id:min117:20170730123418p:plain

サービスを再起動する。

$ sudo service apache2 restart

f:id:min117:20170730123424p:plain

cgi-bin フォルダを作る。

$ mkdir cgi-bin

f:id:min117:20170730124612p:plain

テストスクリプト test.py を置いてみる。

f:id:min117:20170730124837p:plain

アクセスして実行を確認。

http://Pi3IPアドレス:8083/cgi-bin/test.py

f:id:min117:20170730125030p:plain

動いてしまった。cgi-bin は、実行するのにパーミッションの設定がかなり面倒なはずなのに。以下の状態で実行できた。

cgi-bin 所有者がpiのまま(rootでない)

cgi-bin パーミンションは drwxr-xr-x のまま

Debian系だからなのか?

DocumentRootを /var/www から移したからなのか?

たぶん後者。もう少しスクリプトを置いて検証する。