Ubuntu下Django+uwsgi+nginx项目部署
在Ubuntu下,Django项目的部署说简单简单,说难对于新手可能一周都搞不定,经常出现500和502,505错误,我个人也是研究了很久,才把项目部署好。
环境说明
1.ubuntu 环境
- Ubuntu 16.04.2 LTS
2.python 环境
- python 2.7 / python 3.6
环境搭建
1.python环境
我的ubuntu自带了两个python环境,分别是2.7和3.5,python2和3的差别我不在这里区分了,直接说python virtualenv的环境搭建了。
什么是virtualenv呢?virtualenv就是python的虚拟环境,我们一台服务器上可能要部署多个python项目,不同项目的python包依赖是不同的,更有甚者有的项目是python2开发的,有的项目是python3开发的,为了 避免python环境混乱,项目难以维护,我个人建议使用virtualenv来进行环境的搭建。
安装方法
$ sudo apt-get update # 系统更新
$ sudo pip install virtualenv #安装virtualenv
$ sudo pip install virtualenvwrapper # 安装virtualenvwrapper,管理虚拟环境
为了使virtualenvwrapper生效,我们需要添加环境变量
sudo vi ~/.bashrc
然后添加如下代码
if [ -f /usr/local/bin/virtualenvwrapper.sh ]; then
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
fi
保存退出,然后使用 source ~/.bashrc 命令使配置文件生效
新建虚拟环境
mkvirtualenv 环境名
比如 mkvirtualenv py_test
这样会创建一个名字为py_test
的虚拟环境,此时python的版本是默认系统执行python
命令的版本。如果你此时在跟着我的文档做实验,那么你会看到你的命令行之前多了(py_test)
,这是因为你已经进入到新建的虚拟环境之中,退出使用 deactivate
命令,即恢复正常。
mkvirtualenv -p python解释器路径 虚拟环境名
查看python解释器的路径可以使用which
命令,which python
,
mkvirtualenv -p /usr/bin/python3.5 py3
这样就创建好了一个python3.5版本名为py3
的虚拟环境。
退出虚拟环境使用deactivate
命令即可
uwsgi 安装
uwsgi安装
在虚拟环境下执行sudo pip install uwsgi
安装uwsgi
nginx 安装
安装方法有两种:
第一种apt-get的方式安装
sudo apt-get install nginx
nginx的配置文件在/etc/nginx/目录下
第二种是去官网下载,然后去编译安装,这里不在赘述。
项目的部署
1.项目上穿到服务器的制定文件夹,我这里以我自己的Miaodu
项目为例来说明,为了演示方便,我直接上传到了家目录 根文件夹就是~/Miaodu
2.uwsgi配置
在项目目录下新建一个 mysite_uwsgi.ini
作为uwsgi的启动参数,内容如下
# mysite_uwsgi.ini file
[uwsgi]
# Django-related settings
# the base directory (full path)项目的根文件夹
chdir = /home/rzy/Miaodu
# Django's wsgi file#django的wsgi文件 一般都是 项目名.wsgi
module = Miaodu.wsgi
# process-related settings
# master
master = true
# maximum number of worker processes最大工作进程数量
processes = 10
# the socket (use the full path to be safe 启动的端口
socket = :8010
# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
vacuum = true
# 日志输出文件位置
daemonize = /home/rzy/log/httpServer.log
# 下面两个缓冲参数不添加的话经常会出现5XX服务器错误
buffer-size = 65535
post-buffering = 65535
# python虚拟环境的目录
virtualenv = /home/rzy/.virtualenvs/test
nginx配置
在项目目录下新建 miandu_nginx_conf.conf
文件,作为nginx的配置文件,内容如下
#miandu_nginx_conf.conf
# the upstream component nginx needs to connect to
upstream MiaoduProject {
#server unix:///home/rzy/TextOnlinExam/mysite.sock; # for a file socket
# 这里的端口号要与你的mysite_uwsgi.ini中socket的相同
server 127.0.0.1:8010; # for a web port socket (we'll use this first)
}
# configuration of the server
server {
# the port your site will be served on
listen 80;
# the domain name it will serve for
# 这里写配置你的ip地址或者域名
server_name miaodu.cjluzzl.cn; # substitute your machine's IP address or FQDN
charset utf-8;
# max upload size
client_max_body_size 75M; # adjust to taste
# 项目的media文件夹的绝对路径
location /media {
alias /home/rzy/Miaodu/media; # your Django project's media files - amend as required
}
# 项目static文件夹的绝对路径
location /static {
alias /home/rzy/Miaodu/mystatic; # your Django project's static files - amend as required
}
# Finally, send all non-media requests to the Django server.
location / {
# 上面upstream后面写什么这里就写什么,注意多个项目的重名问题,最好不要出现
uwsgi_pass MiaoduProject;
include /etc/nginx/uwsgi_params; # the uwsgi_params file you installed
}
}
然后创建一个软链接到nginx的sites-enabled
目录,直接
sudo ln -s miandu_nginx_conf.conf /etc/nginx/sites-enabled
这样的话就就完成了uwsgi
和nginx
的配置,然后重启nginx,在启动uwsgi
重启nginx: sudo nginx -s reload
启动uwsgi: uwsgi --ini mysite_uwsgi.ini
如果你ip和域名没问题的话,就可以访问了
建议设置Debug=True,防止系统问题所造成的5XX问题