LoginSignup
2
3

More than 1 year has passed since last update.

FastAPI勉強用(初期設定編)

Last updated at Posted at 2023-02-18

作業目的

Apacheを介して、FastAPIにアクセスする。

環境

RedHat EnterpriseLinux 8.7
Python 3.8
※RHEL8.7のデフォルトのPythonは3.6だが、WebSocketの検証も行う予定のため、3.8を使用する。。

FastAPI環境構築

# pip3.8 install "fastapi[all]"

以下の方法ではインストールは行えたが、サンプルとの疎通試験で、telnet localhost 8000で無応答であった。プロンプトの応答もなし。

pip3.8 install fastapi uvicorn

2023/02/24追記
別マシンでcurl http://localhost:8000で確認したところ、疎通確認はできた。
telnetでもリクエストヘッダを適切に指定すれば疎通確認ができるとは思うが、curlでよいと思う。

FastAPIの設定

サンプルプログラム

$ mkdir /www/api/fastapi_server
$ cd /www/api/fastapi_server
$ vi main.py

サンプルプログラムは以下のmain.pyを使用。シェバンは不要。
https://fastapi.tiangolo.com/ja/tutorial/first-steps/

サービス起動

ポートはデフォルトの8000を使用する。

$ uvicorn main:app --reload

FastAPI単体での動作確認

ポートを開放して、アクセスできるホストの制限を外す。

# su 
# firewall-cmd --add-port=8000/tcp
# exit
$ uvicorn main:app --reload --host 0.0.0.0 --port 8000

デフォルトでは127.0.0.1からののみ受け付ける。--host 0.0.0.0でIPアドレスの制限が無くなる。
サブネットマスクで制限できる方法は別途調べる。
ポートを変更する場合は--portオプションで変更できる。

別ターミナルからの確認

$ curl http://localhost:8000
レスポンスが返ってくることを確認

telnet localhost 8000ではBad Requestになる。RequestHeaderを設定すれば動作するかもしれないが、curlで十分

別PC(Win10)のブラウザから確認

ブラウザで以下のURLにアクセスする
http://IPアドレス:8000/

確認終了後

開放していたポート8000を閉じる。

# firewall-cmd --remove-port=8000/tcp

Apacheを介して接続できるようにする。

/apiはFastAPIにアクセスできるようにする。

httpd.conf
-#LoadModule proxy_module modules/mod_proxy.so
-#LoadModule proxy_http_module modules/mod_proxy_http.so
-#LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
+LoadModule proxy_module modules/mod_proxy.so
+LoadModule proxy_http_module modules/mod_proxy_http.so
+LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so

proxy_wstunnel_moduleを有効にしているのは、WebSocketの試験を行うため。
WebSocketを使用しないならば、proxy_wstunnel_moduleはコメントアウトのままでよい。

extra/httpd-ssl.conf
SSLProxyEngine on
<Location /api/>
    ProxyPass        http://localhost:8000/
    ProxyPassReverse http://localhost:8000/
</Location>

systemdでFastAPIの自動起動設定

/etc/systemd/system/uvicorn.service
[Unit]
Description=The uvicorn process
Before=httpd.service
After=network.target remote-fs.target nss-lookup.target

[Service]
User=www
Group=www
WorkingDirectory=/www/api/fastapi_server
ExecStart=/usr/local/bin/uvicorn main:app --reload
ExecReload = /bin/kill -s HUP $MAINPID
ExecStop = /bin/kill -s TERM $MAINPID

[Install]
WantedBy=multi-user.target
# systemctl daemon-reload
# systemctl restart uvicorn
# systemctl enable uvicorn

動作確認

ブラウザでhttps://IPアドレス/api/を表示して、レスポンスが表示されることを確認する。

ToDo

api/docs ではswaggerのドキュメントが参照できないので調査する。

参考

2
3
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
2
3