当サイトは、アフィリエイト広告を利用しています
dockerコンテナ作成し、コンテナ内でgunicornで動作させている
flask製のAPIをVScodeでデバッグする方法をまとめる。
コンテナ内でgunicornで動作させている
flask製のAPIについては下記記事で作ったものを使う
まずは拡張機能の「Python」と「Python Debugger」をインストールする。
※ないとlaunch.jsonのfastAPIの構成がでてこないので。
VScodeではデバッグする際はデバッグ設定用のファイルである
を作る必要がある。
flask製のAPIを動かすためのlaunch.jsonを作っていく
拡張機能の「Python」をインストールしていないと
でてこない。
flaskアプリケーションへのパスを入力する。
このapiの場合はプロジェクト構成が下記のようになっている
.|-- Dockerfile|-- app| |-- api.py| `-- wsgi.py|-- docker-compose.yml|-- gunicorn_config.py`-- requirements.txt
ので
と入力する
※後で変えれるので、この時点でわからなければ適当でもいい。
自動でlaunch.jsonファイルが生成される
{// IntelliSense を使用して利用可能な属性を学べます。// 既存の属性の説明をホバーして表示します。// 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "Python デバッガー: Flask","type": "debugpy","request": "launch","module": "flask","env": {"FLASK_APP": "app.api.py","FLASK_DEBUG": "1"},"args": ["run","--no-debugger","--no-reload"],"jinja": true}]}
このlaunch.jsonだとflaskの内部サーバーが動くので
編集する必要がある
上記で作成したlaunch.jsonをgunicornで動いているAPIを
デバッグできるように修正する
{"version": "0.2.0","configurations": [{"name": "Python デバッガー: Flask with Gunicorn","type": "debugpy","request": "launch","module": "gunicorn","args": ["--reload","-w","1","--bind","0.0.0.0:5001","--chdir","/workspace/app","wsgi:flask_api"],"jinja": true}]}
下記のコマンドをデバッガーで実行しているイメージ
$ gunicorn --reload -w 1 --bind 0.0.0.0:5001 --chdir /workspace/app wsgi:flask_api
このアプリで下記のdocker-compose.ymlで作成したコンテナで
動いてる
version: "3"services:flaskapi:container_name: "flask-api"build:context: .dockerfile: Dockerfileports:- "5000:5000"volumes:# バインドマウント- .:/workspace# サーバー(gunicorn)実行command: gunicorn wsgi:flask_api --config gunicorn_config.py# command: gunicorn --reload -w 1 --bind 0.0.0.0:5000 --chdir /workspace/app wsgi:flask_apitty: true
コンテナ内では、port:5000でgunicornサーバーが起動しているため
デバッグではport:5001で動かしている。
もしデバッグ側でもport:5000を使いたい場合はport:5000で起動している
gunicornサーバーを止める必要がある。
port:5000で起動しているgunicornサーバーを止めた場合は
下記のようにgunicorn_config.pyを読み込ませる形でもデバッグできる。
{"version": "0.2.0","configurations": [{"name": "Python デバッガー: Flask","type": "debugpy","request": "launch","module": "gunicorn","args": ["wsgi:flask_api","--config","gunicorn_config.py"],"jinja": true}]}
要は通常起動させているportがデバッグしているportと同時に使用しないように
しておくけば問題はない。
まぁ、デバッグの設定なので個人的にはわざわざ「gunicorn_config.py」を
読み込ませる必要はないと思う。
launch.jsonができたので、実際にデバッグを
実行してみる
launch.jsonは下記の方を使う
{"version": "0.2.0","configurations": [{"name": "Python デバッガー: Flask with Gunicorn","type": "debugpy","request": "launch","module": "gunicorn","args": ["--reload","-w","1","--bind","0.0.0.0:5001","--chdir","/workspace/app","wsgi:flask_api"],"jinja": true}]}
ホストのブラウザから「http://localhost:5001」にアクセスすると
ブレークポイントで止めるのが確認できる
コンテナ内のgunicornサーバー上で起動するflaskのapiを
デバッグする方法をまとめてみた。
下記記事で合わせてみれば
flaskのapiの環境設定とデバッグ設定についての流れは
理解できると思う。