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

你可能感兴趣的:(docker,python,django,web)