django+uwsgi+nginx 部署项目

django 项目完成后,使用django自带的runserver开发服务器使用在生产环境是不行的,性能远远跟不上。为此需要使用别的web服务器代替。

这里我就使用黄金搭配uwsgi和nginx。uwsgi是一个web服务器,其优点就是处理动态请求是强项。下面我们先将wusig和django搭配起来。

运行环境 ubuntu

1.安装 pip install uwsgi


2.进入django 项目目录


3.测试uwsgi +django能否使用

uwsgi --http 本机ip:端口 --file 项目名/wsgi.py --static-map=/static=项目static所在路径

浏览器 ip+端口运行 成功访问到项目页面,uwsgi+django 环境没有问题


4.编辑uwsgi.ini 配置文件

在 django 项目同级目录创建scripts目录,并且在目录中创建uwsgi.ini 文件,写入一下配置信息


# uwsig使用配置文件启动

[uwsgi]

# 项目目录

chdir=/home/windblow/Desktop/django/Yuwei

# 指定项目的application

module=Yuwei.wsgi:application

# 指定sock的文件路径        

socket=/home/windblow/Desktop/django/scripts/uwsgi.sock

# 进程个数        

workers=5

pidfile=/home/windblow/Desktop/django/scripts/uwsgi.pid
# 指定IP端口        

http=10.241.220.189:8080

# 指定静态文件

static-map=/static=/home/windblow/Desktop/django/Yuwei/yunweimain/static

# 启动uwsgi的用户名和用户组

uid=root

gid=root

# 启用主进程

master=true

# 自动移除unix Socket和pid文件当服务停止的时候

vacuum=true

# 序列化接受的内容,如果可能的话
thunder-lock=true

# 启用线程

enable-threads=true

# 设置自中断时间

harakiri=30

# 设置缓冲

post-buffering=4096

# 设置日志目录

daemonize=/home/windblow/Desktop/django/scripts/uwsgi.logbaocun


保存后运行 uwsgi --ini  uwsgi.ini

ip + 端口访问,成功。

uwsgi配置完成

5 由于uwsgi 的静态请求功能并不是它的强项,而nginx的强项就是静态请求,而且其并发性能很好。所以我们用nginx+uwsgi的方式进行部署。

具体流程是客户端碰请求静态文件时候,交给nginx处理,碰到动态请求时候,nginx交给uwsgi进行处理。所有请求最先交给nginx处理,然后再给uwsgi。

大致的机构如下:

客户端请求-------->nginx--------->uwsgi--------->django项目。

6.安装nginx

apt-get install nginx

安装完成后,运行如下命令:

/etc/init.d/nginx start

得到 欢迎界面。说明nginx安装成功。


7.接下来要将nginx和uwsgi进行联系起来。

cd /etc/nginx


默认配置都在nginx.conf中。


一定要记得用户那里很重要。(入过坑)
接下来
cd conf.d
会发现什么都没有。
vi default.conf  创建一个配置文件。将nginx和uwsgi联系起来。
在里面写入
server {
        listen 80; # 我要监听那个端口
        server_name 10.241.220.189; # 你访问的路径前面的url名称
        access_log /var/log/nginx/access.log; # Nginx日志配置
        charset utf-8; # Nginx编码
        gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream; # 支持压缩的类型

        error_page 404 /404.html; # 错误页面
        error_page 500 502 503 504 /50x.html; # 错误页面

# 指定项目路径uwsgi
 location / {
        # 这个location就和咱们Django的url(r'^admin/', admin.site.urls)
        include uwsgi_params; # 导入一个Nginx模块他是用来和uWSGI进行通讯的
        uwsgi_connect_timeout 30; # 设置连接uWSGI超时时间
        uwsgi_pass unix:/home/windblow/Desktop/django/scripts/uwsgi.sock; # 指定
uwsgi的sock文件所有动态请求就会直接丢给他
            }

# 指定静态文件路径
location /static/ {
       alias /home/windblow/Desktop/django/Yuwei/yunweimain/static/;
        index index.html index.htm;
                }
}

保存重启nginx

/etc/init.d/nginx restart

成功访问到我们的页面。

你可能感兴趣的:(python,django,uwsgi,nginx,python)