Caddyソケット連携fastCGI + Python bottle FrameworkでWEBサーバ起動
2020年1月22日Linux Tips, Python Bottle Framework, テクニカル, トピックス, ノウハウ
Python BottleフレームワークをCaddyで連携してみる。ソケット経由での例を作ってみました。スクリプトタイプで接続するのでスレッドセーフな作りを心がけてpythonコーディングすればスクリプト側はマルチスレッドせずに連携できるはずです。つまりcaddy側でマルチスレッド通信を制御してくれるはず。通常連携する方法で一番簡単なのはリバースProxy接続なのですが今回はfastCGIでBottleフレームワークのアプリを連携する例をやってみました。今回はhttp仕様での例ですが、SSL証明書を登録すればHTTP2対応も簡単にできちゃいます。
flupを導入してfastcgi仕様でPython Bottleを連携(今回はソケット接続でやってみます。)
下記のようなソースコードapp.pyを用意します。
1 |
pip3 install flup |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
from bottle import Bottle,template,run,route from flup.server.fcgi import WSGIServer app = Bottle() @app.route('/hello/< uname >') def index(uname): return template("<b>Hello {{ var_name }} !</b>", var_name=uname) def main(app): try: WSGIServer(app, bindAddress='/tmp/webserv.sock', umask=022).run() except (KeyboardInterrupt, SystemExit, SystemError): logging.info("Server Problem.Shutdown Now....") except Exception: traceback.print_exc(file=sys.stdout) if __name__ == '__main__': main(app) |
1 |
# python3 app.py |
Caddy側の設定(fastCGIソケット仕様)
非常に設定がシンプルですね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
www.testserv.net:80 { root /opt/www/doc gzip log /var/log/caddy-accesslog { rotate_size 50 rotate_age 5 rotate_keep 4 rotate_compress } errors /var/log/caddy-errors { rotate_size 50 rotate_age 5 rotate_keep 4 rotate_compress } fastcgi / unix:/tmp/webserv.sock } |
1 |
# caddy -conf Caddyfile |