阿里雲ECS部署python及flask(二)使用uwsgi emperor +Nginx部署自動啓動多個web項目

前提:本文是《阿里雲ECS部署python及flask(一)》的續文,單個python項目的uwsgi和nginx都已能成功配置。
參考:

  1. 在系統環境下安裝uwsgi(非python項目中的虛擬環境):

pip3 install uwsgi

  1. 新建一個目錄:/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/

  1. 新建/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我都註釋掉了)
  1. 新建/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
  1. 創建/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
  1. 設置開機啓動:

systemctl enable nginx.service
systemctl enable emperor.uwsgi.service

  1. 運行服務、停止服務、重啓服務、狀態查詢:

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章