整理:Django部署

使用Django框架开发web项目的确很快,但是很多pythoner对部署很头疼,因为网上没有系统的部署教程,经过几天拆腾,总算部署成功,在这里面总结一下,希望能帮到大家。

主流的部署方案:

  1)、httpd + wsgi  (官方推荐,但是网上对其性能评价不高)

  2)、nginx + uwsgi 

这里我们主要讲很第2种方案,环境为python3.5 + Django1.10 + uwsgi2.0.14 + nginx1.10.1 + Centos6.5

一、搭建初始django环境

1、安装开发环境

yum groupinstall "Development tools"
yum install zlib-devel bzip2-devel pcre-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel

2、编译安装python3.5

wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tar.xz

然后编译安装python,在编译(make命令)python时要注意看最出输出有没有提示缺少依赖的包,一般centos都会缺少以下包

The necessary bits to build these optional modules were not found:
_dbm                  _gdbm                 _lzma  

最好是能先把这些相关的dev包安装一下,再重新make。没问题后再make install。_lzma的开发包一直没有找到,直接跳过也不影响。

3、替换系统中默认的python的版本

默认是2.6.6,有很多程序需要依赖它,所以无法卸载,只有替换掉,方法如下:

mv /usr/bin/python /usr/bin/python2.6.6
rm -f /usr/bin/python
ln -s /usr/local/python3.5.2/bin/python3.5 /usr/bin/python

4、修改yum的配置文件中指定的python程序为之前版本的python

#!/usr/bin/python  修改为 #!/usr/bin/python2.6

5、编译安装django 10.1

wget https://www.djangoproject.com/m/releases/1.10/Django-1.10.2.tar.gz

6、在使用django自带的wsgi测试网站是否能正常运行

python manage.py runserver 0.0.0.0:80

如果不能运行,先解决掉问题再进行以下步骤

注:

  如果你的django项目下面有多个app,最好是把所有的静态文件收集到一个目录,以便后面nginx加载,方法如下:

  在setting.py文件中添加:STATIC_ROOT = os.path.join(BASE_DIR, "static/")

  在命令行运行:python manage.py collectstatic

  这样就会在你的project/static 下面出现各个app的静态文件目录

二、搭建uwsgi

1、安装uwsgi

pip install uwsgi

2、测试uwsgi是否能调起我们的网站

这里需要知道的是uwsgi有两种去后端通信的方式:一种是端口,另一种是通过socket。

所以我们有两种测试方式(二者选其一即可):

uwsgi --http :8000 --module mysite.wsgi --chmod-socket=664 

运行后,在浏览器中测试输入服务器http://ip:8000/appname测试一下是否能打开网站

uwsgi --socket mysite.sock --module mysite.wsgi --chmod-socket=664

这种方式运行的网站,就只能查看终端输出的日志了,也可以看看进程是否存在

3、创建uwsgi的配置文件

# cat mysite_uwsgi.ini 

[uwsgi]
# Django-related settings
# the django project directory (full path)
chdir = /root/mysite
# Django's wsgi file
module = mysite.wsgi
# process-related settings
# master
master = true
# maximum number of worker processes
processes = 10
#threads = 2
max-requests = 6000
chmod-socket = 664
# clear environment on exit
vacuum = true
socket = /root/mysite/mysite.socket
#background running  
daemonize = /root/mysite/logs/uwsgi.log

4、正式运行uwsgi

uwsgi --ini mysite_uwsgi.ini 

三、搭建nginx

1、安装nginx

pip install nginx

2、创建nginx配置文件

# cat mysite_nginx.conf 

server {
listen      80;
server_name blog.learndjango.cn; 
charset     utf-8;
access_log /root/mysite/logs/nginx_access.log;
error_log  /root/mysite/logs/nginx_error.log;
# max upload size
client_max_body_size 75M;   # adjust to taste
location /static {
        alias /root/mysite/static; # your Django project's static files - amend as required
  }
# Finally, send all non-media requests to the Django server.
location / {
    uwsgi_pass unix:///root/mysite/mysite.socket;
    include    /etc/nginx/uwsgi_params; # the uwsgi_params file you installed
  }
}

3、把该配置文件加入nginx主配置文件

为了管理方便,我们先在nginx下面创建一个sites-enabled目录,然后把上面创建的nginx配置链接到该目录下面

ln -s  mysite_nginx.conf  /etc/nginx/sites-enabled/mysite_nginx.conf;

然后在/etc/nginx/nginx.conf中添加该文件

[root@instance-6ge2skst mysite]# cat /etc/nginx/nginx.conf

.............
.............
# for more information.
#include /etc/nginx/conf.d/*.conf;  #注释掉这个默认配置
include /etc/nginx/sites-enabled/*.conf;

注:一定要注释掉默认的配置文件/etc/nginx/conf.d/*.conf,不然你的网站就不能运行,或者你把默认的网站的端口改成其它的,比如801什么的也可以

5、启动nginx

service nginx start

OK,这样就搭建完成了

2

热门评论