未分類

前回

に引き続き、VALUE SERVERからConoHa VPSに移行して動かなくなってたところを直していきます。今回はコレですね。

bottleです。Hello, worldしただけなんですけどね。VALUE SERVERではpython3自体がインストールされていたので、Apacheのmod_cgiを使い、CGIでpythonを起動して動かしていました。

これを今回はdockerコンテナ上のnginxからWSGIで別のdockerコンテナ上のpythonに繋ぎ、bottleを動かします。まあ最近bottle聞かなくなりましたけど。。。

未分類

前回前々回で作成したHello, World!なアプリを外からGetして時間を測定してみました。

for url in django.cgi/polls/ hello.cgi/;do
        time bash -c "for i in {0..49};do wget -q -O - https://elephantcat.work/cgi-bin/$url >/dev/null;done"
done

結果は

0.33user 0.31system 0:31.69elapsed 2%CPU (0avgtext+0avgdata 7176maxresident)k
0inputs+256outputs (0major+21808minor)pagefaults 0swaps
0.30user 0.34system 0:10.98elapsed 5%CPU (0avgtext+0avgdata 7180maxresident)k
0inputs+88outputs (0major+21767minor)pagefaults 0swaps
フレームワーク 50回取得にかかった時間[秒]
django 31.7
bottle 11.0

django遅いのは分かるけど、bottleでも十分遅いと思う。

CGI Python恐るべし。

未分類

2020年1月12日現在

VALUE-SERVERでPython

VALUE-SERVERではpython3が使用できる。

$ python3 --version
Python 3.6.8

VALUE-SERVERではapacheが動いていて、WSGIが使えない。

$ apachectl -M 2>/dev/null | grep wsgi
$

VALUE-SERVERではapacheが動いていて、CGIが使える。

$ apachectl -M 2>/dev/null | grep cgi
 cgi_module (shared)
$

つまり、django、flask、bottleなどのPython向けWeb Frameworkを使いたい場合の選択肢は、CGIのみということ。

Webサーバとの接続では軽量な順に

言語独自I/F ≧ WSGI > FastCGI > CGI

だと思うので、I/Fとしては最重量。そこで今回は最も軽量なFrameworkであるbottleでのHello, World!をやってみる。

bottleでのHello, World!

python3ではvenvが標準装備なので、これを使って仮想環境を構築し、そこにpipでbottleを入れる。

ディレクトリ構成は以下な感じ。

~/                                  # ホーム
~/public_html/                      #
~/public_html/domain/               # Webの公開ルートフォルダ
~/public_html/domain/cgi-bin        # CGI実行するファイルを置くフォルダ
~/public_html/domain/cgi-bin/forcgi # venvで構築する仮想環境

venvによる仮想環境作成とbottleインストール

$ cd ~/public_html/domain/cgi-bin
$ python3 -m venv forcgi
$ . ./forcgi/bin/activate
(forcgi)$ pip install --upgrade pip
(forcgi)$ pip install bottle
(forcgi)$ deactivate

bottleを使ったhello, worldアプリをpythonで書く(拡張子はCGIなので.cgiにしてます)。

#!$HOMEの内容/public_html/domain/cgi-bin/forcgi/bin/python
from bottle import route, run
@route('/')
def hello():
    return "Hello World!"
run(server='cgi')

シバンで、仮想環境のpythonを指定しているのが味噌で、こうしておくと、activateしなくてもpipで入れたパッケージをちゃんと見てくれます。

cgi-binディレクトリで、ちゃんとCGIが機能する設定を入れるため、.htaccessを書いておきます。

AddHandler cgi-script .cgi

これで、拡張子.cgiなパスはそのファイルで処理されます。後は先に作成したhello.cgiの実行権を与えればOK。

$ chmod u+x hello.cgi

このサーバにあるので、ConoHa VPSに引っ越したので、確認は/cgi-bin/hello.cgi/で出来ません。

ConoHa VPSで(WSGIですが)bottleを扱った記事は以下にあります。