- 阿里雲ECS部署python及flask(一)
- 阿里雲ECS部署python及flask(二)使用uwsgi emperor +Nginx部署自動啓動多個web項目
- 阿里雲ECS部署python及flask(三)通過設置uid和gid來改變uwsgi+emperor通常使用root權限的問題
前提:本文是《阿里雲ECS部署python及flask(一)》的續文,單個python項目的uwsgi和nginx都已能成功配置。
參考:
- 在系統環境下安裝uwsgi(
非python項目中的虛擬環境
):
pip3 install uwsgi
- 新建一個目錄:/etc/uwsgi/vassals,將各項目的uwsgi配置文件拷貝至該目錄下面(這一步網上很多博客都說是做軟鏈接
ln -s
,但不知爲何我使用軟鏈接不成功,最後無奈使用直接拷貝):
mkdir /etc/uwsgi && mkdir /etc/uwsgi/vassals
cp ~/first_project/f_uwsgi.ini /etc/uwsgi/vassals/
cp ~/second_project/s_uwsgi.ini /etc/uwsgi/vassals/
- 新建/etc/uwsgi/emperor.ini 文件,代碼如下:
[uwsgi]
emperor = /etc/uwsgi/vassals
# uid = www
# gid = www
注(權限問題已解決,可參考:阿里雲ECS部署python及flask(三)通過設置uid和gid來改變uwsgi+emperor通常使用root權限的問題
):
由於我尚未搞清楚linux系統中用戶和用戶組權限問題,所以所有操作包括最後的自啓動部署,都是在root下完成的。包括nginx.conf中的user也是root。
我在這裏給繞了好久,若真正部署起來全使用root權限還是不好,目前也是迫於無奈,待學習好用戶權限問題後再做修改。
權限問題會涉及:1、配置靜態文件直接由Nginx處理;2、上邊的emporer.ini。(由於我都是用root,所以uid和gid我都註釋掉了)
- 新建/etc/systemd/system/emperor.uwsgi.service文件,代碼如下:
[Unit]
Description=uWSGI Emperor
After=syslog.target
[Service]
#uwsgi 服務的路徑,以及需要啓動的 ini 文件路徑,根據自己的實際情況進行修改
ExecStart=/usr/bin/uwsgi --ini /etc/uwsgi/emperor.ini
# Requires systemd version 211 or newer
RuntimeDirectory=uwsgi
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all
[Install]
WantedBy=multi-user.target
- 創建/usr/lib/systemd/system/nginx.service,(由於我是使用yum install nginx安裝的,所以這個文件已經有了。)代碼如下:
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
# Nginx will fail to start if /run/nginx.pid already exists but has the wrong
# SELinux context. This might happen when running `nginx -t` from the cmdline.
# https://bugzilla.redhat.com/show_bug.cgi?id=1268621
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
[Install]
WantedBy=multi-user.target
- 設置開機啓動:
systemctl enable nginx.service
systemctl enable emperor.uwsgi.service
- 運行服務、停止服務、重啓服務、狀態查詢:
systemctl start emperor.uwsgi.service
systemctl stop emperor.uwsgi.service
systemctl restart emperor.uwsgi.service
systemctl status emperor.uwsgi.service
systemctl start nginx.service
systemctl stop nginx.service
systemctl restart nginx.service
systemctl status nginx.service
查看所有已啓動的服務
systemctl list-units --type=service