mk-toolブログ

エンジニアと家のことをごちゃごちゃと書いてます

H2Oを利用してFlaskをFastCGIとして動かすまで

とりあえず、Flaskは動くことを前提としている。

Flaskが動く環境が整ったら、UNIXドメインソケットを利用してFastCGIデーモンを動かすようにしてあげる。

UNIXドメインソケットは、以下のようにすることで作成される。以下をxxx.fcgiと、自分で名前を付けてFlaskのプロジェクトの最上位に置く(最上位でなくてもよいが)。 これは公式ドキュメントに書いている。

#!/usr/bin/python3
from flup.server.fcgi import WSGIServer
from yourapplication import app

if __name__ == '__main__':
    WSGIServer(app, bindAddress='/tmp/fcgi.sock').run()

この際に、xxx.fcgiのシバンの指定しているpythonの記載についpython3を使いたければpython3を指定し、2系を利用したければpythonでよい。 また、私のDockerの環境だと、python/usr/local/binに入っていて、公式ドキュメントのシバンでは参照できなかったので、which python3でシバンを正しく設定してあげる。

次に、FastCGIデーモンを動かす。デーモンとして動かすので、screenコマンドを使えるようにする。 ところで、デーモンとして動かす前に、FastCGIとして動かすためには、以下のコマンドで動かすことができる。

/yourapplication/xxx.fcgi

これで、動くのだが、私のDockerの環境では(bashではなくshだからか?)以下のようにしなければ動かなかったので注意。

python3 /yourapplication/xxx.fcgi

上記を利用して、screenでデーモンとして実行してあげればOK。

H2O側のFastCGIを待ち受けるソケットへの接続は以下でOK。

listen:
  port: 8080
user: root

hosts:
  "localhost":
    paths:
      /:
        fastcgi.connect:
          port: /tmp/fcgi.sock
          type: unix

access-log: /app/logs/access-log
error-log: /app/logs/error-log                          

これで、127.0.0.1:8080へアクセスすれば、UNIXソケットを利用してFlaskを動かすことができる。