uWSGI+nginx部署python及django应用
来源:互联网 发布:如何关闭mac日历 编辑:程序博客网 时间:2024/06/06 00:16
1 简介
部署python的web应用常见的方式大体有2种:
fcgi:用spawn-fcgi或者框架自带的工具对各个project分别生成监听进程,然后和http服务互动。
wsgi:利用http服务的mod_wsgi模块来跑各个project。
uWSGI 为新的协议,兼容 wsgi的写法,性能高于上述协议。
2 部署nginx
首先安装nginx:
debian(ubuntu等):
sudo apt-get install nginx
centos:
sudo yum install nginx
安装后,配置nginx:
用vim等编辑器打开/etc/nginx/nginx.conf,有一些版本的nginx将conf配置文件放到了/etc/nginx/conf或/etc/nginx/site-enabled中。
加入以下server负责转发请求给之后的uwsgi
server { listen 80; server_name xxx.com;#需要监听的域名或ip location / {uwsgi_pass 127.0.0.1:8010;#8010为uwsgi工作的端口 include uwsgi_params;#nginx转发的uwsgi的http头 access_log /var/www/xx/log/nginx.log;#nginx日志文件} }
完成后重启nginx
sudo service nginx restart
3 部署uwsgi
3.1 安装uwsgi
由于uwsgi更新较快,而且uwsgi较为轻量,1分钟即可编译完成,因此官方没有提供编译好的二进制文件。
可以使用pip进行安装,简单快捷,推荐。
sudo pip install uwsgi
安装后跳到 3.2 配置uwsgi
此外我们也可以到
http://uwsgi-docs.readthedocs.org/en/latest/Download.html 下载,解压后,自行编译。
编译前,配置编译环境
debian:
sudo apt-get install build-essential pythonsudo apt-get install python-dev
centos:
sudo yum groupinstall "Development Tools"sudo yum install pythonsudo yum install python-devel
python uwsgiconfig.py --build
编译后会得到uwsgi可执行文件,将其复制到/usr/sbin/文件夹中
cp ./uwsgi /usr/sbin至此安装完成
3.2 配置uwsgi
uwsgi具有很多工作模式,我们使用其中的emporer模式。即uwsgi启动后,自动读取/etc/uwsgi/下的web应用配置文件,并启动相应的web应用。
为uwsgi建立service,并开机自动启动,将下列内容写入/etc/init.d/uwsgi文件(需新建),设置YOURNAME变量为你的非root的用户名。
### BEGIN INIT INFO# Provides: uwsgi# Required-Start: $local_fs $remote_fs $network $syslog# Required-Stop: $local_fs $remote_fs $network $syslog# Default-Start: 2 3 4 5# Default-Stop: 0 1 6# Short-Description: Starts uwsgi Server# Description: Starts uwsgi Server### END INIT INFO<span style="font-size:18px;">YOURNAME = XX #将XX替换为你的用户名</span>case "$1" in start) nohup uwsgi --emperor /etc/uwsgi/ --uid $<span style="font-family: Arial, Helvetica, sans-serif;">YOURNAME</span><span style="font-family: Arial, Helvetica, sans-serif;"> --gid $</span><span style="font-family: Arial, Helvetica, sans-serif;">YOURNAME </span><span style="font-family: Arial, Helvetica, sans-serif;">&</span> ;; restart) killall uwsgi && <span style="font-family: Arial, Helvetica, sans-serif;">nohup uwsgi --emperor /etc/uwsgi/ --uid $</span><span style="font-family: Arial, Helvetica, sans-serif;">YOURNAME</span><span style="font-family: Arial, Helvetica, sans-serif;"> --gid $</span><span style="font-family: Arial, Helvetica, sans-serif;">YOURNAME </span><span style="font-family: Arial, Helvetica, sans-serif;">&</span> ;;run)uwsgi --emperor /etc/uwsgi/ --uid $YOURNAME --gid $YOURNAME &;; stop) killall uwsgi ;; *) echo "Usage: /etc/init.d/uwsgi {start|stop|run|restart}" exit 1 ;;esac
修改文件权限
sudo chmod 755 /etc/init.d/uwsgi
新建并进入/etc/uwsgi文件夹
sudo mkdir /etc/uwsgicd /etc/uwsgi
每个web应用需要建立一个ini配置文件,示例如下:
[uwsgi]socket = 127.0.0.1:9000chdir = /var/www/xxx #你的python web应用的主目录pythonpath = ..module = wsgi #python web应用中含有application可调用函数的python模块,不用写.py扩展名processes = 1 #进程数,一般和处理器核心数量相同threads = 2 #线程数,一般是进程数乘2daemonize = /var/www/xx/log/uwsgi.log #日志文件
其中module需要符合wsgi规范,含有一个原型为application(environ,start_response)的可调用对象。具体规范查看我的另一篇转发的文章。
完成后执行
sudo service uwsgi start
启动uwsgi即可
- uWSGI+nginx部署python及django应用
- Nginx+uWSGI部署Django应用
- Nginx+uwsgi部署django应用
- nginx+uwsgi部署django应用
- Nginx+uwsgi部署django应用
- uwsgi+django+nginx+supervisor部署web应用(python)
- 【NGINX】nginx+uwsgi+django+python部署总结
- nginx+uwsgi部署python应用
- 使用nginx+uwsgi部署django应用
- django+nginx+uwsgi+service部署web应用
- nginx+uwsgi+django+python环境部署文档
- Nginx + uWSGI + Python + Django部署实例
- nginx+uwsgi+django部署python项目
- nginx + uwsgi 部署python django web服务
- Django+Nginx+uwsgi部署
- nginx uwsgi django部署
- nginx uwsgi 部署django
- django nginx+uwsgi部署
- Android JUnit Test的使用
- shiro中密码匹配
- 如何自动交易可以使你的贸易生活变得更轻松
- Deformable Part Model
- Oracle form开发时点击菜单“程序”-》“运行表单”,出现“FRM-10142:HTTP监听程序没有在******的端口8889上运行。请启动该监听程序或检查您的运行时首选项。”
- uWSGI+nginx部署python及django应用
- 【递归】输出给定的n对括号对的所有合法序列
- sogou search not bad
- STM32系统中应用的动态加载可行性研究过程之JavaScript语言的学习<二>
- Qt远程连接SQlServer数据库
- LINUX之sed用法
- ScrollView中有ListView和GridView的冲突解决
- 【装箱与拆箱】java中的装箱与拆箱实现
- pb调用C#中COM组件(2)