debian9+flask+uwsgi + uWSGI Emperor 配置流程

以前寫了一篇 debian8的配置文章。如今雲主機用了debian9,就再從新梳理一遍安裝流程。python

Debian8 + Flask + Nginx + uWSGI + uWSGI Emperor 基本配置文件注意事項

查看系統相關信息

debian版本號

cat /etc/issue

pythonGCC 版本號

python

pip 版本號

pip -V

安裝 uwsgi

pip install uwsgi

安裝 nginx

我用的是 oneinstack 一鍵腳本。能夠百度找一下。nginx

經過自帶功能新增域名映射,路徑:shell

/data/root/luanzun.com

安裝 Flask

建立虛擬環境

使用python3自帶的venv命令虛進行建立虛擬環境。如下命令中,第二個venv是文件夾名稱:flask

cd /data/root/luanzun.com
python3 -m venv venv

也可使用其它命令,好比 virtualenvsegmentfault

安裝 Flask

進入虛擬環境:服務器

source venv/bin/activate

經過 pip命令進行安裝flaskapp

pip install flask

新建 uWSGI 配置文件

建立一個新的 uWSGI 配置文件/data/root/luanzun.com/luanzun.com_uwsgi.inisocket

[uwsgi]

#指向網站跟目錄,應用程序的文件夾路徑 application's base folder
base = /data/root/luanzun.com

# 按字面意思是python的環境變量路徑,寫的是網站根目錄
# 給PYTHONPATH 增長一個目錄(或者一個egg),你能夠最多使用該選項64次。
# 給PYTHONPATH python-path pp 這三個是相同做用
pythonpath = %(base)

# 虛擬目錄,設置PYTHONHOME/virtualenv
home = %(base)/venv

# 指定監聽文件,修改後從新打開日誌
# 若是修改/碰了指定的文件,那麼觸發日誌的從新打開
touch-logreopen = /data/wwwlogs/uwsgi/.touchforlogrotate

#使進程在後臺運行,並將日誌打到指定的日誌文件或者udp服務器。
#這個指令會讓uWSGI在後臺運行並將日誌打到 /data/wwwlogs/uwsgi/的對應文件中。
daemonize = /data/wwwlogs/uwsgi/%n.log

#日誌文件的路徑 location of log files
; logto = /data/wwwlogs/uwsgi/%n.log


#加載指定的python WSGI模塊(模塊路徑必須在PYTHONPATH裏)
module = app

# 設置在收到請求時,uWSGI加載的模塊中哪一個變量將被調用,默認是名字爲「application」的變量。
callable = app

#socket文件的路徑 socket file's location
socket = %(base)/tmp/%n.sock

#pchmod-socket的權限 ermissions for the socket file
chmod-socket = 666

# 處理器數
processes = 2

# 線程數
1threads = 2

#您須要的是,reload-mercy是用做回退的全局值。
#what you need, reload-mercy is a global value used as a fallback
#--reload-mercy-在從新加載/中止整個uWSGI實例時使用
#--worker-reload-mercy-在從新加載/中止單個工做程序時使用
worker-reload-mercy = 10

# 修改代碼時,自動重啓uwsgi服務,每1秒檢查一次
python-autoreload = 1

# 這個選項會設置harakiri超時時間(能夠看wiki首頁的相關內容)。若是一個請求花費的時間超過了這個harakiri超時時間,那麼這個請求都會被丟棄,而且當前處理這個請求的工做進程會被回收再利用(即重啓)。
# 這個設置會使uwsgi丟棄全部須要60秒才能處理完成的請求。
harakiri = 60

按照實際狀況修改文件中的路徑。網站

建立日誌文件夾

建立一個新文件夾存放uWSGI日誌,更改文件夾的全部權(由於我裝了ftp,並且ftp帳號的用戶組是www:www,因此文件權限也是給了www:www):ui

mkdir -p /data/wwwlogs/uwsgi
chown -R www:www /data/wwwlogs/uwsgi

配置網站的nginx配置文件

在原有的域名conf配置文件中添加如下內容:

location / {
    try_files $uri @yourapplication;
}
location @yourapplication {
    include uwsgi_params;
    uwsgi_pass unix:/data/root/luanzun.com/luanzun.com_uwsgi.sock;
}

配置uWSGI Emperor

使用uWSGI Emperor管理多個 uwsgiuWSGI Emperor是用來管理uwsgi後臺運行的。
新建/etc/systemd/system/emperor.uwsgi.service文件,代碼以下:

[Unit]
Description=uWSGI Emperor
After=syslog.target

[Service]
#uwsgi 服務的路徑,以及須要啓動的 ini 文件路徑,根據本身的實際狀況進行修改
ExecStart=/usr/local/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

建立/etc/uwsgi文件夾

mkdir /etc/uwsgi

建立文件/etc/uwsgi/emperor.ini,裏面代碼以下:

[uwsgi]
emperor = /etc/uwsgi/vassals
uid = www
gid = www

把網站的uwsgi.ini文件要給個軟鏈,加到/etc/uwsgi/vassals/ 文件夾中:

mkdir /etc/uwsgi/vassals
ln -s /data/root/luanzun.com/luanzun.com_uwsgi.ini /etc/uwsgi/vassals

/etc/uwsgi/emperor.ini文件裏,設置了文件全部者是 www:www,咱們要給對應的文件夾和文件作全部者權限修改(這一步根據實際狀況來判斷是否須要):

chown -R www:www /data/root/luanzun.com
chown -R www:www /data/wwwlogs/uwsgi/

相關命令

啓動服務

systemctl start emperor.uwsgi.service

檢查狀態

systemctl status emperor.uwsgi.service

你會看到提示:

emperor.uwsgi.service - uWSGI Emperor
   Loaded: loaded (/etc/systemd/system/emperor.uwsgi.service; disabled; vendor preset: enabled)
   Active: active (running) since Sat 2018-06-23 11:34:18 CST; 7s ago
Main PID: 19288 (uwsgi)
   Status: "The Emperor is governing 1 vassals"
    Tasks: 2 (limit: 19660)
   CGroup: /system.slice/emperor.uwsgi.service
           └─19288 /usr/local/bin/uwsgi --ini /etc/uwsgi/emperor.ini

開機啓動

systemctl enable emperor.uwsgi.service

其它命令

systemctl start emperor.uwsgi.service
systemctl stop emperor.uwsgi.service
systemctl status emperor.uwsgi.service
相關文章
相關標籤/搜索