第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つだけです。
- Flaskアプリの場所を確認する
- systemdの設定ファイル(serviceファイル)を作成する
- 自動起動を有効にする
難しい設定や複雑な構成は行いません。
「Flaskアプリを24時間動かす」ことだけ に集中します。
systemdの設定ファイルを作成する
Flaskアプリを24時間動かすために、systemd に「このアプリを起動するルール」を登録します。
このルールをまとめたものが、serviceファイル(.service) です。
serviceファイルを作成する
まず、設定ファイルを作成します。
sudo nano /etc/systemd/system/flask-portal.serviceファイル名は flask-portal.service としました。
(記事内ではこの名前で統一します)
serviceファイルの中身
開いたファイルに、以下をそのまま貼り付けてください。
[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/myportalFlaskアプリ(app.py)が置いてあるフォルダです。
第2回で作成した場所に合わせています。
ExecStart=/usr/bin/python3 app.pyFlaskアプリを起動するコマンドです。
これまで手動で実行していた
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 を使って、より安定した本番向けの構成に進んでいきます。
補足(安心ポイント)
ここまでで、
Flaskアプリを自動で起動する準備 は完了です。
次はこの service ファイルをsystemd に認識させて、有効化する作業に進みます。

