django+nginx+uwsgi部署

安装python

在python下载源码包:

wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz 
# 解压
tar -zxf  Python-3.6.5.tgz 
cd Python-3.6.5

#编译

./configure --prefix=/appliocation/python3 --enable-optimizations

make && make install 

# 配置环境变量
vim ~/.bash_prefile

# 在这一行增加python的bin路径,如下  
export PATH=$HOME/bin:/usr/local/python3/bin:/usr/local/bin:$PATH

source ~/.bash_profile

  安装django

pip3 isntall django==1.11.8
# 创建django项目
django-admin startproject hello_django
cd hello_django
#创建应用
python3 manager.py startapp app01
#创建uwsgi配置文件
vim hello_django.ini
#输入这些内容
# myweb_uwsgi.ini file
[uwsgi]

# Django-related settings

socket = :8080
#真实服务的端口

# Django项目根目录 (绝对路径)
chdir           = /root/hello_django

# wsgi.py文件在项目中的位置
module          = hello_django.wsgi

# process-related settings
# master
master          = true

# 运行的进程数
processes       = 4

# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum          = true

启动uwsgi

# 安装基础开发包
yum groupinstall "Development tools"
yum install zlib-devel bzip2-devel pcre-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel

# 安装uwsgi
pip install uwsgi
uwsgi --version    # 查看 uwsgi 版本

uwsgi hello_django/hello_django.ini
在seething.py修改才可以访问,默认只是localhost,如下
ALLOWED_HOSTS = ['192.168.0.75', '127.0.0.1', 'localhost']

 

安装Nginx

cd ~
wget http://nginx.org/download/nginx-1.5.6.tar.gz
tar xf nginx-1.5.6.tar.gz
cd nginx-1.5.6
./configure --prefix=/usr/local/nginx-1.5.6 \
--with-http_stub_status_module \
--with-http_gzip_static_module
make && make install

 

配置Nginx

找到nginx.conf,写入如下内容

server {
        #这里是访问时用到的端口
        listen       80;
        server_name  localhost;

        charset UTF-8;

        client_max_body_size 75M;
        location / {
                include uwsgi_params;
                #同uwsgi内容
                uwsgi_pass 127.0.0.1:8080;
                #链接超时时间
                uwsgi_read_timeout 30;
        }
    }

如此一来,重启你的nginx,访问80端口,就能看到效果了。

还有问题?

你可能发现了,你网页上的静态资源无法访问!!比如说admin页面,会特别简陋,这是因为nginx+uwsgi+Django时,Django对静态资源的处理nginx不能代理(可能吧)。总之这种事不该让Django做,因为nginx在处理静态资源上能力更强,对于静态资源,就让nginx处理吧。 
通常来说,你会有两种静态资源/media/开头的链接和/static/开头的。static用来处理一些网站原始图片,视频,js,css文件,Django是自己就支持这种链接的。那么如何关闭让Django处理/static/开头的文件呢,很简单,在setting.py中将DEBUG值改为False,这时,Django就不去处理/static/文件了。 
那么/media/呢?一般来说,用户上传的图片,我们会保存起来,在网页上显示时候就用/media/,在setting.py中设置

MEDIA_URL = '/media/' #访问的前缀链接
MEDIA_ROOT = os.path.join(BASE_DIR, '../media') #存放文件的具体位置

再在url.py中添加

from django.conf import settings
from django.conf.urls.static import static
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

这里的意思是在DEBUG=True时,会解析/media/文件,文件存放的位置是第二个参数。 
如此一来当即在部署为生产环境时,只需要吧DEBUG改为False,Django就不会去处理staticmedia了。

收集静态文件

Django有一个工具可以将应用里用到的所有静态文件收集起来,方便nginx解析。具体: 
setting.py中设置STATIC_ROOT = os.path.join(BASE_DIR, '../collectedstatic') 
这样收集的静态文件就都放进上面的目录里了。如何运行这个工具?python3 manager.py collectstatic

配置nginx解析静态文件

同样,nginx.conf 
首先,在文件顶部加入 
user root 
声明让root用户跑nginx,否则访问静态文件可能提示没有权限 
其次,在上面说的配置文件location /前加入以下带内容

      location /static/ {
            autoindex on;
            alias /root/SchoolBuyWeb/collectedstatic/;
        }

        location /media/ {
            autoindex on;
            alias /root/SchoolBuyWeb/media/;
        }

注意alias后对应好自己设定的目录即可! 
重启nginx,现在已经ok了~~

 

重启uWSGI服务器

There are several ways to make uWSGI gracefully restart.
有几种方法完美重启uWSGI。

# using kill to send the signal

#使用kill发送信号

kill -HUP `cat /tmp/project-master.pid`     (好用)

 

# or the convenience option --reload

#或者使用简单选项 --reload

uwsgi --reload /tmp/project-master.pid

 

# or if uwsgi was started with touch-reload=/tmp/somefile

#或者,如果uwsgi是使用touch-reload=/tmp/somefile启动

touch /tmp/somefile

 

Or from your application, in python:
或者在Python程序里:

uwsgi.reload()

 

注意,如果要使用pid,需要在uwsgi启动参数中指定 --pidfile,如:

#/etc/rc.local 修改自启动
/usr/local/bin/uwsgi /var/www/html/mz_uwsgi.ini --pidfile /tmp/uwsgi.pid

或者需要在mz_uwsgi.ini配置

pidfile=/tmp/mz_uwsgi.pid

 

sudo killall -9 uwsgi 这个命令也可以编辑杀死进程

比reboot服务器方便。

 

还有问题可以参考 http://www.runoob.com/django/django-nginx-uwsgi.html

 

posted @ 2018-04-22 20:42  Richie`  阅读(494)  评论(0编辑  收藏  举报