一、概述

使用runserver可以使我们的django项目很便捷的在本地运行起来,但这只能在局域网内访问,如果在生产环境部署django,就要多考虑一些问题了。比如静态文件处理,安全,效率等等,本篇文章总结归纳了一下基于uwsgi+Nginx下django项目生产环境的部署

uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。
要注意 WSGI / uwsgi / uWSGI 这三个概念的区分。
  • WSGI是一种通信协议。
  • uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。
  • 而uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。
uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型(type of information),每一个uwsgi packet前4byte为传输信息类型描述,它与WSGI相比是两样东西。

准备条件

默认ubuntu已经有了python3,但是pip没有安装。

apt-get install -y python3-pip

安装虚拟环境

pip3 install virtualenv

创建虚拟环境

sudo mkdir /virtualenvs
cd /virtualenvs
sudo /usr/local/bin/virtualenv -p /usr/bin/python3 --no-site-packages venv

安装django

/virtualenvs/venv/bin/pip3 install django

二、运行django项目

创建django项目

root@ubuntu:~# mkdir /www
root@ubuntu:~# cd /www/
root@ubuntu:/www# /virtualenvs/venv/bin/django-admin startproject mysite1
root@ubuntu:/www# cd mysite1/
root@ubuntu:/www/mysite1# /virtualenvs/venv/bin/python manage.py startapp blog
root@ubuntu:/www/mysite1# mkdir static

编辑配置文件

root@ubuntu:/www/mysite1# vim mysite1/settings.py

允许监听所有IP,注意:'*'必须用引号包起来

ALLOWED_HOSTS = ['*']

原生启动方式

/virtualenvs/venv/bin/python manage.py runserver 0.0.0.0:

访问页面

http://192.168.10.104:8000/

效果如下:

三、基于uwsgi+django的实现

安装uwsgi

/virtualenvs/venv/bin/pip3 install uwsgi

使用命令启动uwsgi

先关闭上面启动的Django项目,使用Ctrl+c,就可以取消。

第一步:进入django项目

cd /www/mysite1/

第二步:命令测试启动

/virtualenvs/venv/bin/uwsgi --http 0.0.0.0: --file mysite1/wsgi.py --static-map=/static=static

参数说明:

--http 这个就和runserver一样指定IP 端口

--file 这个文件就里有一个反射,如果你在调用他的时候没有指定Web Server就使用默认的

注意:mysite1是一个相对路径。--file它的绝对路径是/www/mysite1/mysite1/wsgi.py

--static 做一个映射,指定静态文件。

此时,访问http://192.168.10.104:8000/

如果访问正常,表示项目启动成功

uwsgi配置文件

使用Ctrl+c,取消uwsgi启动。

第一步:在django项目同级目录创建uwsgi目录,用于存放相关文件

cd /www/mysite1
mkdir uwsgi

项目结构如下:

mysite1/
├── blog
│ ├── admin.py
│ ├── apps.py
│ ├── __init__.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── db.sqlite3
├── manage.py
├── mysite1
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── uwsgi
└── static

第二步:进入script目录,创建一个uwsgi.ini文件

cd /www/mysite1/uwsgi
vim uwsgi.ini

编辑uwsgi.ini文件内容如下:

[uwsgi]

# Django-related settings
# the base directory (full path)
chdir = /www/mysite1
# Django's wsgi file
module = mysite1.wsgi
# the virtualenv (full path)
home = /virtualenvs/venv
# process-related settings
# master
master = true
# maximum number of worker processes
processes =
# pid file
pidfile = /www/mysite1/uwsgi/uwsgi.pid
# The address and port of the monitor
http = :
# clear environment on exit
vacuum = true
#The process runs in the background and types the log to the specified log file
daemonize = /www/mysite1/uwsgi/uwsgi.log

注意几个很重要的参数

chdir 项目目录,写绝对路径

module Django的 wsgi 文件,表示mysite1/wsgi.py

home 虚拟环境目录,写绝对路径

daemonize 进程在后台运行,并将日志打到指定的日志文件

启动django项目

root@ubuntu:~# cd /www/mysite1/
root@ubuntu:/www/mysite1# /virtualenvs/venv/bin/uwsgi --ini uwsgi/uwsgi.ini
[uWSGI] getting INI configuration from uwsgi/uwsgi.ini

