FastAPIは15分で環境作れるが、Dockerデプロイの手順がかみ合っていないので独自修正

ぜひシェア願います!
Share on facebook
Facebook
Share on twitter
Twitter
Share on linkedin
Linkedin

【これは約 4 分の記事です】

Web APIについて学習する教材やツールの作成を計画中。

当初、PHPを想定していたので、LaravelでAPI作成するレクチャーできないかと考えたのだが、

Laravelは環境づくりが大変で、APIのスクリプトの書き方が難しい

ということで却下。Apache+PHPの場合、URLのパスは、ソース格納フォルダの階層に通常は依存してしまうので、PHPは簡単にAPI作るには向かないような気がした。なのでLaravelのようなURLのパスをルーティングとして定義できるフレームワークが必要なのだが、正直Laravelで記述をするのはかなり重く、API研修というよりLaravel研修になりかねないと感じた。

そこで、PythonのFastAPIを試しに入れてみた。

FastAPI

試しの所要時間

  • Docker環境の作成・・・とりあえず試すだけなら15分。自分にとって使いやすいDocker環境にするのに2時間
  • API作成・・・5分

こんな簡単にAPIが作れるのか!!!

とちょっとショックを受けた。

Dockerの手順とチュートリアルの手順がかみあっていない

FastAPIのチュートリアルはかなりわかりやすく、ほぼそのまま手順に従えばOKなのだが、Dockerによるデプロイ手順と、チュートリアル手順がかみ合っていない。

Dockerを使用したデプロイ

この手順では、APIのポートは80

ところが、チュートリアルでのAPIのポートは8000

チュートリアル・最初のステップ

docker-composeで単純にポート割当変えればいいのかと思ったのだが、それだけだと、

$ uvicorn main:app --reload

としたとき、8000ポートに割り当てられたmain.pyの方を動かしてしまうのか、80ポートでのmain.pyの情報をリロードした状態にならない。

ということで、Dockerファイルの書き方を変更。Dockerのほうを8000ポートを使う手順に。

構成はこんな感じ。

├── app
│ └── main.py
├── docker-compose.yml
└── Dockerfile

Dockerfile

FROM tiangolo/uvicorn-gunicorn-fastapi:python3.7 
EXPOSE 8000 
CMD ["uvicorn", "main:app", "--reload", "--host", "0.0.0.0", "--port", "8000"]

docker-compose.yaml

version: '3'
 services:
   app:
     container_name: FastAPI
     build: . 
     volumes:
       - ./app :/app 
     ports:
       - "8000:8000"

と修正。main.pyはテスト内容によって毎回変わるので割愛。

これで、

  • Dockerでデプロイしたものがそのままチュートリアルで使用できる
  • main.pyファイルに変更を加えたら、すぐにリロードがかかり変更が反映される

ようになった。

ぜひシェア願います!
Share on facebook
Facebook
Share on twitter
Twitter
Share on linkedin
Linkedin