部署文檔
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).
所以,
- 要使用虛擬環境啓動工程, 並且, 虛擬環境所處的位置如上圖所示(如果不使用虛擬環境啓動, 要創建/home/useradmin/applogs/{DEV,STG,PRD}/目錄, 且手動配置VIRTUAL_ENV環境為/home/useradmin/appvenv/{DEV,STG,PRD}/venv
- 工程使用/home/useradmin/applogs/{DEV,STG,PRD}來存儲相關日誌, 部署時確保目錄權限
- 解釋器版本: 3.6.5(3.6.x應該都沒啥問題)
2.工程部署:
部署結構: nginx託管所有靜態文件 + uwsgi託管後端工程
其中所有靜態文件包含兩部分:後端框架所需要的基本靜態文件和前端工程
-
配置pip源
vim ~/.pip/pip.conf
[global] timeout = 6000 index-url = { 內網pip源 } - 進入當前環境的python虛擬環境
-
cd到工程目錄, 安裝工程依賴,確保當前處於虛擬環境,否則依賴會被安裝到全局環境:
pip3 install -r requirements.txt -
數據庫初始化:
python manage.py migrate如果提示db error, 參考工程conf/settings下對應環境的配置文件中的DB配置確認數據庫配置是否正確
-
安裝uwsgi
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 {
}
}