查看文件

root@ubuntu:/www/mysite1# ll uwsgi/
总用量
drwxr-xr-x root root 8月 : ./
drwxr-xr-x root root 8月 : ../
-rw-r--r-- root root 8月 : uwsgi.ini
-rw-r----- root root 8月 : uwsgi.log
-rw-rw-rw- root root 8月 : uwsgi.pid

刷新页面,查看访问是否正常。

uwsgi 常用的启动命令

uwsgi --ini uwsgi.ini # 启动
uwsgi --reload uwsgi.pid # 重启
uwsgi --stop uwsgi.pid # 关闭

四、Nginx代理uwsgi

安装nginx

apt-get install -y nginx

编辑配置文件

cd /etc/nginx/sites-enabled
vim mysite1.conf

内容如下:

server {
listen ;
server_name localhost; # 指定项目路径uwsgi
location / {
include uwsgi_params; # 导入一个Nginx模块他是用来和uWSGI进行通讯的
uwsgi_connect_timeout ; # 设置连接uWSGI超时时间
uwsgi_pass unix:/www/mysite1/uwsgi/mysite1.sock; # 指定uwsgi的sock文件所有动态请求就会直接丢给他
} # 指定静态文件路径
location /static/ {
alias /www/mysite1/static/;
} }

更改uwsgi配置

改为socket方式

cd /www/mysite1/uwsgi
vim uwsgi.ini

内容如下:

[uwsgi]

# Django-related settings
# the base directory (full path)
chdir = /www/mysite1
# Django's wsgi file
module = mysite1.wsgi
# the virtualenv (full path)
home = /virtualenvs/venv
# process-related settings
# master
master = true
# maximum number of worker processes
processes =
# pid file
pidfile = /www/mysite1/uwsgi/uwsgi.pid
# socket file path (full path)
socket = /www/mysite1/uwsgi/mysite1.sock
# clear environment on exit
vacuum = true
#The process runs in the background and types the log to the specified log file
daemonize = /www/mysite1/uwsgi/uwsgi.log

重新加载uwsgi

/virtualenvs/venv/bin/uwsgi --reload uwsgi.pid

加载nginx配置文件

nginx -s reload

查看端口,8000已经为nginx接管了

root@ubuntu:/etc/nginx/sites-enabled# netstat -anpt|grep 8000
tcp 0.0.0.0: 0.0.0.0:* LISTEN /nginx -g daem
tcp 192.168.10.102: 192.168.10.105: ESTABLISHED /nginx: worker
tcp 192.168.10.102: 192.168.10.105: ESTABLISHED /nginx: worker

刷新页面,效果同上!

进入目录 /www/mysite1/static ,放一张图片 girl.jpg

访问图片

http://192.168.10.102:8000/static/girl.jpg

效果如下:

本文参考链接:

http://www.py3study.com/Article/details/id/323.html

https://www.jianshu.com/p/07458e99198a

