Ubuntu
通過 nginx 為 Flask 創建一個 systemd 服務
我正在通過 nginx 在伺服器上執行 Flask 應用程序。我想創建一個 systemd 文件,這就是我所擁有的:
[Unit] Description=my123 website After=syslog.target Requires=postgresql.service [Service] ExecStart=/home/user_123/my_web_app/run.py & ExecStop= Restart=on-abort WorkingDirectory=/home/user_123/my_web_app/ SyslogIdentifier=my_web_app User=user_123 [Install] WantedBy=multi-user.target
在本地,我將其執行為
./run.py
. 現在,我應該在ExecStart
and中有ExecStop
什麼?我認為ExecStart
是正確的,因為我有&
它。但是怎麼樣ExecStop
?
不,你永遠不應該添加
&
到ExecStart
. 這將使 systemd 認為您的單元是進行分叉的程序。此外,您不需要ExecStop
了解 SIGTERM 的服務(flask 的內置網路伺服器可以),systemd 知道將信號發送到哪裡。即 systemd 跟踪
ExecStart
開始的 PID,然後在您要求終止程序時知道將 SIGTERM 發送到哪裡。(一個單元
type=
可以使分叉比這複雜一點。但預設單元type=
認為沒有分叉。)額外的
在 Nginx 後面執行內置的燒瓶伺服器將使您非常容易受到即使是微不足道的 DoS 攻擊。燒瓶內置伺服器不適合生產使用。使用 Nginx,您應該使用類似uWSGI的東西。
Flask 文件有一個關於 uwsgi 的部分,您可以輕鬆映射命令行以編輯 uWSGI 配置文件選項。uWSGI 文件有一個關於 systemd 的部分。你真的應該使用 systemd 來啟動一個類似於 uWSGI 的真正的網路伺服器,而不是燒瓶內置的。