はじめに
今までWordpressを使うことが多く
そうなるとサーバーに関してもクラウドではなく
レンタルサーバーを利用してきました。
今回のそのいつも使っているレンタルサーバーで
FastAPIを使って作ってみたいアプリがあり
とりあえず動くところまでできたのでその備忘録です。
Xserverに関して
XserverではWSGIは使用することができず
CGIもしくはFaskCGIでPythonのWebアプリを動作させることができます。
ただ、Xserverに導入されているPythonは追加でモジュールをインストールできない
(pipが使えない)ため、ssh接続を行いminiconda等を用いて
仮想環境の作成が必要です。
その辺りはいくつも分かりやすい記事があったので
そちらで確認できます。
例として以下の記事はすごく分かりやすくてよかったです
アプリを作成したいディレクトリに移動
Xserverではssh接続をしたとき
ルートディレクトリにいるのでそこから公開できる
ディレクトに移動する必要があります。
(例)
$ cd ~/<ドメイン>/public_html/
public_htmlに移動できたら
今回アプリを作成するディレクトリを作成して移動します。
(例)
$ mkdir fastapi
$ cd fastapi
モジュールインストール
このままpipでモジュールをインストールしても良いのですが
今回はお試しでやってみたかったので
作成したディレクトリの中にpipパッケージをインストールしました
(例)
$ pip install fastapi -t .
-tをつけることでインストールするディレクトリを指定できます。
今回はカレントディレクトリに入れたかったので「.」としました。
ファイルの作成
ファイル構成は以下のようになります。
.
├── .htaccess
├── main.py
└── index.fcgi
.htaccess(パーミッション:644)
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /fastapi/index.fcgi/$1 [L]
</IfModule>
パーミッションの設定も変更しないと動かないので注意が必要です。
また常にSSLを使用するためコードを追加してます。
「/fastapi/index.fcgi/$1」の「fastapi」の部分は
今回作成したディレクトリの名前なので別名で作成した場合は
その名前に書き換えて下さい。
main.py(パーミッション:600)
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
今回はお試しなので何でも良いから文字を表示させるための
仮のコードです。ここも指定はありません。
index.fcgi(パーミッション:755)
FastCGIでFastAPIを動作させるのに必要な
「flup」モジュールと「a2wsgi」モジュールをインストールします。
$ pip install a2wsgi flup -t .
インストールできたらファイルを編集します。
#! ../../../miniconda3/envs/py312/bin/python
import os
import a2wsgi
from flup.server.fcgi import WSGIServer
from main import app
if __name__ == '__main__':
os.environ.setdefault("PATH_INFO", "")
wsgi_app = a2wsgi.ASGIMiddleware(app)
WSGIServer(wsgi_app).run()
Pythonのパスに関しては
$ which python
で調べることができるので環境に合わせて
「#! ../../../miniconda3/envs/py312/bin/python」
を変更して下さい。
※今回のパスにある「py312」はminicondaの環境名です
実行
3つのファイルが用意できたら、ブラウザで「https://<ドメイン>/fastapi/」
にアクセスして今回設定した文字が表示されるか確認します。
「https://<ドメイン>/fastapi/docs」も確認することができます。
まとめ
クラウドサービスが流行っているなのかで
あまり使う事はないかもしれませんが
レンタルサーバーでもFastAPIが動かせるので
少しお試ししたい方は是非やってみて下さい!