虽然在开发时runserver 命令也可让服务器启动,但是毕竟不适合生产环境,因此,在部署项目时就要采用新的方式。
本次项目在ubuntu 16.04系统上进行部署。部署时,注意配置防火墙,放开对应端口,当然,也可直接关闭防火墙。
假设现在已经有一个名为webnote的项目。部署前,请先确认静态文件已收集完成,且设置了debug=False(关于静态文件部分在我之前的文章中已经讲过,这里附上链接)
Django中静态文件之各个配置详解
Django如何正确加载静态文件
一,配置项目所需python环境
1.在本地开发环境上执行命令,导出开发时依赖的所有包
#文件名可以随便取
$ pip freeze >req_list.txt
2.通过ftp或git将项目的代码和req_list.txt同步到Ubuntu系统中
#方法有很多,这个不是本文的重点,这里不做演示
- 这里注意文件夹的权限
#进入当前项目所在目录,并给该文件夹赋予权限,为了方便,直接赋值777
$sudo chmod -R 777 ./webnote
3.在Ubuntu上创建虚拟环境,并安装所有包
#创建一个名为py3_django的虚拟环境(如果想使用的Ubuntu本机的环境,就跳过前两个步骤)
#(关于如何安装虚拟环境不是本文重点,不进行演示)
$ mkvirtualenv py3_django
#进入虚拟环境
$ workon py3_django
#在虚拟环境中安装所有依赖包
$ pip install -r req_list.txt
注意
:如果你在开发时就直接连接的linux的数据库,则此次部署时,无需数据库同步。否则要先在linux系统上创建一个同名数据库,然后把项目中每个app对应下的migrations
文件夹下的数据迁移部分给删除,然后分别执行python manage.py makemigrations
和python manage.py migrate
。当然,你也可以直接导出开发时的数据库文件,然后再把数据导入到linux系统的数据库中。
二,nginx
- nginx作为前端web服务器,处理静态资源,然后将非静态资源请求转发给uwsgi处理,编辑nginx的配置文件,在server中增加以下内容:
server {
listen 80;
server_name localhost;
location / {
#将所有的参数转到uwsgi下
include uwsgi_params