目的
家庭用NASのQNAPを持っているのでFastAPIで簡易的なおうちアプリケーションを作りたい。そんな時、QNAPにはContainer Stationという環境があるので最終的にはDockerコンテナ等で動かせば良い。しかし、ある程度デバッグしながら育てていく場合はコンテナだとビルドが必要となるので普通にPython+FastAPIをホストOS(QTS)上で動かしたい。
事前準備
SSH
QNAPにSSH接続するための設定はこちら
Python3
QNAPにPython環境を用意するにはこちら
Python3は /opt/python3/bin/python3
にインストールされている。
FastAPI インストール
仮想環境の作成
mkdir /somewhere/myapp
cd /somewhere/myapp/
/opt/python3/bin/python3 -m venv .venv
source .venv/bin/activate
python -V
パッケージインストール
チュートリアルにある標準的なインストールだとuvicorn
が利用しているuvloop
のインストールで失敗する。
pip install "fastapi[standard]"
なぜなら、
-
uvicorn
は高速化のためにCythonで書かれたuvloop
を利用している - PyPIにはQNAP環境向けのバイナリは配布されてないのでビルドが必要
- QNAPには基本的にはC言語のビルド環境がない
- よって
uvicorn[standard]
は簡単には使えない
なので生のuvicorn
かhypercorn
を使う。
pip install fastapi uvicorn
uvicorn main:app --host 0.0.0.0 --port 8000
あるいは
pip install fastapi hypercorn
hypercorn main:app --bind 0.0.0.0:8000
ここに結果は上げないがab
でみたところ、私の環境だとuvloop
なしでもuvicorn
の方がhypercorn
に比べて若干パフォーマンスが良さそう。まあ、おうちサーバなのでどっちでも良い。
コード編集(VS Code)
設定ファイルなどの編集程度ならばQNAPに入っているvi
でも良いかと思うが、アプリケーションのコード編集にはVS Codeなどを使いたいと思う。その場合は、
しかし、やってみたところ、私のQNAPではおそらくメモリ不足なのか重くてよく落ちる。また、統合ターミナルはコンテナ内のターミナルなので、ここでQNAP自体のPython自体は実行できない。あくまでもファイル編集用。
まとめ
QNAPでは、uvicorn[standard]
でなく、生のuvicorn
かhypercon
上で実行すれば良い。