原文来自:

http://www.oschina.net/question/54100_30386

http://obmem.info/?p=703

常见的django webapp 部署方式采用FCGI 或 WSGI的方式部署,今天我这备忘下采用uWSGI的部署方式。 目前我这博客就是采用 Nginx + uWSGI + Python + Django 构建的,部署虽没有php那样扔到目录那么方便,但是并发和性能消耗还是非常不错的。这里不想赘述关于FCGIWSGI,uWSGI之间的比较,网上关于这样的对比测试也有很多。这里说下部署过程。 uWSGI 的官方网站 http://projects.unbit.it/uwsgi/ wiki介绍的很详细。 Nginx关于HttpUwsgiModule的介绍http://wiki.nginx.org/HttpUwsgiModule.有这些资料参考,安装部署是很容易的事情。

uWSGI的安装

下载uWSGI的最新版

1 wget http://projects.unbit.it/downloads/uwsgi-0.9.9.2.tar.gz

因为我最后采用xml配置django app 的部署,所以编译 uWSGI 时候需要把libxml编译进去

1 sudo apt-get install libxml2-dev

剩下的就简单了

1 tar zxvf uwsgi-0.9.9.2.tar.gz
2 cd uwsgi-0.9.9.2
3 make -f Makefile.Py26 #指定你python的版本,如果你的python是2.7 就应该是 make -f Makefile.Py27
4 cp uwsgi /usr/sbin/uwsgi

至此 uWSGI 就算是安装完成了,下一步安装 Nginx > 0.8 的版本,因为只有Nginx > 0.8 的版本才支持wsgi

Nginx 安装

Ubuntu 默认源里面的Nginx版本比较旧,这里需要先添加一个Nginx的源,来通过apt-get安装新版本的Nginx

1 sudo add-apt-repository ppa:nginx/stable
2 apt-get update
3 apt-get install nginx

接下来配置Nginx 和 uWSGI部署Django App 了. 首先我们在Nginx中新建一个站点配置文件:

1 sudo vi /etc/nginx/sites-enabled/blog.hysia.com

内容如下:

01 server {
02     listen   80; ## listen for ipv4; this line is default and implied
03     #listen   [::]:80 default ipv6only=on; ## listen for ipv6
04  
05     server_name blog.hysia.com;
06  
07     access_log /var/log/nginx/blog.hysia.com-access.log ;
08     error_log /var/log/nginx/blog.hysia.com-error.log ;
09  
10     location / {
11             uwsgi_pass 127.0.0.1:8630;
12             include uwsgi_params;
13     }
14  
15 }

这样Nginx算是配置完了,现在看我们的Django app如何配置。

配置Django app

配置很简单,几乎不用改动你app的任何文件。
首先在你的app目录创建个wsgi.py 文件,内容如下:

