先说说什么是uWSGI吧,他是实现了WSGI协议、uwsgi、http等协议的一个web服务器,那什么是WSGI呢?

WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx)与应用服务器(如uWSGI服务器)通信的一种规范(协议)。

还有一种wsgi,uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型(type of information)。

部署步骤:

1. 安装uWSGI

(lofter) ➜  dj_test git:(master) pip install uwsgi
Collecting uwsgi
/home/wang/.virtualenvs/lofter/local/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:318: SNIMissingWarning: An HTTPS request has been made, but the SNI (Subject Name Indication) extension to TLS is not available on this platform. This may cause the server to present an incorrect TLS certificate, which can cause validation failures. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#snimissingwarning.SNIMissingWarning
/home/wang/.virtualenvs/lofter/local/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:122: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.InsecurePlatformWarningDownloading uwsgi-2.0.13.1.tar.gz (784kB)100% |████████████████████████████████| 788kB 1.4MB/s
Building wheels for collected packages: uwsgiRunning setup.py bdist_wheel for uwsgi ... doneStored in directory: /home/wang/.cache/pip/wheels/01/e4/de/0b2bbeba234858bd780924d03031a4e817119aafb0cfc4c79e
Successfully built uwsgi
Installing collected packages: uwsgi
Successfully installed uwsgi-2.0.13.1

以上命令是安装目前稳定版本的,也可以安装LTS版本

# Or install LTS (long term support).
$ pip install https://projects.unbit.it/downloads/uwsgi-lts.tar.gz

  

2. 安装之后进行简单的测试:

2.1 创建一个test.py文件:

# test.py
def application(env, start_response):start_response('200 OK', [('Content-Type','text/html')])return [b"Hello World"] # python3#return ["Hello World"] # python2

2.2 启动uWSGI服务器:

uwsgi --http :8000 --wsgi-file test.py

意思是使用8000端口启动这个文件,效果如下:

 

(lofter) ➜  dj_test git:(master) uwsgi --http :8000 --wsgi-file test.py
*** Starting uWSGI 2.0.12 (64bit) on [Mon May 23 21:15:56 2016] ***
compiled with version: 4.8.4 on 08 April 2016 10:44:49
os: Linux-3.13.0-86-generic #130-Ubuntu SMP Mon Apr 18 18:27:15 UTC 2016
nodename: wang-N46VZ
machine: x86_64
clock source: unix
detected number of CPU cores: 8
current working directory: /home/wang/Workspace/Git/show-me-the-code/dj_test
detected binary path: /usr/local/bin/uwsgi
!!! no internal routing support, rebuild with pcre support !!!
*** WARNING: you are running uWSGI without its master process manager ***
your processes number limit is 62795
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uWSGI http bound on :8000 fd 4
spawned uWSGI http 1 (pid: 5539)
uwsgi socket 0 bound to TCP address 127.0.0.1:47320 (port auto-assigned) fd 3
Python version: 2.7.6 (default, Jun 22 2015, 18:01:27)  [GCC 4.8.2]
*** Python threads support is disabled. You can enable it with --enable-threads ***
Python main interpreter initialized at 0x21b8ff0
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 72768 bytes (71 KB) for 1 cores
*** Operational MODE: single process ***
WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x21b8ff0 pid: 5538 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI worker 1 (and the only) (pid: 5538, cores: 1)

2.3 访问 localhost:8000

显示 hello world(linux截图太麻烦了,见谅)

这就说明uWSGI启动成功了~可以设置uWSGI启动django了

3. 使用uWSGI启动django项目

(lofter) ➜  dj_test git:(master) uwsgi --http :8000 --file dj_test/wsgi.py
*** Starting uWSGI 2.0.12 (64bit) on [Mon May 23 21:19:35 2016] ***
compiled with version: 4.8.4 on 08 April 2016 10:44:49
os: Linux-3.13.0-86-generic #130-Ubuntu SMP Mon Apr 18 18:27:15 UTC 2016
nodename: wang-N46VZ
machine: x86_64
clock source: unix
detected number of CPU cores: 8
current working directory: /home/wang/Workspace/Git/show-me-the-code/dj_test
detected binary path: /usr/local/bin/uwsgi
!!! no internal routing support, rebuild with pcre support !!!
*** WARNING: you are running uWSGI without its master process manager ***
your processes number limit is 62795
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uWSGI http bound on :8000 fd 4
spawned uWSGI http 1 (pid: 5649)
uwsgi socket 0 bound to TCP address 127.0.0.1:60536 (port auto-assigned) fd 3
Python version: 2.7.6 (default, Jun 22 2015, 18:01:27)  [GCC 4.8.2]
*** Python threads support is disabled. You can enable it with --enable-threads ***
Python main interpreter initialized at 0x2263ff0
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 72768 bytes (71 KB) for 1 cores
*** Operational MODE: single process ***
WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x2263ff0 pid: 5648 (default app)
*** uWSGI is running in multiple interpreter mode ***

