WSGI是Web服務器網關接口。它是一個規範,描述了Web服務器如何與Web應用程序通訊,以及Web應用程序如何連接在一塊兒以處理一個請求,(接收請求,處理請求,響應請求) 基於wsgi運行的框架有bottle,DJango,Flask,用於解析動態HTTP請求 支持WSGI的服務器 wsgiref python自帶的web服務器 Gunicorn 用於linux的 python wsgi Http服務器,經常使用於各類django,flask結合部署服務器。 mode_wsgi 實現了Apache與wsgi應用程序的結合 uWSGI C語言開發,快速,自我修復,開發人員友好的WSGI服務器,用於Python Web應用程序的專業部署和開發。
python3.6(宿主機上的物理解釋器)css
1.虛擬解釋器node
virtualenv 虛擬出多個乾淨、隔離的python解釋器環境python
問題:管理上較爲麻煩,須要找到venv的路徑,而且source activate才能激活虛擬環境mysql
2.virtualenvwrapper工具linux
可以更方便的使用以及管理virtualenvnginx
1)配置好環境變量以後,每次開機就加載這個軟件web
2)workon激活而且切換多個虛擬環境sql
mkvirtualenv 建立虛擬環境shell
lsvirtualenv 展現虛擬環境數據庫
cdvirtualenv 切換到虛擬環境中
rmvirtualenv 刪除虛擬環境
3.本地django鏈接linux上的數據庫注意事項:
1)防火牆問題,需配置規則,或者關閉防火牆
使用雲服務器,須要注意3306端口(安全組功能)
2)遠程鏈接mysql,須要受權,遠程鏈接
-scp(linux與linux網絡傳輸)
-xshell(yum install lrzsz)(windows)
lrzsz 能夠經過如下命令管理文件,也能夠直接拖拽文件
rz 接收
sz 發送
lrzsz只適用於小文件,大文件,請用xftp
-xftp(更爲高效的企業級文件傳輸協議軟件)
在settings.py中配置
allow_hosts=['*'] # 容許全部主機訪問
debug=True # 返回給項目一個debug信息,暴露了項目配置信息,所以在線上要關閉
1.web服務器,用戶的統一入口
咱們的想法是,讓用戶經過nginx這個入口,就能訪問咱們的應用服務器的功能。
www.wjs521.com 入口 < 80端口
端口轉發,反向代理
80端口的請求 > 8000的端口應用
server{}虛擬主機
2.反向代理服務器
proxy_pass 後端應用服務器的ip:port(轉發給一個單點機器)
proxy_pass upstream負載均衡池
3.負載均衡池服務器(nginx1-12/conf/nginx.conf中配置)
nginx接收到了基於wsgi協議的動態請求,而後經過uwsgi_pass轉發給uwsgi服務器
uwsgi_pass mydjango;
upstream mydjango { # weight表示權重的意思
server 192.168.12.1: 8000 weight=1;
server 192.168.12.2: 8000 weight=5;
server 192.168.12.3: 8000 weight=10;
}
4.處理靜態文件,這是nginx的自然優點,處理靜態文件的高併發性性能
www.pythonav.com/static/xxx.js
文件存放目錄/data/static/xxx.js
www.pythonav.com/static/xxx.css
文件存放目錄/data/static/xxx.css
www.pythonav.com/static/xxx.jpg
文件存放目錄/data/static/xxx.jpg
location /static {
alias /data/static;
}
uwsgi服務器:
經過uwsgi這個軟件啓動crm項目,且是一個支持高併發,多進程的一個應用服務器
uwsgi --module crm
-wsgi.py(重點級的文件,django啓動,實現wsgi協議的文件)在項目下的和項目名相同的目錄下
啓動進程後,經過命令手動管理
ps -ef| grep uwsgi
# 殺死進程
kill -9 pid
pkill uwsgi
killall uwsgi
supervisor 服務啓動後
supervisorctl,能夠經過這個命令,很是方便的管理進程,也能夠統一啓動,中止全部的進程批量管理進程
mysql:running/stop
nginx:running/stop
uwsgi:running/stop
項目發佈配置手冊:
pip3 frezz > requirements.py
pip3 install -r requirements.py
1.準備python環境,準備虛擬環境,激活了虛擬環境
mkvirtualenv nbcrm
檢測是否虛擬環境正常
which pip3 查看pip3的路徑
which python3
2.安裝django模塊(此時的操做都是在nbcrm這個虛擬環境下了)
pip3 install django==1.11.11
3.安裝pymysql鏈接mysql數據庫
pip3 install pymysql
4.安裝django的一個django-multiselectfield
pip3 install django-multiselectfield
5.解決項目的數據庫鏈接問題,修改settings.py
1.啓動linux的數據庫,建立對應的數據庫,密碼設置等等
create database nb_crm;
2.更改settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'nb_crm', #數據庫名
'HOST': '127.0.0.1', #這裏服務器的ip地址
'PORT': 3306, #端口
'USER': 'root', #用戶名
'PASSWORD': 'redhat123', #用戶密碼
}
}
3.更改容許主機
ALLOWED_HOSTS = ['*']
4.線上關閉debug(肖鋒的這個nb_crm先別改debug了),默認先用True
debug=True
1.安裝uwsgi
pip3 install -i https://pypi.douban.com/simple uwsgi
2.經過uwsgi命令啓動python應用
uwsgi --http 0.0.0.0:8888 --wsgi-file test1.py
--http 指明是http協議
--socket 啓動一個socket 連接
--wsgi-file 指明一個python應用文件
3.經過uwsgi啓動django項目(問題是,uwsgi不處理static靜態文件的配置)
uwsgi --http :8888 --module Nb_crm.wsgi
4.uwsgi能夠熱加載項目
uwsgi --http :9999 --module mycrm.wsgi --py-autoreload=1
--py-autoreload是告訴uwsgi自動重啓加載django項目
5.經過uwsgi的配置文件啓動項目
1.手動建立uwsgi.ini文件
touch uwsgi.ini
2.寫入以下配置
[uwsgi]
#項目的絕對路徑,定位到項目的第一層
chdir = /opt/NB_crm
#指明項目的wsgi文件路徑
module = NB_crm.wsgi
#指明你的虛擬解釋器的第一層路徑
home = /root/Envs/nbcrm
/root/Envs/nbcrm這個路徑能夠經過workon進入虛擬環境,在經過cdvirtualenv虛擬環境目錄下,pwd就能夠看到了
#指明經過uwsgi,啓動多少個進程
processes = 5
#很是重要
#很是重要
#很是重要
#若是你已經配置了nginx(啓動了nginx服務,配置了uwsgi_pass),請用這個socket鏈接
#socket = 0.0.0.0:8000
#若是你沒用nginx,想經過uwsgi直接啓動web服務,指明http協議
http = 0.0.0.0:9999
#在退出uwsgi環境後,清空環境變量
vacuum = true
6.經過配置文件啓動NB_crm(注意uwsgi不會處理靜態文件,若是有,也是瀏覽器的緩存!!!!)
uwsgi --ini uwsgi.ini
7.配置django的settings.py,收集全部NB_crm項目所需的靜態文件
1.#經過命令,收集整個項目全部的靜態文件,放入到/opt/static/
STATIC_ROOT='/opt/static/'
2.執行命令::
python3 manage.py collectstatic
3.此時NB_crm的全部靜態文件,都跑到/opt/static/底下了
(nbcrm) [root@node1 /opt/NB_crm 11:09:33]#ls /opt/static/
admin css imgs js plugins
8.配置nginx
1.配置一個網站入口,當用戶訪問192.168.12.96:80 這個web應用時,自動將請求轉發給uwsgi,uwsgi處理後,返回給nginx,返回給用戶
當請求是192.168.12.96:80的時候,其實訪問的是192.168.12.96:9999 這是動態請求,由於我是找到的uwsgi
#匹配度最低的寫法,所以就是任何的請求都訪問到這裏
2.經過nginx去處理靜態文件
3.nginx.conf配置以下
#定義負載均衡池,裏面放入uwsgi的地址
upstream nbcrm {
server 127.0.0.1:8000;
}
server {
listen 80;
server_name www.s14huoying.com;
#講nginx入口的請求,直接反向代理給uwsgi
location / {
uwsgi_pass nbcrm;
include /opt/nginx1-12/conf/uwsgi_params;
}
#經過nginx處理nbcrm的靜態文件
location /static {
alias /opt/static/;
}
}
9.更改uwsgi.ini ,指明socket鏈接,結合uwsgi 和nginx
#若是你已經配置了nginx,請用這個socket鏈接>>>這裏的端口和nginx.conf中配置的端口同樣
socket = 0.0.0.0:8000
10.啓動uwsgi.ini
uwsgi --ini uwsgi.ini
啓動nginx
./nginx
而且訪問nginx的域名入口,查看是否能訪問到uwsgi項目,而且靜態文件是否正常
www.s14huoying.com 查看瀏覽器狀態
若有不能訪問主機問題,看看C:\Windows\System32\drivers\etc下的hosts文件中的配置是否正確。
11.配置supversior,管理uwsgi進程
注意,請退出虛擬環境,在宿主機環境下,安裝supvervisor
1.安裝easy_install ,python2的軟件包管理工具 ,若是有了能夠忽略
yum install python-setuptools
#安裝軟件
easy_install supervisor
2.使用supervisor命令,經常使用命令以下
生成配置文件
echo_supervisord_conf > /etc/supervisord.conf
3.修改配置文件,添加任務,按照本身的機器環境修改此命令
[program:s14nbcrm]
#啓動uwsgi的命令就是這個(經過which uwsgi來查看絕對路徑)
command=/root/Envs/nbcrm/bin/uwsgi --ini /opt/NB_crm/uwsgi.ini
#自動啓動uwsgi,掛了以後自動加載
autorestart=true
4.啓動supvervisord服務,啓動uwsgi
#服務端命令,用於啓動這個服務
supervisord -c /etc/supervisord.conf
5.經過命令管理uwsgi
supervisorctl 直接回車,進入交互式管理狀態
[root@node1 ~ 11:53:32]#supervisorctl
s14nbcrm RUNNING pid 2008, uptime 0:01:56
也能夠經過命令交互式的管理uwsgi
#服務端啓動後,經過命令管理軟件
supervisorctl start s14nbcrm supervisorctl stop s14nbcrm supervisorctl status s14nbcrm