項目的發佈(nginx、uwsgi、django、virtualenv、supervisor)

導論

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,須要受權,遠程鏈接

準備django項目>>>crm在服務器上運行crm

1.把本地代碼,傳至linux

  -scp(linux與linux網絡傳輸)

  -xshell(yum install lrzsz)(windows)

      lrzsz   能夠經過如下命令管理文件,也能夠直接拖拽文件

      rz   接收

      sz  發送

    lrzsz只適用於小文件,大文件,請用xftp

  -xftp(更爲高效的企業級文件傳輸協議軟件)

2.django項目須要配置

在settings.py中配置

  allow_hosts=['*']  # 容許全部主機訪問

  debug=True  # 返回給項目一個debug信息,暴露了項目配置信息,所以在線上要關閉

Nginx的相關配置

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服務器:

  經過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

有關django的配置

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

使用uwsgi啓動django配置

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

相關文章
相關標籤/搜索