📚

ラズパイでfastAPIを簡単稼働2024夏

2024/08/18に公開

1. はじめに

LAN内で使うために、ラズパイ zero w などで fastAPIを稼働させるまでのメモです。

2. インストール

ラズパイ os を入れたラズパイ上から実行します。(osはliteで良い。試したバージョンはbookworm)

sudo apt install python3-fastapi gunicorn nginx screen

最後のnginxscreenは、必須ではないですが、色々と便利なので入れます。
上記のポイントは、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