django-uwsgi-vue部署記錄

部署文檔

1.目錄規劃:
/home/useradmin/
                ├── applications  ---應用代碼部署目錄
                │   ├── DEV  ---開發環境
                │   └── STG   ---測試環境
                ├── applogs  --日誌文件目錄
                │   ├── DEV ---開發環境
                │   └── STG   ---測試環境
                ├── appvenv ---python環境目錄
                │   ├── DEV ---開發環境
                │   └── STG   ---測試環境
                ├── installpackage ---下載包或者安裝包文件
                ├── scripts   ---啓動腳本或者自動更新腳本
                └── tmp  --臨時文件

端口規劃:
開發環境 DEV 38000
測試環境 STG 38001
2.部署前的準備:

工程使用環境變量VIRTUAL_ENV來識別當前的環境是在local, dev, stg仍是prd下, 而後根據所處的環境自動使用不一樣的配置文件啓動(見conf/settings/__init\__.py).
因此,html

  1. 要使用虛擬環境啓動工程, 而且, 虛擬環境所處的位置如上圖所示(若是不使用虛擬環境啓動, 要建立/home/useradmin/applogs/{DEV,STG,PRD}/目錄, 且手動配置VIRTUAL_ENV環境爲/home/useradmin/appvenv/{DEV,STG,PRD}/venv
  2. 工程使用/home/useradmin/applogs/{DEV,STG,PRD}來存儲相關日誌, 部署時確保目錄權限
  3. 解釋器版本: 3.6.5(3.6.x應該都沒啥問題)

2.工程部署:前端

部署結構: nginx託管全部靜態文件 + uwsgi託管後端工程 python

其中全部靜態文件包含兩部分:後端框架所須要的基本靜態文件和前端工程nginx

  1. 配置pip源web

    vim ~/.pip/pip.conf
    數據庫

    [global]
    timeout = 6000
    index-url = { 內網pip源 }
  2. 進入當前環境的python虛擬環境
  3. cd到工程目錄, 安裝工程依賴,確保當前處於虛擬環境,不然依賴會被安裝到全局環境:django

    pip3 install -r requirements.txt
  4. 數據庫初始化:vim

    python manage.py migrate

    若是提示db error, 參考工程conf/settings下對應環境的配置文件中的DB配置確認數據庫配置是否正確後端

  5. 安裝uwsgiapi

    pip3 install uwsgi

    若是提示編譯中斷: plugins/python/uwsgi_python.h:2:20: 致命錯誤:Python.h:沒有那個文件或目錄, 那麼deactivate, 回到全局環境sudo yum install python3-devel.x86_64而後, 再回到虛擬環境下 pip3 install uwsgi

  6. 須要的日誌文件

    nginx的日誌默認位置:
    /var/log/nginx/access.log和error.log
    
    uwsgi的日誌在工程的uwsgi.ini中指定: 
    # /var/log/uwsgi/uwsgi-deam.log
    /home/useradmin/applogs/DEV/uwsgi-deam.log
    
    django的日誌在工程的conf下對應環境的配置文件指定:
    /home/useradmin/applogs/DEV/djnago-req.log
    /home/useradmin/applogs/DEV/djnago-db.log
  7. 使用uwsgi啓動工程,cd到工程目錄下, 爲uwsgi指定環境啓動

    uwsgi --ini uwsgi.ini:DEV
    uwsgi --ini uwsgi.ini:STG
    uwsgi --ini uwsgi.ini:PRD

    可能會遇到日誌文件讀寫權限問題,須要把對應文件配給uwsgi中指定的用戶useradmin,

    chown useradmin:useradmin xx.log  # 有時父級文件也須要
  8. 配置nginx

    nginx主要配置與uwsgi的對接,和工程靜態文件的託管

    先把靜態文件收集指定的靜態根目錄,到工程目錄下

    python manager.py collectstatic

    而後編輯nginx.conf, 因爲前端默認使用前端所在的ip和port來請求後端資源, 致使先後端使用同一個nginx.conf的server(使用同一個server的另外一個緣由是避免跨域問題), 因此:

    1. 先後端資源須要在URL上進行區分(後端使用/api來標記後端資源)
    2. 從/static/路徑下過濾出後端框架使用的靜態文件rest_framewor和admin
server {
     listen       38000 default_server;
     # listen       [::]:80 default_server;
     server_name  _;
     root  /home/useradmin/applications/DEV/pauth_web/dist/;   # 前端工程目錄

     # Load configuration files for the default server block.
     include /etc/nginx/default.d/*.conf;

     location /api/ {                                          # 後端api根目錄
        include uwsgi_params;
        # uwsgi_pass unix:///run/DEV/pauth.sock;               # 棄用
        uwsgi_pass unix:///home/useradmin/applications/DEV/run/pauth.sock
     }

     location /static/rest_framework/ {                        # 後端Browseable API須要的靜態文件
       alias /home/useradmin/applications/DEV/static/rest_framework/;
     }

     location /static/admin/ {                                 # 後端admin須要的靜態文件
       alias /home/useradmin/applications/DEV/static/admin/;
     }

     error_page 404 /404.html;
         location = /40x.html {
     }

     error_page 500 502 503 504 /50x.html;
         location = /50x.html {
     }
 }
相關文章
相關標籤/搜索