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|更新するときの流れ
新しいコードを git pull や scp で反映
サービスを再起動するだけ!
sudo systemctl restart myapp
これでサーバー自体は止まらず、すぐに新バージョンが反映されます。
4. つまずきポイントと対処法(FAQ)

5. まとめと次回予告
✅ 今日は、サーバーを止めずにアプリを更新できる仕組み(systemd+gunicorn) を学びました。
これを使えば、「ターミナル閉じたら止まる問題」から卒業です!
🔜 次回は、gitと組み合わせて自動デプロイに近づける方法 を紹介予定です。
一歩ずつ、自分だけの運用ルールを作っていきましょう🦊
#gunicorn #systemd #Flask