Gunicorn、PM2、systemd 到底怎麼選:Python 網站程序管理的三種路線
很多人把 Flask 網站做完後,下一步就會碰到一個很實際的問題:這個站到底要怎麼穩定地跑在主機上?這時候常會聽到三個名字:Gunicorn、PM2、systemd。很多新手會把它們混在一起,但其實它們解決的是不同層次的問題。 先講 Gunicorn。Gunicorn 是用來承載 Flask 這類 Python WSGI 應用的 serv...
很多人把 Flask 網站做完後,下一步就會碰到一個很實際的問題:這個站到底要怎麼穩定地跑在主機上?這時候常會聽到三個名字:Gunicorn、PM2、systemd。很多新手會把它們混在一起,但其實它們解決的是不同層次的問題。
先講 Gunicorn。Gunicorn 是用來承載 Flask 這類 Python WSGI 應用的 server。也就是說,它主要負責把你的 Flask app 變成一個可以正式接收請求的服務。它不像 `python app.py` 那樣只是開發用,而是正式環境比較合理的啟動方式。
例如最基本的啟動可能是:
gunicorn -w 4 -b 0.0.0.0:5002 app:app所以 Gunicorn 的角色不是程序管理器,而是 Python 應用 server。
再講 PM2。PM2 本來是 Node.js 世界很常見的程序管理工具,但它也可以拿來管理 Python 專案。它的價值在於幫你統一處理啟動、重啟、查看狀態、保存程序清單。也就是說,它比較像「幫你管理程序生命週期」的工具。
systemd 則是 Linux 系統層的服務管理機制。很多正式主機環境其實都更傾向用 systemd 管理 Gunicorn,因為它是系統原生的,對開機自啟、失敗重啟、權限控制、日誌整合都很自然。對正式 Linux 主機來說,systemd 通常比 PM2 更標準。
如果把三者的角色濃縮成一句話,大概是這樣:
Gunicorn:讓 Flask 正式提供服務
PM2:幫你管理程序啟停
systemd:用系統原生方式管理服務所以它們不是完全互斥,而是層次不同。你很可能會是「Gunicorn + systemd」,或者「Gunicorn + PM2」,而不是三者選一。
那到底怎麼選?
如果你現在是小型自架站,而且你已經習慣用 PM2 管很多站,繼續用 `Gunicorn + PM2` 完全可以。這對同一台主機上有多個 Python 或 Node 專案的人來說很方便。
如果你想走比較標準、比較接近 Linux 正式服務管理的方式,`Gunicorn + systemd` 通常會更穩,也更符合一般伺服器管理習慣。
如果你現在還停在 `python app.py`,那你第一步通常不是先糾結 PM2 還是 systemd,而是先把站改成 Gunicorn 跑起來。因為那才是從開發環境走向正式環境的真正分界。
所以比較務實的順序通常是:先用 Gunicorn 取代開發 server,再依你的主機管理習慣選 PM2 或 systemd。不要把這三個東西想成同一類工具,這樣整個部署觀念會清楚很多。