最近嘗試進行一些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能夠自動嘗試進行重啓項目。node
隨着虛擬化容器的發展,直接使用docker進行部署是一種不錯的方案。編寫一份Dockerfile,指定須要的python版本甚至只是簡單指定須要的django版本便可。配合一些其餘組件如mysql, nginx的容器進行編排,能夠輕鬆地進行部署。[1]python
除此以外使用docker還有一些優點,有了docker的restart: always屬性,能夠替代掉一些進程監控工具好比supervisor的做用。gunicorn這個庫在windows沒法運行,使用docker也能夠解決這個問題。搭配k8s也能夠方便地進行集羣部署管理。mysql
pyenv[2] 是一款python版本管理的工具,相似於nodejs的nvm。能夠方便地進行python的版本指定。ubuntu默認安裝着python2.7和3.5的版本,可是有時候咱們並不想使用這兩個版本,想要安裝新的python版本好比3.7。這時咱們可使用e.g. pyenv install 3.7.2
進行安裝,國內用戶使用時會有安裝很是耗時的狀況,只須要將python對應版本的源碼放到~/.pyenv/cache
目錄下便可進行免下載直接安裝。安裝完成後,可使用兩條很是通用的指令:nginx
pyenv local python version
e.g. python local 3.7.2
指定當前目錄下的python版本。pyenv global python version
指定全局python版本pipenv 是一款包管理工具,集合了pip和virtualenv的功能。使用起來也很是簡單,pipenv install
, pipenv shell
兩條指令行天下,第一條是安裝第三方依賴,第二條是進入安裝依賴後的命令行。git
在部署時,僅須要先使用pyenv指定python環境,再用pipenv創建虛擬環境進行包管理便可。github