Kon's DX Lab - Case Study

Day 92|サーバーを止めずにアプリを更新するには?

Published on 2025-07-02

🔬 Case Study Summary
Problem

(ここに課題を記述)

Result

(ここに具体的な成果を記述)


Tech & Process

(ここに採用技術とプロセスを記述) コードを詳しく見る »

1. 導入:この記事でできるようになること

この記事では、VPSで動かしているPythonアプリ(Flask/Streamlitなど)を止めずに更新する方法 を体験します。

  • systemd を使ってアプリを サービス化して永続化 する

  • gunicorn を使って Flask を プロダクション運用 にする

  • アプリを直すたびにサーバーごと落とす… そんな心配がなくなる!

💡 なぜやるの?

  • python app.py で起動しただけだと、ターミナルを閉じた瞬間に止まる

  • サーバーを落とさずに新しいバージョンを反映できれば、運用がぐっと楽になる

  • 実務や副業で「止めないアップデート」ができる人は一歩進んでる!


2. 背景・基礎知識

🔹 systemdってなに?

Linuxでおなじみの サービス管理ツール です。

  • サーバー起動時に自動でアプリを立ち上げる

  • 途中で落ちても自動で再起動してくれる

  • sudo systemctl restart でソフトだけサクッと再起動できる


📦 例えると:

手動起動: 毎回ライトのスイッチを手で押す
systemd: 電源ONですぐライトが自動で点灯する

🔹 gunicornってなに?

Pythonアプリを プロダクション向けに動かすためのサーバー です。

  • Flaskだけだと開発用サーバーなので大量アクセスに弱い

  • gunicornで動かすと複数プロセスで安定稼働する

  • nginxと組み合わせれば外部公開もバッチリ


3. 実践パート


✅ ステップ1|gunicornを入れる

pip3 install gunicorn

✅ ステップ2|gunicornで動かす

例: app.py を wsgi:app として起動

gunicorn --bind 0.0.0.0:5000 wsgi:app

(wsgi.py に Flask のインスタンスがある場合)


✅ ステップ3|systemd用の設定ファイルを作る

sudo nano /etc/systemd/system/myapp.service

中身の例:

[Unit]
Description=My Flask App with Gunicorn
After=network.target

[Service]
User=www-data
Group=www-data
WorkingDirectory=/home/ubuntu/myapp
ExecStart=/usr/local/bin/gunicorn --workers 3 --bind 0.0.0.0:5000 wsgi:app

[Install]
WantedBy=multi-user.target

✅ ステップ4|サービスを有効化・起動

sudo systemctl daemon-reload
sudo systemctl start myapp
sudo systemctl enable myapp  # 再起動後も自動起動

✅ ステップ5|更新するときの流れ

  1. 新しいコードを git pull や scp で反映

  2. サービスを再起動するだけ!

sudo systemctl restart myapp

これでサーバー自体は止まらず、すぐに新バージョンが反映されます。


4. つまずきポイントと対処法(FAQ)


5. まとめと次回予告

✅ 今日は、サーバーを止めずにアプリを更新できる仕組み(systemd+gunicorn) を学びました。

これを使えば、「ターミナル閉じたら止まる問題」から卒業です!


🔜 次回は、gitと組み合わせて自動デプロイに近づける方法 を紹介予定です。

一歩ずつ、自分だけの運用ルールを作っていきましょう🦊


#gunicorn #systemd #Flask