基于python的web项目,常见的部署方法有:

fcgi:用spawn-fcgi或者框架自带的工具对各个project分别生成监听进程,然后和http服务互动。

wsgi:利用http服务的mod_wsgi模块来跑各个project。

不过还有个uwsgi,它既不用wsgi协议也不用fcgi协议,而是自创了一个uwsgi的协议,据作者说该协议大约是fcgi协议的10倍那么快。uWSGI的主要特点如下:

超快的性能。

低内存占用(实测为apache2的mod_wsgi的一半左右)。

多app管理。

详尽的日志功能(可以用来分析app性能和瓶颈)。

高度可定制(内存大小限制,服务一定次数后重启等)。

环境ubuntu 12.04 IP:10.1.6.79

安装nginx

?

1

apt-getinstall nginx-full nginx-common

nginx配置/etc/nginx/sites-enabled/example

?

1

2

3

4

5

6

7

8

9

10

11

12

13

server {

listen 80;

server_name 10.1.6.79;

access_log /var/log/nginx/example_access.log;

error_log /var/log/nginx/example_error.log;

root /var/www/example;

location / {

uwsgi_pass 127.0.0.1:9001;

include uwsgi_params;

uwsgi_param UWSGI_SCHEME $scheme;

uwsgi_param SERVER_SOFTWARE nginx/$nginx_version;

}

}

安装uwsgi

?

1

apt-getinstall uwsgi uwsgi-plugin-python

如果你想安装所有的uwsgi插件,则可以安装uwsgi-plugin-all软件包

uwsgi配置/etc/uwsgi/apps-enabled/default.xml

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

python

127.0.0.1:9001

/var/www/example/app/

4

8

1

2000

512

256

192

uwsgi配置文件中的参数也可以在命令行通过uwsgi指定,配置文件除了xml格式外,还可以写成ini格式的,软件包安装完毕后在/usr/share/doc/uwsgi/examples/conffile目录下会有一些xml和ini格式配置文件的例子。

wsgi_configuration_module.py脚本内容

?

1

2

3

4

5

6

7

8

9

10

11

12

#!/usr/bin/python

import os

import sys

sys.path.append('/var/www/example/app')

os.environ['PYTHON_EGG_CACHE']= '/var/www/example/.python-egg'

def application(environ, start_response):

status= '200 OK'

output= 'Hello World!'

response_headers= [('Content-type','text/plain'),

('Content-Length',str(len(output)))]

start_response(status, response_headers)

return [output]

启动uwsgi

?

1

uwsgi -x/etc/uwsgi/apps-enabled/default.xml --daemonize/var/log/uwsgi/app/default.log

uwsgi 的参数:

-M 开启Master进程

-p 4 开启4个进程

-s 使用的端口或者socket地址

-d 使用daemon的方式运行, 注意, 使用-d后, 需要加上log文件地址, 比如-d /var/log/uwsgi.log

-R 10000 开启10000个进程后, 自动respawn下

-t 30 设置30s的超时时间, 超时后, 自动放弃该链接

–limit-as 32 将进程的总内存量控制在32M

-x 使用配置文件模式

并发4个线程

?

1

uwsgi -s :9090 -w myapp -p 4

主控制线程+4个线程

?

1

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

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

?

1

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

限制内存空间128M

?

1

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

服务超过10000个req自动respawn

?

1

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

后台运行等

?

1

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

除了直接用uwsgi命令启动外,还可以用init.d下的脚本启动, 不过需先修 改/etc/default/u wsgi中默认配置文件的路径,然后通过/etc/init.d/uwsgi start启动

?

1

2

#INHERITED_CONFIG=/usr/share/uwsgi/conf/default.ini

INHERITED_CONFIG=/etc/uwsgi/apps-enabled/default.xml

启动nginx

?

1

/etc/init.d/nginx start

效果如下:

测试uwsgi是否可用

测试脚本test.py

?

1

2

3

4

#!/usr/bin/python

def application(env,start_response):

start_response('200 OK',[('Content_Type','text/html')])

return "Congraduation!!! uWSGI Testing OK!!!

?

1

2

#启动web server

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

浏览器输入IP:端口:192.168.1.99:9090

可以看到”Congraduation!!! uWSGI Testing OK!!!”

小结

uwsgi 实际上也是一个 http 服务器,只不过它只面向 python 网络应用程序。虽然 uwsgi 也是 http 服务器,但是却不能直接使用它部署 python web 应用程序,否则会出错。

在本文中,uwsgi 所扮演的的角色是后端 http 服务器,nginx 扮演的角色是前端 http 服务器,hello.py 是客户端应用程序。 用户从网页浏览器中发出请求,nginx 服务器收到请求后,会通过它的 uwsgi 模块将用户的请求转发给 uwsgi 服务器,uwsgi 服务器处理完毕后将结果返回给 nginx,浏览器将最终的结果展现给用户。

