uwsgi啟動項目流程


今日內容:
博客地址:
https://www.cnblogs.com/pyyu/p/9481344.html


linux基本管理命令

服務器上安裝服務,python3.6(宿主機上的物理解釋器)
1.虛擬解釋器
virtualenv
虛擬出多個干凈、隔離的python解釋器環境
問題:管理上較為麻煩,需要找到venv的路徑,並且source activate 才能激活虛擬環境
2.
virtualenvwrapper工具
更為方便的使用以及管理virtualenv
1.配置好環境變量之后,每次開機就加載這個軟件
2.workon 激活並且切換多個虛擬環境
mkvirtualenv  創建
lsvirtualenv
cdvirtualenv
rmvirtualenv



mariadb(mysql),與django連接,存儲數據(yum install mariadb-server mariadb-client)
初始化連接數據庫
    __init.py__
    import pymysql 
    pymysql.install()
本地django連接linux上的數據庫注意事項:
1.防火牆問題,需配置規則,或者關閉防火牆
    使用雲服務器的同學,需要注意開通3306端口(安全組功能)
2.遠程連接mysql,需要授權,遠程連接
grant all privileges .....

redis
import redis 



准備django項目 >  crm 在服務器上運行crm
1.把本地代碼,傳至linux
    -scp(linux與linux網絡傳輸)
    -xshell(yum install  lrzsz)  (windows)
                lrzsz  可以通過如下倆命令管理文件,也可以直接拖拽文件
                rz   接收
                sz   發送
        lrzsz只適用於小文件,大文件,請用xftp
    -xftp (更為高效的企業級文件傳輸協議軟件)
2.django項目需要配置allow_hosts=['*'],允許所有主機訪問
debug=True  #返回給項目一個debug信息,暴露了項目配置信息,因此在線上要關閉



Nginx
1.web服務器,用戶的統一入口, 
我們的想法是,讓用戶通過nginx這個入口,就能訪問到我們的應用服務器的功能
www.pythonav.cn     入口   <   80端口
端口轉發,反向代理  
80端口的請求  >   8000的端口應用

server{}虛擬主機



2.反向代理服務器
    proxy_pass  后端應用服務器的ip:port   (轉發給一個單點機器)
    proxy_pass  upstream負載均衡池
    
3.負載均衡服務器
    nginx接收到了基於wsgi協議的動態請求,然后通過uwsgi_pass轉發給uwsgi服務器
    
    uwsgi_pass  mydjango;

    upstream mydjango {
        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 
    
    python3 manage.py runserver 0.0.0.0:8000  ××  不再用這種單機形式啟動crm
    django-admin startproject   crm
    django-admin startapp      app01
        crm 
            -crm
                -wsgi.py   (重點級的文件,django啟動,實現wsgi協議的文件)
            -manage.py

常見問題:
uwsgi  啟動crm的時候,非常有可能報錯一個 no application(找不到應用)
uwsgi找不到你的crm的wsgi.py
    其實uwsgi是通過這個application對象加載crm的
    application = get_wsgi_application()





            
            
進程管理工具:
啟動進程后,通過命令 手動管理 
ps -ef |grep uwsgi 
#啟停uwsgi 
kill -9 pid 
pkill uwsgi 
killall uwsgi 


#管理nginx 

ps -ef 
kill 

#管理mysql
ps -ef 

kill 


#進程管理工具 
supervisor 服務啟動后


supervisorctl ,可以通過這個命令,非常方便的管理進程,也可以統一啟動,停止所有的進程
    批量管理進程
    mysql : running/stop 
    nginx :     running/stop
    uwsgi:running/stop

    
    


 項目發布配置手冊:
 (更換不同的服務器環境,首先就要解決環境依賴的問題)
 1.pip3 frezz > requirements.py 
 2. pip3 install -r requirements.py 
 
 3.docker 
 
 
 
 
 
 
 
 
 1.准備python環境,准備虛擬環境,激活了虛擬環境
 mkvirtualenv nbcrm
    檢測是否虛擬環境正常
    which 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
        #指明通過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連接
    socket          = 0.0.0.0:8000


10.啟動uwsgi.ini 
uwsgi --ini uwsgi.ini 

啟動nginx

./nginx 


並且訪問nginx的域名入口,查看是否能訪問到uwsgi項目,並且靜態文件是否正常

www.s14huoying.com   查看瀏覽器狀態



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的命令就是這個
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
    
    
    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM