部署django項目


uWSGI + nginx django + virtualenv + supervisor發布web服務器

項目部署步驟

1.項目准備階段

1.准備項目代碼,從本地拷貝

2.將項目上傳到linux服務器中,也就是拖進linux中...

3.執行命令解壓縮項目文件 

 2.解決項目運行的環境問題

1.通過命令導出開發機器的所有模塊,可以在windows下通過命令,導出模塊文件

pip3  freeze  > requirements.txt     #這是開發者約定俗成的文件名

2.將這個文件上傳linux上.進行安裝
  pip3 install -i https://pypi.douban.com/simple -r requirements.txt 

 

3.數據庫操作

1.准備需要使用的數據庫db  #例如mysql    沒有就下載
    yum install mariadb-server  mariadb  -y

2.啟動數據庫
    systemctl   start maridb

3.修改項目中settings.py中配置文件,修改mysql數據庫驅動,還有ALL_HOSTS = [" * "],允許所有網段訪問

4.創建數據庫和項目對應的庫名

 4.virtualenv虛擬環境配置

1.配置好python3虛擬環境
2.進入虛擬環境安裝uwsgi pip3 install uwsgi

 python3虛擬環境配置虛擬環境,參照 --->https://www.cnblogs.com/CrazySheldon1/p/10488249.html

5.uwsgi准備和配置

uwsgi.ini配置參考這個博友https://blog.51cto.com/wangfeng7399/2341281

通過uwsgi啟動django項目

#1. 首先進入項目的第一層    cd   項目名

#2.執行命令啟動
    django     uwsgi --http :8000 --module 項目名.wsgi

   #也可以執行熱加載命令: uwsgi --http :8000 --module 項目名.wsgi --py-autoreload=1     #--py-autoreload=1   就是檢測到項目中修改代碼后進行自動重啟進行同步

#3.使用nginx的話就需要通過配置文件啟動uwsgi,在項目第一層創建一個uwsgi.ini的文件      touch  uwsgi.ini

4.手動配置uwsgi.ini文件 
[uwsgi]
# Django-related settings # the base directory (full path) #這里寫入項目的絕對路徑 chdir= /opt/項目名 # Django's wsgi file #寫入django的第二層文件夾,和wsgi.py文件 module = 項目名.wsgi # the virtualenv (full path) #虛擬環境的絕對路徑 home= /root/Envs/虛擬環境名 # process-related settings # master master= true # maximum number of worker processes processes= 1 #如果你沒用nginx,想直接訪問django后台,可以使用http協議 #http = 0.0.0.0:8000 #如果你用了nginx進行反向代理,請使用socket協議,注釋掉http協議 socket= 0.0.0.0:8000 # ... with appropriate permissions - may be needed # chmod-socket= 664 # clear environment on exit vacuum= true
 

6.nginx配置結合uwsgi啟動

1.修改nginx配置文件.nginx.conf
    #如下nginx的反向代理
    location /{
        include  uwsgi_params;
        uwsgi_pass  0.0.0.0:8000;
    }
    
   #http://192.168.11.250/static/admin/css/base.css#當請求url,從 
    static路徑開始時,我們就讓他去找某一個文件夾解決靜態文件的配置方式
    location /static{
        alias   /opt/自定義名稱 #(存放static靜態文件)
    }

2.修改django的settings.py,收集靜態資源
      STATIC_ROOT = '/opt/project_name_static' #在settings.py中添加(自定義名稱)
    #同時保證以下兩個配置存在
           STATIC_URL = '/static/'
            STATICFILES_DIRS = [
            os.path.join(BASE_DIR, 'static')
        ] 
3.使用命令收集django的靜態文件
    python3  manage.py collectstatic  #注意在manage.py同級目錄執行 

7.使用supervisor啟動uwsgi

#1.首先退出虛擬環境,安裝supervisor, 注意python3不支持supervisor,因此要使用物理環境的python2進行安裝,
    #yum - install python-setuptools
    #easy_install supervisor

#2.安裝完畢后,生成配置文件

    echo_supervisord_conf  > /etc/supervisord.conf

#3.在配置文件中,添加任務,管理uwsgi
    vim /etc/supervisord.conf #在最底行,寫入配置如下

    [program:自定義名稱]
    command=/root/Envs/虛擬環境名稱/bin/uwsgi   --ini          
    /opt/項目名稱/uwsgi.ini
    stopasgroup=true      
    killasgroup=true  

#4.啟動supervisor服務
    supervisord -c  /etc/supervisord.conf 

#5.通過命令進行管理uwsgi
    supervisorctl -c /etc/supervisord.conf

#6.學習管理supervisor的命令
    start 任務名
    stop 任務名
    stop all 
    start all 
    status 任務名 

此時項目部署完畢,如果沒有差錯,便可以通過ip正常跑起來了...

項目細節部分

不用nginx也能實現項目部署,通過uwsgi熱加載也可以啟動django項目,為什么要用nginx?

  • 安全問題:程序不能直接被瀏覽器訪問,而是通過nginx,nginx只開放某個接口,uwsgi本身是內網接口,這樣運維人員在nginx上加上安全性限制,可以達到保護程序的作用
  • 負載均衡問題:一個uwsgi 很可能不夠用,即使開了多個work也不行,畢竟一台機器的cpu內存是有限的,有了nginx做代理,一個nginx可以代理多台uwsgi完成uwsgi的負載均衡
  • 靜態問題:使用django或是uwsgi來負責靜態文件是很浪費的行為,而且他們本身對文件的處理也不如nginx好,所以整個靜態文件的處理都直接由nginx完成.

...


免責聲明!

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



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