python项目部署nginx_详解使用Nginx和uWSGI配置Python的web项目的方法相关推荐

  1. python跳一跳脚本详解_微信跳一跳游戏 python脚本辅助得高分

    微信小程序一时间火爆朋友圈,关键是还有排行榜!游戏操作简单,可直接根据电脑识别,用python写出自动跳辅助脚本,本想动手写下,索性网上有大神写了现成脚本,修改了一小部分参数,就可以稳定使用了霸榜没有 ...

  2. python凯撒密码详解_四十八、Python用smtp发邮件详解(163和QQ邮箱)

    Python发邮件详解 一.利用163的smtp发送邮件 import smtplibfrom email.mime.text import MIMETextfrom email.header imp ...

  3. python关键词 打标签详解_Python学习日记13|利用python制作简书首页热门文章关键词标签云...

    今天是6.16号. 昨天去面越秀金融风险控制部计算机实习生,去面了才知道主要也就是做数据抓取这一块.面试过程中有问到分词,然后自己心虚的说了有接触过分词这一块,面试结果就不去想了,过不过都其实不重要了 ...

  4. chatgpt赋能python:Python取ln函数详解:用法及常见问题解答

    Python取ln函数详解:用法及常见问题解答 Python取ln函数是一种非常常用的数学函数,它可以帮助开发者在计算中处理数据的自然指数对数.本篇文章将会介绍Python中取ln函数的基础知识,让您 ...

  5. docker 打包部署 python项目_Docker如何部署Python项目的实现详解

    Docker 是一个开源项目,为开发人员和系统管理员提供了一个开放平台,可以将应用程序构建.打包为一个轻量级容器,并在任何地方运行.Docker 会在软件容器中自动部署应用程序. 在本篇中,我将介绍如 ...

  6. 怎么创建python django项目_创建Django项目图文实例详解

    本文实例讲述了创建Django项目的方法.分享给大家供大家参考,具体如下: 创建Django项目 创建一个HelloDjango项目 GitHub地址:https://github.com/liang ...

  7. vuecli 编译后部署_基于vue-cli 打包时抽离项目相关配置文件详解

    前言:当使用vue-cli进行开发时时常需要动态配置一些设置,比如接口的请求地址(axios.defaults.baseURL),这些设置可能需要在项目编译后再进行设置的,所以在vue-cli里我们需 ...

  8. python的图书管理项目教程_基于python图书馆管理系统设计实例详解

    写完这个项目后,导师说这个你完全可以当作毕业项目使用了,写的很全,很多的都设计考虑周全,但我的脚步绝不止于现在,我想要的是星辰大海!与君共勉! 这个项目不是我的作业, 只是无意中被拉进来了,然后就承担 ...

  9. Docker持续部署图文详解

    2019独角兽企业重金招聘Python工程师标准>>> Docker持续部署图文详解 博客分类: docker 架构 JAVA项目如何通过Docker实现持续部署(只需简单四步),即 ...

最新文章

  1. steamvr unity 连接眼镜_150度FOV,自研显示方案,Kura公布全新AR眼镜Gallium
  2. bottle嵌入html,css,js
  3. groupby elasticsearch
  4. arm 跳转指令跳转范围
  5. 历届试题 分考场(DFS,染色问题)
  6. java 双等号(==) 与equals方法的介绍和区别
  7. XAF-BI.Dashboard模块概述 web/win
  8. 开课吧Java课堂:什么是流?如何运用字节流和字符流?
  9. sg nc的java下载,01_SG-NC-客户端安装说明及培训材料下载 3
  10. 计算机时钟的工作原理,电脑时钟电路工作原理
  11. 10-新闻发布系统数据库-新闻管理数据操作
  12. Kali学习 | 无线渗透:7.5 Gerix 破解 WEP
  13. odbc配置mysql SSL报错_odbc数据库的安装
  14. 测试性格软件的原理,关于性格色彩应用原理庞大分析做出解密。
  15. paper—SCI答复审稿人的回信技巧
  16. 谷歌又在开发新AI框架!这次瞄准的是:通用人工智能(AGI)
  17. 2020年NOC创新编程赛编程猫热身活动部分模拟题和答案解析
  18. 合肥辰工科技有限公司简介及公司产品介绍
  19. 嵌入式入门基础知识有哪些?
  20. 疫情过后,35岁老程序员年后第一天上班被公司劝退,该何去何从?

热门文章

  1. MM模块部分名词解释
  2. 创建总账科目类型会计凭证
  3. 房价集体上扬?最新房价数据分析看房价走势
  4. 软件测试黑马程序员课后答案_软件测试课后习题答案
  5. win8换成linux桌面,Ubuntu/Linux Mint分分钟变Win8风
  6. excel随机抽取_Excel条件格式,扮靓你的报表
  7. 支持的sql语法_PostgreSQL 12 新特性解读之一|支持 SQL/JSON path
  8. 利用Swift语言特性,随手写个伪随机数生成器
  9. 初中职校计算机学什么,职高有哪些专业 初中生毕业上职高学什么好
  10. python中深浅复制教程