ubuntu Django + Uwsgi + Nginx 的生产环境部署的更多相关文章

  1. 10: Django + Uwsgi + Nginx 的生产环境部署

    1.1 一些重要概念 1.Web协议介绍 Web协议出现顺序: CGI -> FCGI -> WSGI -> uwsgi 1. CGI:  最早的协议 2. FCGI:  比CGI快 ...

  2. Django + Uwsgi + Nginx 的生产环境部署实战

    目录 Django + Uwsgi + Nginx 的生产环境部署实战 安装Uwsgi 一.使用命令来启动django项目 二.使用配置文件来启动我们的Django项目 安装Nginx 配置Nginx ...

  3. Django + Uwsgi + Nginx 的生产环境部署

    使用runserver可以使我们的django项目很便捷的在本地运行起来,但这只能在局域网内访问,如果在生产环境部署django,就要多考虑一些问题了.比如静态文件处理,安全,效率等等,本篇文章总结归 ...

  4. Django + Uwsgi + Nginx 实现生产环境部署

    本节内容 uwsgi 介绍 uwsgi安装使用 nginx安装配置 django with nginx 如何在生产上部署Django? Django的部署可以有很多方式,采用nginx+uwsgi的方 ...

  5. 11: Django + gunicorn + Nginx 的生产环境部署

    1.1 gunicorn介绍   1.Gunicorn 1. Gunicorn是使用Python实现的WSGI服务器, 直接提供了http服务, 并且在woker上提供了多种选择, gevent, e ...

  6. Django + Uwsgi + Nginx 实现生产环境 项目部署

    内容: uwsgi 介绍 uwsgi安装使用 nginx安装配置 django with nginx 如何在生产上部署Django项目? Django项目的部署可以有很多方式,采用nginx+uwsg ...

  7. Django+uwsgi+nginx+angular.js项目部署

    这次部署的前后端分离的项目: 前端采用angular.js,后端采用Django(restframework),他俩之间主要以json数据作为交互 Django+uwsgi的配置可以参考我之前的博客: ...

  8. django+nginx+python3 生产环境部署

    一.安装python基础环境 1.安装各类基础模块 yum install  gcc-c++ wget openssl-devel bzip2-devel expat-devel gdbm-devel ...

  9. Ubuntu+Django+uWSGI+Nginx部署Django项目

    安装uWSGI,pip依据自己要使用的python版本自行选择,python2.x版本使用pip进行安装,python3.x版本使用pip3进行安装 pip install uwsgi 配置uWSGI ...

随机推荐

  1. 第09组 Alpha冲刺(5/6)

    队名:观光队 组长博客 作业博客 组员实践情况 王耀鑫 过去两天完成了哪些任务 文字/口头描述 完成服务器连接数据库部分代码 展示GitHub当日代码/文档签入记录 接下来的计划 服务器网络请求,前端 ...

  2. 调用Fluent进行多工况计算总结

    算例来源:https://confluence.cornell.edu/display/SIMULATION/FLUENT+-+Turbulent+Pipe+Flow 有时候我们对同一模型进行多工况计 ...

  3. Excel中筛选两个表中相同的数据和快速填充一列的公式

    将两个工作表放在一个文件中,使用if函数和countif函数判断 =if(判断条件countif(区域,条件),真值,[假值]) 实例 =if(countif(Sheet2!$A$1:$A$44,A2 ...

  4. Unable to resolve dependency for ':app@debug/compileClasspath' could not resolve com.android.support:design:28.0.0

    使用AndroidStudio3.2报这个错 配置 解决方法 1)去掉代理 gradle目录的下代理属性也 注销掉.   2)项目的gradle设定 3)设定项目的gradle-wrapper.pro ...

  5. js进行MD5加密(含中文),与后台JAVA加密之后结果不同(解决)

    开发小程序过程中与后台进行接口沟通,前期接口经过MD5加密和AES加密之后,后台进行解密. 今天出现一种情况,我前台加密之后的md5串与后台加密不同,后台发现可能是带用中文的原因, 这是加密之前的串: ...

  6. input file上传文件弹出框的默认格式设置

    我们使用html的input 标签type="flie"时,如何设置默认可选的文件格式 <input id="doc_file" type="f ...

  7. 【C++】C++中的异常解析

    异常是程序在执行期间产生的问题.C++ 异常是指在程序运行时发生的特殊情况,比如尝试除以零的操作. 异常提供了一种转移程序控制权的方式.C++ 异常处理涉及到三个关键字:try.catch.throw ...

  8. VS2015 创建C++动态库及使用

    转载:https://blog.csdn.net/w_x_myself/article/details/82252646 1.dll的特点 代码复用是提高软件开发效率的重要途径.一般而言,只要某部分代 ...

  9. (转)LoadRunner之录制你的第一个脚本

    LoadRunner安装完成之后,肯定就迫不及待的想要上手试用了.下面就是讲一下LR脚本录制的流程和基本的设置. 1.先放一张脚本录制以及运行的流程图 2.脚本录制步骤 1)以管理员身份打开LR软件, ...

  10. [转]Vue中用props给data赋初始值遇到的问题解决

    原文地址:https://segmentfault.com/a/1190000017149162 2018-11-28更:文章发布后因为存在理解错误,经@Kim09AI同学提醒后做了调整,在此深表感谢 ...