/home/useradmin/ ├── applications ---應用代碼部署目錄 │ ├── DEV ---開發環境 │ └── STG ---測試環境 ├── applogs --日誌文件目錄 │ ├── DEV ---開發環境 │ └── STG ---測試環境 ├── appvenv ---python環境目錄 │ ├── DEV ---開發環境 │ └── STG ---測試環境 ├── installpackage ---下載包或者安裝包文件 ├── scripts ---啓動腳本或者自動更新腳本 └── tmp --臨時文件 端口規劃: 開發環境 DEV 38000 測試環境 STG 38001
工程使用環境變量VIRTUAL_ENV來識別當前的環境是在local, dev, stg仍是prd下, 而後根據所處的環境自動使用不一樣的配置文件啓動(見conf/settings/__init\__.py).
因此,html
2.工程部署:前端
部署結構: nginx託管全部靜態文件 + uwsgi託管後端工程 python
其中全部靜態文件包含兩部分:後端框架所須要的基本靜態文件和前端工程nginx
配置pip源web
vim ~/.pip/pip.conf
數據庫
[global] timeout = 6000 index-url = { 內網pip源 }
cd到工程目錄, 安裝工程依賴,確保當前處於虛擬環境,不然依賴會被安裝到全局環境:django
pip3 install -r requirements.txt
數據庫初始化:vim
python manage.py migrate
若是提示db error, 參考工程conf/settings下對應環境的配置文件中的DB配置確認數據庫配置是否正確後端
安裝uwsgiapi
pip3 install uwsgi
若是提示編譯中斷: plugins/python/uwsgi_python.h:2:20: 致命錯誤:Python.h:沒有那個文件或目錄, 那麼deactivate, 回到全局環境sudo yum install python3-devel.x86_64而後, 再回到虛擬環境下 pip3 install uwsgi
須要的日誌文件
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
使用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 # 有時父級文件也須要
配置nginx
nginx主要配置與uwsgi的對接,和工程靜態文件的託管
先把靜態文件收集指定的靜態根目錄,到工程目錄下
python manager.py collectstatic
而後編輯nginx.conf, 因爲前端默認使用前端所在的ip和port來請求後端資源, 致使先後端使用同一個nginx.conf的server(使用同一個server的另外一個緣由是避免跨域問題), 因此:
- 先後端資源須要在URL上進行區分(後端使用/api來標記後端資源)
- 從/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 { } }