Skip to content

デーモンを作成する(ホストOS)

何らかの理由で、OSを再起動した場合にも自動的に起動するデーモンを作成します。

負荷分散についても考慮してください。

本デーモンは、Dockerコンテナを起動するためのものです。
起動時に、--scaleオプションを指定することで、負荷分散を行うことができます。

コンテナ数については常識的な範囲内であれば、Traefikが自動的に負荷分散を実施してくれます。(テスト済み)

いくつが良いかは検証していませんが、1コンテナではパフォーマンスが低下することは確認済みです。必ず--scaleオプションの指定をお願いします。

1. デーモンの作成

近頃のLinuxディストリビューションでは、systemdを利用してデーモンを作成することが一般的です。
以下の手順で、デーモンを作成してください。

1-1. デーモンの作成

まず、デーモンの設定ファイルを作成します。
/etc/systemd/system/ディレクトリに、fastapi.serviceというファイル名で以下の内容を記述してください。(ファイル名はマルチバイト文字を含まない限り適当に決めていただいてかまいません。ただし、以降の記述は統一させてください。)

ini
# /etc/systemd/system/fastapi.service
[Unit]
Description=fastapi.service # 適当な説明を記述してください

[Service]
Type=simple
WorkingDirectory=/path/to/repos/fastapi # リポジトリのパスを指定してください
ExecStart=/usr/bin/docker compose up --scale fastapi=4 # 負荷分散オプションを指定してください
ExecStop=/usr/bin/docker compose down
Restart=yes

[Install]
WantedBy=multi-user.target

負荷分散オプションについて

--scale fastapi=4の部分は、コンテナの数を指定するオプションです。この数値を変更することで、コンテナの数を増減させることができます。(コンテナ数は静的な指定のみ可能です。)
この数値は、適切な値を設定してください。(1以上の値が必要ですが、適切な値は検証していません。ただし、1だとパフォーマンスが低下することは確認済みです。)

詳しくは、こちら(サーバの負荷軽減について)を参照してください。

1-2. デーモンの再読み込み

設定ファイルを作成したら、systemdに設定ファイルを再読み込みさせます。

bash
sudo systemctl daemon-reload

1-3. デーモンの自動起動設定

最後に、デーモンを自動起動(OSの再起動時などに自動的に起動)するように設定します。

bash
# デーモンの名前を変えたときは、"fastapi.service"ではなくなります。
sudo systemctl enable fastapi.service

1-4. デーモンの起動

デーモンを起動します。

bash
# デーモンの名前を変えたときは、"fastapi.service"ではなくなります。
sudo systemctl start fastapi.service

ターミナルに直でdocker composeコマンドを打つよりも、この方法で起動させるのがオススメ

この方法でdockerコンテナを起動させると、いくつかの利点を享受できます。

  1. OSの再起動時に自動的に起動する(他ユーザが勝手にOSを再起動しても、自動的に復旧するので安心)
  2. ログの出力が簡単に見れる(journalctlコマンドやsystemctl statusコマンドでログを確認できる)
  3. デーモンの状態を簡単に確認できる(systemctl statusコマンドでデーモンの状態を確認できる)
  4. デーモンの停止が簡単(systemctl stopコマンドでデーモンを停止できる)
  5. デーモンの再起動が簡単(systemctl restartコマンドでデーモンを再起動できる)

2. デーモンの確認

デーモンが正常に起動しているか確認します。

bash
# デーモンの名前を変えたときは、"fastapi.service"ではなくなります。
sudo systemctl status fastapi.service

このような出力が表示されれば、デーモンが正常に起動しています。Active: active (running)が表示されていることを確認してください。その他の細かい情報は、OSの状態や設定によって異なるためあまり気にしなくても大丈夫です。

bash
 fastapi.service - fastapi.service
   Loaded: loaded (/etc/systemd/system/fastapi.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2024-01-01 00:00:00 JST; 1min 30s ago 
 Main PID: 12345 (docker)
    Tasks: 5
   Memory: 10.0M
   CGroup: /system.slice/fastapi.service
           ├─12345 /usr/bin/docker compose up --scale fastapi=4
           └─12346 /usr/bin/docker compose up --scale fastapi=4

これで、デーモンが作成されました。
OSを再起動しても、自動的に起動するようになります。