django生產環境部署

最近嘗試進行一些python web生產環境部署的任務。主要是使用django框架進行web開發。本地使用windows + python3.7可是上到服務器之後是ubuntu系統。ubuntu默認是python2和python3.5兩者都不符合現在的python開發版本。筆者嘗試進行了部署。一般來說,部署一個django web項目需要部署,數據庫,nginx, gunicorn和supervisor這幾個東西。其中數據庫不必說,nginx可以用來做反向代理,靜態文件服務器等等(當然用django搭配whitenoise也可以),gunicorn作爲python的http server,supervisor作爲進程監控工具,一旦django項目崩潰無法運行,supervisor可以自動嘗試進行重啓項目。

Docker部署

隨着虛擬化容器的發展,直接使用docker進行部署是一種不錯的方案。編寫一份Dockerfile,指定需要的python版本甚至只是簡單指定需要的django版本即可。配合一些其他組件如mysql, nginx的容器進行編排,可以輕鬆地進行部署。[1]

除此之外使用docker還有一些優勢,有了docker的restart: always屬性,可以替代掉一些進程監控工具比如supervisor的作用。gunicorn這個庫在windows無法運行,使用docker也可以解決這個問題。搭配k8s也可以方便地進行集羣部署管理。

pyenv + pipenv

pyenv[2] 是一款python版本管理的工具,類似於nodejs的nvm。可以方便地進行python的版本指定。ubuntu默認安裝着python2.7和3.5的版本,但是有時候我們並不想使用這兩個版本,想要安裝新的python版本比如3.7。這時我們可以使用e.g. pyenv install 3.7.2進行安裝,國內用戶使用時會有安裝非常耗時的情況,只需要將python對應版本的源碼放到~/.pyenv/cache目錄下即可進行免下載直接安裝。安裝完成後,可以使用兩條非常通用的指令:

  • pyenv local python version e.g. python local 3.7.2 指定當前目錄下的python版本。
  • pyenv global python version 指定全局python版本

pipenv 是一款包管理工具,集合了pip和virtualenv的功能。使用起來也非常簡單,pipenv install, pipenv shell兩條指令行天下,第一條是安裝第三方依賴,第二條是進入安裝依賴後的命令行。

在部署時,僅需要先使用pyenv指定python環境,再用pipenv建立虛擬環境進行包管理即可。

參考

  1. https://github.com/will4906/dockerdemo
  2. https://github.com/pyenv/pyenv
  3. https://github.com/pypa/pipenv
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章