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?

レンタルサーバー(Xserver)でFastAPIを動かす

Posted at

はじめに

今まで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が動かせるので
少しお試ししたい方は是非やってみて下さい!

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?