1 import os,sys
2  
3 if not os.path.dirname(__file__) in sys.path[:1]:
4     sys.path.insert(0, os.path.dirname(__file__))
5 os.environ['DJANGO_SETTINGS_MODULE'= 'settings'
6  
7 from django.core.handlers.wsgi import WSGIHandler
8 application = WSGIHandler()

然后在app目录创建个django.xml文件,作为uWSGI运行的配置文件,内容如下:

1 <uwsgi>
2     <socket>127.0.0.1:8630</socket>
3     <chdir>/home/hysia/website/blog</chdir>
4     <pythonpath>..</pythonpath>
5     <module>wsgi</module>
6 </uwsgi>

最后一步,运行 uWSGI 就行了,如下:

1 uwsgi -x /home/hysia/website/blog/django.xml

就这样你的Django app 就用 uWSGI hold住了。当然django.xml的配置远不止这些,比如log文件,内存限制等等,具体的大家可以参看 http://projects.unbit.it/uwsgi/wiki/Example uWSGI handle 多个 Django app 的时候性能更出众,更多的探索自己去动手实践吧。

文章出处: http://simple-is-better.com/news/756

个人觉得php最方便的就是deployment了,只要把php文件丢到支持php的路径里面,然后访问那个路径就能使用了;无论给主机添加多少php应用,只要把目录改好就没你的事了,完全不用关心php-cgi运行得如何,deployment极为方便。

反观python,部属起来真是头痛,常见的部署方法有:

  1. fcgi:用spawn-fcgi或者框架自带的工具对各个project分别生成监听进程,然后和http服务互动
  2. wsgi:利用http服务的mod_wsgi模块来跑各个project

无论哪种都很麻烦,apache的mod_wsgi配置起来很麻烦,内存占用还大,如果要加上nginx作为静态页面的服务器那就更麻烦了;反正我的应用基本上到后来都是是各个project各自为战,且不说管理上的混乱,这样对负载也是不利的,空闲的project和繁忙的project同样需要占用内存,很容易出现站着茅坑不拉屎的现象。

如果有个啥东东能像php-cgi一样监听同一端口,进行统一管理和负载平衡,那真是能省下大量的部署功夫。偶然看到了uWSGI,才发现居然一直不知道有那么方便地统一部署工具。

uWSGI,既不用wsgi协议也不用fcgi协议,而是自创了一个uwsgi的协议,据说该协议大约是fcgi协议的10倍那么快,有个比较见下图

uWSGI的主要特点如下,其中一些功能让我感动得泪流满面

  1. 超快的性能
  2. 低内存占用(实测为apache2的mod_wsgi的一半左右)
  3. 多app管理(终于不用冥思苦想下个app用哪个端口比较好了-.-)
  4. 详尽的日志功能(可以用来分析app性能和瓶颈)
  5. 高度可定制(内存大小限制,服务一定次数后重启等)

总而言之uwgi是个部署用的好东东,正如uWSGI作者所吹嘘的:

If you are searching for a simple wsgi-only server, uWSGI is not for you, but if you are building a real (production-ready) app that need to be rock-solid, fast and easy to distribute/optimize for various load-average, you will pathetically and morbidly fall in love (we hope) with uWSGI.

正式开工

uwsgi的文档虽然蛮多也很详细,但是他们网站的排版真是让人无语,粗粗看上去根本不知道文档在哪里。其实是在这里:http://projects.unbit.it/uwsgi/wiki/Doc

0.安装uwsgi

ubuntu有uwsgi的ppa

add-apt-repository ppa:stevecrozz/ppa
apt-get update
apt-get install uwsgi

1. 用uwsgi代替mod_wsgi

nginx的整体配置说来话长,我也不再罗嗦了,假设已经明白nginx的基本配置,那么uwsgi就类似这么配置:

location / {include uwsgi_paramsuwsgi_pass 127.0.0.1:9090
}

这就是把所有url传给9090端口的uwsgi协议程序来互动。

再到project目录建立myapp.py,使得application调用框架的wsgi接口,比如web.py就是

......
app = web.application(urls, globals())
application = app.wsgifunc()

再比如django就是

.......
from django.core.handlers.wsgi import WSGIHandler
application = WSGIHandler()

然后运行uwsgi监听9090,其中-w后跟模块名,也就是刚才配置的myapp

uwsgi -s :9090 -w myapp

运行网站发现已经部署完成了。

2. uwsgi的参数

以上是单个project的最简单化部署,uwsgi还是有很多令人称赞的功能的,例如

并发4个线程

uwsgi -s :9090 -w myapp -p 4

主控制线程+4个线程

uwsgi -s :9090 -w myapp -M -p 4

执行超过30秒的client直接放弃

uwsgi -s :9090 -w myapp -M -p 4 -t 30

限制内存空间128M

uwsgi -s :9090 -w myapp -M -p 4 -t 30 --limit-as 128

服务超过10000个req自动respawn

uwsgi -s :9090 -w myapp -M -p 4 -t 30 --limit-as 128 -R 10000

后台运行等

uwsgi -s :9090 -w myapp -M -p 4 -t 30 --limit-as 128 -R 10000 -d uwsgi.log

更多用法见文档:http://projects.unbit.it/uwsgi/wiki/Doc

3.为uwsgi配置多个站点

为了让多个站点共享一个uwsgi服务,必须把uwsgi运行成虚拟站点:去掉“-w myapp”加上”–vhost”

uwsgi -s :9090 -M -p 4 -t 30 --limit-as 128 -R 10000 -d uwsgi.log --vhost

然后必须配置virtualenv,virtualenv是python的一个很有用的虚拟环境工具,这样安装

apt-get install python-setuptools
easy_install virtualenv

然后设置一个/多个app基准环境

virtualenv /var/www/myenv

应用环境,在此环境下安装的软件仅在此环境下有效

source /var/www/myenv/bin/activate
pip install django
pip install mako
...

最后配置nginx,注意每个站点必须单独占用一个server,同一server不同location定向到不同的应用不知为何总是失败,我猜也算是一个bug。

   server {listen       80;server_name  app1.mydomain.com;location / {include uwsgi_params;uwsgi_pass 127.0.0.1:9090;uwsgi_param UWSGI_PYHOME /var/www/myenv;uwsgi_param UWSGI_SCRIPT myapp1;uwsgi_param UWSGI_CHDIR /var/www/myappdir1;}}server {listen       80;server_name  app2.mydomain.com;location / {include uwsgi_params;uwsgi_pass 127.0.0.1:9090;uwsgi_param UWSGI_PYHOME /var/www/myenv;uwsgi_param UWSGI_SCRIPT myapp2;uwsgi_param UWSGI_CHDIR /var/www/myappdir2;}}

如此这般,重启nginx服务,两个站点就可以共用一个uwsgi服务了。

4.实战应用

最初的设置完毕以后,再添加的应用,只需要在nginx里面进行少量修改,无需重启uwsgi,就能立刻部署完毕。uwsgi自带了基于django的监控uwsgi运行状态的工具,就拿它来部署好了:

server {listen 80;root   /var/www/django1.23;index  index.html index.htm;server_name uwsgiadmin.django.obmem.info;access_log  /var/log/nginx/django.access.log;location /media/ {root /var/www/django1.23/adminmedia;rewrite ^/media/(.*)$ /$1 break;}location / {include uwsgi_params;uwsgi_pass 127.0.0.1:9090;uwsgi_param UWSGI_PYHOME /var/www/django1.23/vtenv;uwsgi_param UWSGI_CHDIR /var/www/django1.23/uwsgiadmin;uwsgi_param UWSGI_SCRIPT uwsgiadmin_wsgi;}
}

于是uwsgi的监控信息可以在http://uwsgiadmin.django.obmem.info/ 看到用户名密码都是admin。

再比如LBForum论坛程序的部署:根据安装说明安装完毕,再按部署说明修改完配置文件,然后只需修改nginx配置文件:

server {listen 80;root   /var/www/django1.23;index  index.html index.htm;server_name lbforum.django.obmem.info;access_log  /var/log/nginx/django.access.log;location / {include uwsgi_params;uwsgi_pass 127.0.0.1:9090;uwsgi_param UWSGI_PYHOME /var/www/django1.23/vtenv;uwsgi_param UWSGI_CHDIR /var/www/django1.23/LBForum/sites/default;uwsgi_param UWSGI_SCRIPT lbforum_wsgi;}
}

于是 http://lbforum.django.obmem.info/ 就是论坛程序了。

后记

虽然写出来寥寥几行,配置的时候我可吃尽了uwsgi的苦头,有些想当然的用法完全不能成立,–no-site参数一加上去其他都好使LBForum怎么都部署不了,一开始多站点公用uwsgi怎么都成功不了等等。

python世界很有趣,一直会发现好玩的东东,但是python世界也很折腾人,大部分东东都是dev版本,文档缺失,各种兼容问题……大约是因为在python中,有个idea到实现出来实在是太过高效的关系吧,唉,被折腾死了。

This entry was posted in Linux, python. Bookmark the permalink.
← Blog再次搬家,果然便宜没好货啊
用javascript来摧毁你所访问的网站 →

47 Responses to 配置Nginx+uwsgi更方便地部署python应用

  1. amao says:
    October 11, 2010 at 12:08 pm

    回去试试。python的部署一直没有看懂,希望这次可以搞定。
    谢谢!

    Reply

  2. ikbear says:
    October 11, 2010 at 12:30 pm

    哈哈,你的VPS能折腾脚本程序啦?

    Reply

  3. wsh0408 says:
    October 11, 2010 at 4:19 pm

    请问SimpleCD不更新了吗?

    Reply

    • observer says:
      October 11, 2010 at 5:45 pm

      这个还在搬家中,并且计划重写一遍,到时候再更新吧

      Reply

      • wsh0408 says:
        October 11, 2010 at 9:40 pm

        我一直用的simplecd,因为你抓vc的时候,vc里面很多资源还没有审核删除掉,现在vc很多资源都是“因为版权问题,资源已被删除!”,所以,simplecd保留了很多原汁原味的好资源,呵呵。希望能一直保留下去。

        Reply

        • rails says:
          October 13, 2010 at 2:38 pm

          印证了simplecd的初衷是相当的有先见之明啊

          Reply

  4. icyomik says:
    October 12, 2010 at 10:47 pm

    好文章,回去啃啃。。。

    Reply

  5. Pingback: MoinMoin 与 Nginx, fastcgi 与 uwgi 的配置 | apt-blog.net IT民工养成计划 PT博客

  6. 小明猪 says:
    October 14, 2010 at 8:47 pm

    博主文章都很好啊,前段时间在百毒中看到几篇文章,发现是obmem.com这个域名的文字,com域名访问时发现在墙外?: O

    Reply

  7. Liuxurong says:
    October 18, 2010 at 4:40 am

    http://developer.51cto.com/art/201010/229615.htm

    文章被偷了。

    Reply

    • observer says:
      October 19, 2010 at 4:32 pm

      给出处了,51cto这么做已经是我见过最厚道得了

      Reply

  8. liuxurong says:
    October 18, 2010 at 7:03 am

    [emerg]: open() “/usr/local/nginx/conf/uwsgi_params” failed (2: No such file or directory) in /usr/local/nginx/conf/nginx.conf:68
    configuration file /usr/local/nginx/conf/nginx.conf test failed

    这是为啥?。。求救~

    Reply

    • observer says:
      October 19, 2010 at 4:42 pm

      看nginx.conf文件第68行哪里写错了,你就这么问我我也不知道啊

      Reply

      • Liuxurong says:
        October 20, 2010 at 2:57 am

        include uwsgi_params

        他提示没 uwsgi_params 这个文件啊啊。

        Reply

        • observer says:
          October 20, 2010 at 7:44 am

          在uwsgi的安装目录/源码中找到这个文件,放到nginx配置目录下就行了

          Reply

  9. 刘齐 says:
    October 22, 2010 at 10:03 pm

    哈咯大大~~
    话说找你有点事情嘛
    想做一个非营利的视频站
    我想跟你好好研究研究嘛 留个电子邮箱地址或者发个邮件给我吧
    求你了 ~~~~(>_<)~~~~

    Reply

    • observer says:
      October 23, 2010 at 10:02 am

      抱歉,暂时还是没时间折腾,搞回网站弄完simplecd已经是极限了

      Reply

  10. Liuxurong says:
    October 23, 2010 at 11:21 am

    折腾了几天了,比较菜,百度GG了好多次…无果…汗,按上面说都安装好后,在django建的project建立了myapp

    也执行了 uwsgi -s :9090 -w myapp

    然后怎么处理project里的程序? 这时访问时候是不是会处理urls.py啊?..

    为什么会出现502呢..

    Reply

    • observer says:
      October 23, 2010 at 12:17 pm

      502错误就是nginx请求9090端口没有得到回应的错误
      1.用netstat -pan | grep 9090检查9090端口是否已被正确监听
      2.检查nginx配置的端口是否正确
      PS:uwsgi -s :9090 -w myapp 这一步要在myapp.py所在目录下执行才有效

      整个流程是这样:web请求->nginx->nginx根据配置把动态请求pass给后台uwsgi->uwsgi接受到请求执行wsgi的app->django自己折腾完毕返回给uwsgi->uwsgi把处理结果返回给nginx->nginx把处理结果返回给用户

      Reply

      • Liuxurong says:
        October 23, 2010 at 4:37 pm

        ImportError: Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined.

        > <怎么弄呢。

        Reply

        • Liuxurong says:
          October 23, 2010 at 4:44 pm

          在myapp加入了得出下面的结果

          os.environ['DJANGO_SETTINGS_MODULE'] = ‘settings’

          提示页也从502变了另外Django的提示页

          Reply

      • Liuxurong says:
        October 23, 2010 at 4:43 pm

        uwsgi.applications dictionary is not defined, trying with the “applications” one…
        applications dictionary is not defined, trying with the “application” callable.
        application 0 () ready

        Reply

        • Liuxurong says:
          October 23, 2010 at 4:48 pm

          变了这个 http://184.82.62.208/

          Reply

          • observer says:
            October 23, 2010 at 7:09 pm

            看了一下你的出错信息,你django目录没添加到系统目录啊,算了给你一个完整的django myapp.py的样板吧,你自己看着玩吧
            这个是一个叫techblog的开源djangoblog程序的配置,目录在/var/www/django1.23/techblog
            import os,sys

            from os.path import abspath, dirname, join
            from site import addsitedir

            sys.path.insert(0, abspath(join(dirname(__file__), "../")))

            from django.conf import settings
            os.environ["DJANGO_SETTINGS_MODULE"] = "techblog.settings"

            sys.path.insert(0, join("/var/www/django1.23/techblog", "apps"))

            from django.core.handlers.wsgi import WSGIHandler
            application = WSGIHandler()

          • Liuxurong says:
            October 23, 2010 at 10:32 pm

            谢谢谢!

  11. xiaojay says:
    October 27, 2010 at 2:23 am

    请问能不能 一个站点,开一个uwsgi, 不公用,端口不通,这样貌似配置更方便?
    是不是性能上有损失?

    Reply

    • xiaojay says:
      October 27, 2010 at 2:27 am

      端口不同,笔误了

      Reply

    • observer says:
      October 27, 2010 at 9:37 am

      性能上当然没啥损失;而且本来就是那么配的,都按第一步配不就行了?

      这篇文章我的原创之处就在于公用端口,这方面你连e文的资料都找不到,官方文档都语焉不详,是我自己摸索的,这个得意之处被你华丽丽地无视了,呵呵。

      关键在于,你应用如果比较多,有些应用只属于玩票性质的,但又需要它存在着,多个应用多占内存,而且多个端口各种配置很麻烦啊,想想看你有20多个应用,分别占用9001-9020那么多端口,时间一长你知道哪个是哪个不?多麻烦啊。

      Reply

      • telking says:
        May 21, 2011 at 6:04 pm

        用/dev/shm/uwsgi.sock这样子使用就可以很清楚看到站点使用那个接口

        Reply

  12. xiaojay says:
    October 27, 2010 at 12:05 pm

    了解了:)
    等我应用多了,就按你的方法配置了,哈哈,thanks a lot

    Reply

  13. chronos says:
    December 2, 2010 at 1:58 am

    问下,这个uwsgi有没有windows版本的,我试着在windows下编译,但没成功。提示
    Traceback (most recent call last):
    File “uwsgiconfig.py”, line 54, in
    uwsgi_os = os.uname()[0]
    AttributeError: ‘module’ object has no attribute ‘uname’
    看到windows版的nginx里面也有uwsgi所以就想试一下。似乎找不到这方面的资料。
    现在一直在用tornado web server。

    Reply

    • observer says:
      December 6, 2010 at 4:15 pm

      不太清楚,可能没有,不过windows下有cygwin这种大招,应该没啥问题的。

      Reply

      • Insion says:
        April 1, 2011 at 10:40 pm

        我最近就想怎么在Windows编译uwsgi出来,安装了cygwin之后发觉不知如何做起…请教下博主~

        Reply

  14. raph says:
    December 21, 2010 at 11:14 pm

    问一下,我启动uwsgi,他绑定的是0.0.0.0:9000不是127.0.0.1的,怎么回事呀

    Reply

  15. lei says:
    May 16, 2011 at 11:58 pm

    nginx的配置能否注释一下各行,我配置了django但是后台管理页面有问题如图http://weibo.com/1659487382/l4ETwjDKv

    Reply

  16. shell says:
    May 25, 2011 at 2:17 pm

    一个站点只能部署一个的原因是因为,uwsgi使用SERVER_NAME|SCRIPT_NAME来计算应用的。你又没改过SCRIPT_NAME ,同一个SERVER_NAME当然只能部署一个。解决方法也很简单,在locateion里面自定义一个SERVER_NAME就可以了。
    另外,virtualenv也不是非用不可。下面是一个web.py和mercurial混合部署的例子中,hg的部分。自定义了SERVER_NAME,并且没用virtualenv。
    location /hg {
    include uwsgi_params;
    uwsgi_param UWSGI_PYHOME /usr;
    uwsgi_param UWSGI_CHDIR /var/web/hg;
    uwsgi_param UWSGI_SCRIPT hgweb;
    uwsgi_param SCRIPT_NAME /;
    uwsgi_param SERVER_NAME hgweb;
    uwsgi_pass unix:/tmp/uwsgi.socket;
    }
    实话说,我也写了篇东西,还参考了你的。在这里(http://shell909090.com/blog/?p=1811),不过怎么做引用阿。

    Reply

    • davidx says:
      September 2, 2011 at 4:25 pm

      这样写不行啊, 我试了, 访问后一个还是会冲掉前面的
      能够告诉我, 你的uwsgi启动的参数吗?

      Reply

  17. 郁也风 says:
    June 3, 2011 at 6:34 am

    不知道有没有人成功地把uwsgi+virualenv+flask配置成功阿?我这边死活不好使呢奇怪

    Reply

  18. Pingback: 我的那些花儿 » Howto Deploy MoinMoin via Nginx and uWSGI

  19. Pingback: 我的那些花儿 » 20110328

  20. Pingback: 我的那些花儿 » Howto Deploy OSQA via Nginx and uWSGI

  21. 至尊宝 says:
    June 22, 2011 at 6:23 pm

    请教一下, uwsgi有没有支持web应用热部署的特性?

    Reply

  22. Pingback: uWSGI配置文件 | 工具牛

  23. davidx says:
    September 2, 2011 at 4:20 pm

    Hi, 我在自己配置多站点的时候, 启动uwsgi的参数里加上了–vhost, 但是什么访问第二个网站后, 第一个网站的内容, 也就跟第二个相同了呢?
    我的启动参数如下:
    uwsgi-2.6 -s /tmp/uwsgi.sock -C -M -d uwsgi.log –vhost -t 30

    我没有使用virtualenv, 是不是这个必须用上才行呢?

    Reply

  24. Pingback: 在免费亚马逊EC2上编译安装nginx+uwsgi+bottle

  25. Pingback: vps部署nginx+FastCGI+web.py环境 | A Nerd or A Geek

  26. 听临 says:
    December 16, 2011 at 3:11 pm

    学习一门技术,花在配置环境上的时间太多了…

    感谢你的教程啊.

    Python提倡简单是美,结果是在web开发上,却不见得比PHP简单多少~~

转载于:https://www.cnblogs.com/cheungjustin/archive/2012/01/04/2312552.html

【转】Nginx+uWSGI 部署 Django 应用相关推荐

  1. nginx+uwsgi部署Django

    本篇文章主要介绍了解决nginx+uwsgi部署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. centos7 下通过nginx+uwsgi部署django应用

    1. 安装python3.6 1. 获取wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz tar -xzvf Python-3 ...

  5. Ubuntu nginx+uwsgi部署Django项目

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

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

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

  7. Nginx + uWSGI + Python + Django部署实例

    Nginx: Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性: 作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的 ...

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

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

  9. 使用uWSGI部署django项目

    先说说什么是uWSGI吧,他是实现了WSGI协议.uwsgi.http等协议的一个web服务器,那什么是WSGI呢? WSGI是一种Web服务器网关接口.它是一个Web服务器(如nginx)与应用服务 ...

最新文章

  1. matlab与python通信_python和matlab之间数据传输方法
  2. 即将到来的 Android N 将具备这些新特性
  3. 【报名中】数据库大咖们与你聊聊云上实践的那些事儿
  4. 暑期训练日志----2018.8.22
  5. 风吹雨云商城系统程序源码
  6. bootstrap3 中文手册 [下载]
  7. ROS学习记录:读入bag文件,用Rviz读入播放
  8. interpeter用python还是pythonw_python-interpreter
  9. 转载-计算几何的题目
  10. 配置ssh免密码登录
  11. sap服务器安装双系统教程,安装双系统教程,新手入门必看教程
  12. 孪生再世代表数字几_孪生(27)_亦舒_梦远书城
  13. ubuntu系统切换高性能模式
  14. linux和Windows线程进程的区别
  15. QQ通信原理--转载
  16. 基于51单片机的简易mp3的制作
  17. java七大排序算法代码
  18. Notepad++介绍与安装
  19. 8051单片机Proteus仿真与开发实例-74LS273触发器驱动仿真
  20. lync2010服务器证书,无法登录 Skype for Business Online,因为无法获取证书 | Microsoft Docs...

热门文章

  1. 浅析刚刚起步的创业公司应该如何选择适合自己的网站类型呢?
  2. linux pytorch环境配置,linux下使用conda安装pytorch,并配置pytorch
  3. 西安思源中学2021高考成绩查询入口,西安思源中学隆重举行2020-2021学年第二学期开学典礼...
  4. oracle cube排序,Oracle rollup cube 用法
  5. bootstranp选项卡怎么把每个选项卡里面的表单分开提交_EXCEL 宏应用基础知识,利用已实现的宏,制作自己的功能选项卡...
  6. stm32怎么查看什么原因引起的nmi_为什么会有口臭,口臭是什么原因引起的,口臭是怎么回事...
  7. 非监督异常点检测算法总结——没有想到矩阵分解和编码解码器也是一种思路...
  8. postman 并发测试
  9. python 公钥解密
  10. codeforces_A. Salem and Sticks_数组/暴力