Ubuntuのsystemdでserviceを作成しFastAPI(uvicorn)を自動(常時)起動する

公開日:
目次

Ubuntu環境でFastAPIを効率的に運用するためには、アプリケーションをデーモン化することが重要です。

デーモン化することで、システム起動時に自動的にFastAPIが始動し、常時稼働させることが可能になります。

この記事では、systemdを利用してFastAPIをデーモン化する手順について説明します。

systemdを利用したサービス登録

Ubuntuでは、systemdが標準のイニシャルシステムとして採用されています。systemdを使ってFastAPIをサービスとして登録することで、アプリケーションのデーモン化を実現できます。

serviceファイルの作成

まずは、FastAPIアプリケーション用のserviceファイルを作成します。ここでは、サービス名をfastapiとして進めます。

sudo touch /etc/systemd/system/fastapi.service

serviceファイルの編集

作成したserviceファイルを編集します。編集には任意のテキストエディタを使用してください。

sudo vim /etc/systemd/system/fastapi.service

FastAPIのプロジェクトが/home/ubuntu/fastapi内にある場合、serviceファイルの内容は以下のようになります。

[Unit]
Description=FastAPI
After=syslog.target network.target

[Service]
Type=simple
WorkingDirectory=/home/ubuntu/fastapi
ExecStart=/home/ubuntu/fastapi/.venv/bin/uvicorn main:app --host=0.0.0.0 --port=8000
KillMode=process
Restart=always
User=ubuntu
Group=root

[Install]
WantedBy=multi-user.target

serviceファイルの説明

serviceファイルの各セクションについて簡単に説明します。

  • [Unit]セクションでは、サービスの説明や依存する他のサービスを指定します。
  • [Service]セクションでは、サービスの実行方法や振る舞いに関する設定を行います。
  • [Install]セクションでは、どのランレベルでサービスを有効化するかを指定します。

serviceの登録と起動

systemdに新しく追加したserviceファイルを認識させるために、以下のコマンドを実行します。

sudo systemctl daemon-reload

次に、FastAPIサービスを有効化します。

sudo systemctl enable fastapi.service

サービスを開始します。

sudo systemctl start fastapi.service

最後に、サービスが正常に起動しているかを確認します。

sudo systemctl status fastapi.service

Activefailになっていないこと、およびLoadedenabledと表示されていれば、サービスの起動と有効化が成功しています。