ラズパイでfastAPIを簡単稼働2024夏
1. はじめに
LAN内で使うために、ラズパイ zero w などで fastAPIを稼働させるまでのメモです。
2. インストール
ラズパイ os を入れたラズパイ上から実行します。(osはliteで良い。試したバージョンはbookworm)
sudo apt install python3-fastapi gunicorn nginx screen
最後のnginx
とscreen
は、必須ではないですが、色々と便利なので入れます。
上記のポイントは、fastapiをaptで入れてしまう点。通常はpipで入れるはずです。
3. スクリプトの設置
fastAPIのスクリプトを置くフォルダを作ります。
一般ユーザで行います。
mkdir webapi
cd webapi
スクリプトをエディタで書きます。(vi党の方は読み替えてください)
nano main.py
内容は次の通りです。打ち込み終わったら保存します。(nanoの場合は、ctrl+oで保存、ctrl+xで終了です。)
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
次をベタ打ちします。
/usr/bin/gunicorn main:app -b 0.0.0.0:8000 --reload --workers 1 --threads 4 --log-level 'info' --worker-class 'uvicorn.workers.UvicornWorker'
これで、fastAPIが動作する環境が構築できました。
動作確認の方法は次の通りです。
同一のLANに繋がっているPCからブラウザでURLを、
[ラズパイのIPアドレス]:8000
と入力すると、jsonでmessage: "Hello World"と返ってくればOK。
以上でfastAPIが動くようになりました。
以降はおまけです。
4. (おまけ)nginxの設定
管理者権限で、/etc/nginx/sites-available/default
を次のように編集します。
server {
listen 80 default_server;
という記述の後を入れます。
location /fastapi/ {
proxy_pass http://localhost:8000/;
}
この/fastapi/
は別の内容でも良いでしょう。
管理者権限で、テストし、サービスを再起動します。
nginx -t
service nginx restart
動作確認
一般ユーザに戻り、fastAPIを起動します。
cd ~/webapi
/usr/bin/gunicorn main:app -b 0.0.0.0:8000 --reload --workers 1 --threads 4 --log-level 'info' --worker-class 'uvicorn.workers.UvicornWorker'
他のPCのブラウザから次のURLを打ち込み、jsonが返ってくるかを確認します。
[ラズパイのIPアドレス]/fastapi/
もし、エラーが返ってきたり、bad gatewayが表示された場合は、/etc/nginx/sites-available/default
の記述が間違っている可能性がありますので見直しましょう。
5. (おまけ)fastAPIの自動起動設定
一般ユーザで、runFastapi.sh
を作成します。
#!/bin/sh
cd /home/[USER1]/webapi
/usr/bin/gunicorn main:app -b 0.0.0.0:8000 --reload --workers 1 --threads 4 --log-level 'info' --worker-class 'uvicorn.workers.UvicornWorker'
[USER1]は、一般ユーザ名です。
起動時に自動でfastAPiが動くようにします。
crontab -e
一番下に下記を入れる。
@reboot /usr/bin/screen -dmS FASTAPI /usr/bin/sh /home/[USER1]/runFastapi.sh
これで、screenで動くようになります。
Discussion