環境
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