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
pip install uwsgi

启动uwsgi

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

配置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了~~

猜你喜欢

转载自www.cnblogs.com/richiewlq/p/8909358.html
今日推荐