【運用編】Flaskを24時間動かす方法|systemdで自動起動設定

※本記事は、第2回でFlaskアプリをVPS上で動かせるようになった方向けの内容です。

第2回では、FlaskアプリをVPS上で実際に動かしました。
ブラウザからアクセスでき、「Webアプリが動いた」状態になったはずです。

ただ、そのままではFlaskアプリはSSH接続を切ったり、サーバーを再起動すると止まってしまいます。

この記事では、FlaskアプリをVPS上で24時間安定して動かすための「自動起動」の設定を行います。

目次

なぜFlaskはそのままでは止まってしまうのか

第2回では、FlaskアプリをVPS上で実際に動かしました。
ブラウザからアクセスでき、「Webアプリが動いた」状態です。

しかし、そのときのFlaskアプリは、

・SSHでログインしている間だけ動いている
・ターミナルを閉じると一緒に止まってしまう

という状態でした。

これは、Flaskを手動で起動しているだけだからです。

サーバー側から見ると、Flaskアプリは「一時的に実行しているプログラム」にすぎません。

そのため、

・SSH接続を切る
・サーバーを再起動する

といったタイミングで、簡単に止まってしまいます。

この状態では、まだ「サービスとして動いている」とは言えません。

systemdとは何か

systemd(システムディー)は、Linuxでサービスの起動や管理を担当する仕組みです。

サーバーが起動したときに、あらかじめ登録されたプログラムを自動で起動したり、途中で止まったプログラムを再起動したりします。

Ubuntuでは、Webサーバーやデータベースなどもこの systemd によって管理されています。

Flaskアプリも systemd に登録することで、

  • サーバー起動時に自動で立ち上がる
  • 途中で止まっても再起動される

といった「止まらない状態」に近づけることができます。

今回やることの全体像

今回行う作業は、次の3つだけです。

  1. Flaskアプリの場所を確認する
  2. systemdの設定ファイル(serviceファイル)を作成する
  3. 自動起動を有効にする

難しい設定や複雑な構成は行いません。

「Flaskアプリを24時間動かす」ことだけ に集中します。

systemdの設定ファイルを作成する

Flaskアプリを24時間動かすために、systemd に「このアプリを起動するルール」を登録します。

このルールをまとめたものが、serviceファイル(.service です。

serviceファイルを作成する

まず、設定ファイルを作成します。

Bash
sudo nano /etc/systemd/system/flask-portal.service

ファイル名は flask-portal.service としました。
(記事内ではこの名前で統一します)

serviceファイルの中身

開いたファイルに、以下をそのまま貼り付けてください。

Bash
[Unit]
Description=Flask Portal App
After=network.target

[Service]
User=root
WorkingDirectory=/root/myportal
ExecStart=/usr/bin/python3 app.py
Restart=always

[Install]
WantedBy=multi-user.target

保存して終了します。
Ctrl + O → Enter → Ctrl + X

各設定の意味(ざっくり)

ここでは 「何をしているか」だけ 押さえれば十分です。

[Unit] セクション

After=network.target

ネットワークが使える状態になってからFlaskアプリを起動する、という指定です。

[Service] セクション

User=root

今回は 学習目的 のため、rootユーザーで実行します。
(実運用では専用ユーザーを作るのが一般的です)

WorkingDirectory=/root/myportal

Flaskアプリ(app.py)が置いてあるフォルダです。
第2回で作成した場所に合わせています。

ExecStart=/usr/bin/python3 app.py

Flaskアプリを起動するコマンドです。
これまで手動で実行していた

python3 app.py

と同じ内容になります。

Restart=always

もしアプリが止まっても、自動で再起動します。

[Install] セクション

WantedBy=multi-user.target

サーバー起動時に、このサービスも一緒に起動する設定です。

自動起動を有効にする

serviceファイルを作成しただけでは、まだ systemd に認識されていません。

ここから、systemd に設定を読み込ませ、自動起動を有効にします。

設定を読み込む

sudo systemctl daemon-reload

まず、systemd に設定の変更を伝えます。

サービスを有効化する

次に、サーバー起動時に自動で立ち上がるよう設定します。

sudo systemctl enable flask-portal

サービスを起動する

sudo systemctl start flask-portal

状態を確認する

active (running) と表示されていれば、Flaskアプリは正常に起動しています。

sudo systemctl status flask-portal

サーバー再起動後も動くか確認する

ここで、一度サーバーを再起動してみます。

sudo reboot

再起動後、しばらく待ってからブラウザで Flask アプリのURL にアクセスしてください。

何も操作していないのに、アプリが表示されれば成功です。

Flaskアプリは、

  • SSH接続がなくても
  • サーバーを再起動しても

自動で起動するようになりました。

まとめ

これで、Flaskアプリは

手動で起動するものから放っておいても動き続けるもの

へと変わりました。

「とりあえず動いた」状態から、「ちゃんと動いているサービス」への第一歩です。

次は、Gunicorn や Nginx を使って、より安定した本番向けの構成に進んでいきます。

補足(安心ポイント)

※本記事では学習目的のため、rootユーザーで実行しています。
実運用では、専用ユーザーを作成して動かすのが一般的です。

ここまでで、
Flaskアプリを自動で起動する準備 は完了です。

次はこの service ファイルをsystemd に認識させて、有効化する作業に進みます。

目次