LoginSignup
3
1

Reflex(Webアプリ作成ライブラリ):バックエンドの仕組み(SSLはどうするのか?)

Last updated at Posted at 2024-05-12

ReflexのバックエンドはFastAPI + Uvicornで構成

Reflexのバックエンドは、FastAPIを使っています。

image.png

FastAPI自体は、サーバではないので、Uvicornというサーバアプリを起動させます。
Uvicornの起動時に、FastAPIを利用して書かれたPythonのアプリコードをロードします。
Reflexは、Uvicorn実行コマンドをライブラリ内で定義して間接的に実行させています。

これは、FastAPIの仕組みなので詳しくは、そちらを参照してください。ネットでもたくさん情報がありますし、AIに質問してもよいと思います。

FastAPIの起動コマンドは以下のようになります。(Reflexのコードとは関係ありません。)

  • FastAPIを利用したPythonコード。
main.py
from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def root():
    return {"message": "Hello World"}

  • 上記のアプリをUvicornでWebアプリとして起動する。
run uvicorn
# mainはモジュール名、appはモジュール内にかかれたFastAPIのオブジェクト名
uvicorn main:app --reload

Reflexのバックエンド起動方法

  • Reflexライブラリの「reflex/utils/exec.py」というモジュールに、uvicorn起動処理が「run_backend、run_backend_prod」というメソッドで定義されています。
reflex/utils/exec.pyのrun_backendの該当箇所のみ
    # Run the backend in development mode.
    uvicorn.run(
        app=f"{app_module}.{constants.CompileVars.API}",
        host=host,
        port=port,
        log_level=loglevel.value,
        reload=True,
        reload_dirs=[config.app_name],
        reload_excludes=[constants.Dirs.WEB],
    )

  • 上記のコマンドが、「reflex run」によって起動され、バックエンドサーバが稼働します。

SSLの設定

では、ReflexではHTTPSの有効化、言い換えると、SSLの設定はどうするのでしょうか?
Uvicornは、コマンド実行時に証明書ファイルを設定することでHTTPSを有効化できます。

import uvicorn

if __name__ == "__main__":
    uvicorn.run("app.api:app",
                 host="localhost",
                 port=8432, 
                 reload=True,
                 ssl_keyfile="./key.pem", 
                 ssl_certfile="./cert.pem")

ただ、ReflexのUvicorn起動コマンドを見る感じ、ReflexだけではSSLの有効化は難しいようです。
ですので、nginxなどのWebサーバをたてて、そちらでSSLの設定をするのが一般的のようです。

ちなみに、Streamlitは、Streamlit単体でSSLの設定ができます。
configファイルに記載することで可能です。

.streamlit/config.toml
[server]
sslCertFile = '/path/to/certchain.pem'
sslKeyFile = '/path/to/private.key'

Reflexも同様の設定ができれば、nginxを構築する必要がなく楽なのにと感じます。社内で使うような簡単なものならWebサーバはいらない気もします。

Streamlitの方が先行してつくられている分、細かいところまで楽してできる配慮があります。

3
1
5

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