LoginSignup
1
0

More than 1 year has passed since last update.

PythonでFastAPI+gunicornを使用しBasic認証をかけたAPIサーバを立てる

Last updated at Posted at 2023-02-05

環境

Amazon Lightsail(LAMP)
以前別の用途で作ったのを再利用しただけなので、LAMPであることに特に意味はない

uvicornでAPIサーバーを動かす

Basic認証をかけたかったので、FastAPIでBasic認証 - Qiitaの通りbasic_auth.pyを用意し、API部分を下記の通り実装
host="0.0.0.0"を指定することでローカル以外でもアクセスできるようにしている

myserver.py
import uvicorn
from fastapi import FastAPI, Depends
from basic_auth import verify_from_api
from fastapi.responses import FileResponse

app = FastAPI()

@app.get("/")
async def root(_ = Depends(verify_from_api)):
    return FileResponse("image.png", media_type="image/png")

if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=8000)

pipで必要なものをインストール

pip3 install fastapi uvicorn

lightsail環境で、pipでインストールしたコマンドが使えなかったため、パスを通す

PATH=$PATH:/home/bitnami/.local/bin

echo $PATHで増えたことを確認

実行

python3 myserver.py

http://サーバアドレス:8000/ にアクセスするとBasic認証をチェックした上でimage.pngを返すAPIができあがった

環境変数の設定

Linuxサーバは接続が切れると環境変数が消えるらしいので、下記で永続化
Linuxで環境変数を永続化させる方法と手順について – Rainbow Engine

gunicornを使ってバックグラウンドで動作させる

uvicornだとプロセスがフォアグラウンドになるので、代わりにgunicornを使用

pip3 install gunicorn

-D でバックグラウンドで実行できる

gunicorn -k uvicorn.workers.UvicornWorker --bind "0.0.0.0:8000" myserver:app -D

参考にした記事

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0