以前寫了一篇 debian8的配置文章。如今雲主機用了debian9,就再從新梳理一遍安裝流程。python
Debian8 + Flask + Nginx + uWSGI + uWSGI Emperor 基本配置文件注意事項
debian
版本號cat /etc/issue
python
及 GCC
版本號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
也可使用其它命令,好比 virtualenv
。segmentfault
Flask
進入虛擬環境:服務器
source venv/bin/activate
經過 pip
命令進行安裝flask
:app
pip install flask
uWSGI
配置文件建立一個新的 uWSGI
配置文件/data/root/luanzun.com/luanzun.com_uwsgi.ini
:socket
[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
在原有的域名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
。uWSGI 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