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を動かすことができる。