0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

QNAPでFastAPIを動かす

Posted at

目的

家庭用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]は簡単には使えない

なので生のuvicornhypercornを使う。

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]でなく、生のuvicornhypercon上で実行すれば良い。

0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?