访问网址,就可以看见你的项目了~

常用命令:

uwsgi --chdir=/path/to/your/project \--module=mysite.wsgi:application \--env DJANGO_SETTINGS_MODULE=mysite.settings \--master --pidfile=/tmp/project-master.pid \--socket=127.0.0.1:49152 \      # can also be a file--processes=5 \                 # number of worker processes--uid=1000 --gid=2000 \         # if root, uwsgi can drop privileges--harakiri=20 \                 # respawn processes taking more than 20 seconds--max-requests=5000 \           # respawn processes after serving 5000 requests--vacuum \                      # clear environment on exit--home=/path/to/virtual/env \   # optional path to a virtualenv--daemonize=/var/log/uwsgi/yourproject.log      # background the process  

实际上到这里就算部署成功了,不过现实中一般使用nginx和uWSGI配合使用,使用nginx处理/static/以及/media/的请求,其他的交给uWSGI处理。

(下面基本是翻译,而且还没有翻译完

1. 安装nginx并配置nginx

sudo apt-get install nginx
sudo /etc/init.d/nginx start    # start nginx

配置文件(需要去看一下nginx简单配置)

# mysite_nginx.conf# the upstream component nginx needs to connect to
upstream django {# server unix:///path/to/your/mysite/mysite.sock; # for a file socketserver 127.0.0.1:8001; # for a web port socket (we'll use this first)
}# configuration of the server
server {# the port your site will be served onlisten      8000;# the domain name it will serve forserver_name .example.com; # substitute your machine's IP address or FQDNcharset     utf-8;# max upload sizeclient_max_body_size 75M;   # adjust to taste# Django medialocation /media  {alias /path/to/your/mysite/media;  # your Django project's media files - amend as required}location /static {alias /path/to/your/mysite/static; # your Django project's static files - amend as required}# Finally, send all non-media requests to the Django server.location / {uwsgi_pass  django;include     /path/to/your/mysite/uwsgi_params; # the uwsgi_params file you installed}
}

做个链接使得nginx可以访问到配置文件

sudo ln -s ~/path/to/your/mysite/mysite_nginx.conf /etc/nginx/sites-enabled/

2. 部署静态文件

python manage.py collectstatic

STATIC_ROOT一定要设置好了

3. 重启nginx(第一次部署需要重启,以后进行了第二步之后只需要重启uWSGI就可以了)

sudo /etc/init.d/nginx restart

4. 启动

uwsgi --socket :8001 --wsgi-file test.py

5. 添加uWSGI配置文件

# mysite_uwsgi.ini file
[uwsgi]# Django-related settings
# the base directory (full path)
chdir           = /path/to/your/project
# Django's wsgi file
module          = project.wsgi
# the virtualenv (full path)
home            = /path/to/virtualenv# process-related settings
# master
master          = true
# maximum number of worker processes
processes       = 10
# the socket (use the full path to be safe
socket          = /path/to/your/project/mysite.sock
# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum          = true

按照配置文件启动

uwsgi --ini mysite_uwsgi.ini # the --ini option is used to specify a file

6. 使用两者共同拉起项目

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

  

If that doesn’t work

Check your nginx error log(/var/log/nginx/error.log). If you see something like:

connect() to unix:///path/to/your/mysite/mysite.sock failed (13: Permission
denied)

then probably you need to manage the permissions on the socket so that nginx is allowed to use it.

Try:

uwsgi --socket mysite.sock --wsgi-file test.py --chmod-socket=666 # (very permissive)

or:

uwsgi --socket mysite.sock --wsgi-file test.py --chmod-socket=664 # (more sensible)

You may also have to add your user to nginx’s group (which is probably www-data), or vice-versa, so that nginx can read and write to your socket properly.

It’s worth keeping the output of the nginx log running in a terminal window so you can easily refer to it while troubleshooting.

参考:

http://baike.baidu.com/link?url=ClozvG5bxABaSkxztwURPZAOrySGwwBNMJEiPVOWfv7dPvJwEw_ZYPK3mUn0miC5_YNnHFG27tKvv6B3wktL1K

https://docs.djangoproject.com/en/1.9/howto/deployment/wsgi/uwsgi/

http://uwsgi-docs.readthedocs.io/en/latest/tutorials/Django_and_nginx.html

转载于:https://www.cnblogs.com/wswang/p/5521566.html

使用uWSGI部署django项目相关推荐

  1. nginx、uwsgi部署django项目理论+实战

    基本环境: Ubuntu 16.04.4 LTS python 3.5 virtualenv django project deployable #理论分析   部署django项目有很多方法,方法推 ...

  2. 使用Nginx+uWSGI部署Django项目

    1.linux安装python3环境 参考链接:https://www.cnblogs.com/zzqit/p/10087680.html 2.安装uwsgi pip3 install uwsgiln ...

  3. CENTOS7 使用 Nginx + Uwsgi 部署 Django 项目

    写在前面的话 最近总是见到有新学 Django 的朋友在部署自己的项目到 Linux 上面的时候运行不起来,所以就动手写了这篇博客. 对于不会搭建 Python 3 环境的朋友可以参考前面的博客[CE ...

  4. Ubuntu nginx+uwsgi部署Django项目

    前提条件:首先项目使用一下命令启动成功后,输入公网ip后可以启动成功 python manage.py runserver 0.0.0.0:80 一.阿里云配置安全组 添加8000端口 二.安装配置u ...

  5. 基于nginx和uWSGI在Ubuntu系统上部署Django项目

    1. nginx 1.1 安装 sudo apt-get install nginx 1.2启动.停止和重启 sudo /etc/init.d/nginx start sudo /etc/init.d ...

  6. centos7根据端口查进程_记录一次CentOs7下Nginx+WSGI部署Django项目(超详细)

    记录一次Django部署的文章,不是很熟悉Linux系统,踩了不少坑,本篇文章相当于是一个总结,我会在本文中详细介绍,部署单个Django项目和多个Django的方法,如读者有更好的方法,欢迎留言一起 ...

  7. uwsgi+nginx部署django项目(有图原理的详细展示的)

    1. 概念解析(wsgi协议,uwsgi协议,uWSGI) 参考:https://www.cnblogs.com/wspblog/p/8575101.html 1.1 现实世界的web请求: 1.2  ...

  8. docker部署django项目、mysql主从搭建、django实现读写分离

    目录 docker部署django项目 1.1 基于python基础镜像 将本地django项目打包并发到远程服务器上 将服务器上的.zip django项目解压 部署的具体流程 1.2 基于dock ...

  9. python项目管理器 宝塔面板 django 404_宝塔面板成功部署Django项目流程(图文)

    上线 Django 项目记录,超简单,避免无意义的踩坑! 第一步:安装python管理器 在宝塔在线面板安装" python项目管理器 " 第二步:安装适配python版本 因为服 ...

最新文章

  1. string与数值之间的转换
  2. 使用下列 else-if 排列来处理多个条件:
  3. C++ 标准库类型 queue
  4. 深圳当代艺术家的一次聚会
  5. static、const用法
  6. oracle差异收集明细,Oracle收集表的数据与统计信息差异
  7. 朝鲜黑掉韩国政府版 Word
  8. 生态系统服务——土壤保持量分布数据
  9. 中国天气网城市代码Json数据
  10. 下行物理信道rs_LTE下行物理信道与物理信号
  11. 用DOI号批量爬取开源数据库文献数据(含文献 下载)
  12. 计算机毕业设计工作周记,电子及计算机毕业设计周记-20210628114255.docx-原创力文档...
  13. 笔记本 无线网联网 win10系统 ,台式机木有无线网卡,通过一根网线连接两台电脑,使台式机联网。...
  14. cuda the launch timed out and was terminated windows11解决方案 关闭TDR
  15. linux OOM killer分析
  16. 对不起,不知道这些,我劝你还是别做软件测试员了!
  17. leach协议c++代码_leach和leach-c协议仿真
  18. 反向代理神器 Nginx Proxy Manager 群晖Docker部署
  19. wxpython 优秀的界面_WxPython实现无边框界面
  20. Peewee fn 用法

热门文章

  1. 怎么让存储过程通用化_怎么做分布式存储的面试?
  2. java警惕自增的陷阱
  3. 8086地址传送指令LEA
  4. WriteN, RTMP send error
  5. linux ll 文件大小单位_该如何改善 Linux 系统性能?
  6. 安卓log.e函数打印示例_log1p()函数以及C ++中的示例
  7. Java ByteArrayInputStream reset()方法及示例
  8. python中减法运算函数_详解 Python 的二元算术运算,为什么说减法只是语法糖?...
  9. golang实现聊天室(二)
  10. mac给服务器传送文件