1. 后缀名为‘wsgi’的文件是什么文件在python中可以作为模块导入吗
你用任何的文本编辑器打开看看,如果是python的script,就可以用python导入。
后缀是wsgi的一般是用python写的wsgi程序。
2. 新浪云怎么部署 python flask
首先安装python,这个我就不多说了,记得配置好系统的环境变量,python和python包(Scripts目录)都要加入系统的环境变量。
接下来就pip安装flask,windows下的命令为:
$ pip install flask
接下来创建一个文件夹,就是你将来整个工程的文件。通过cmd命令进入到这个文件夹中。(cd命令)
然后在这个文件夹中创建一个python文件,py为后缀的文件。
接下来编辑这个文件(文本编辑器、IDE都可以)
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return '
Hello World!
'
if __name__ == '__main__':
app.run(debug = True)
写入代码就可以简单的启动服务器了,默认根目录下返回“hello,world!”,如何运行的就只需要在cmd中运行
$ python myapp.py
运行成功的话可以看到下图的提示。
访问localhost:5000的时候(默认端口5000,可以通过host参数修改),例如
app.run(debug=True,host='0.0.0.0:5000')
基本上这样完成了flask的基本配置,接下来就是将其放到新浪云SAE上,SAE本身就支持flask框架的部署,但是后期我们需要引入其他的一些第三方的包,因此最好就是讲自己的包放到工程文件中调用。
方法就是在使用pip安装的时候,使用这样子的命令:
$ pip install -t vendor PACKAGENAME
这个样子在本地安装的时候就会将包放在一个vendor文件夹中,然后安装SAE官方的文档,在工程文件中添加一个名为“index.wsgi”的文件,内容为:
import sae
sae.add_vendor_dir('vendor')
from myapp import app
application = sae.create_wsgi_app(app)
这样子基本就完成了,只需要讲文件上传到SAE上就可以完成部署。
SAE上的操作记得在新建应用的时候选择python2.7,然后我用的代码管理方式是git。
接下来的方式就是git的内容了,这里我就不多说,写下几个命令:
将仓库的内容复制到本地
$git clone 你的git仓库地址
创建分支
$git branck 分支名
使用分支
$git checkout 分支名
修改代码
$git add --all
$git commit -a "注释"
$git pust 分支名
(以前都是用svn的所以git还不是特别熟)
部署上传完代码之后就可以好好折腾啦
3. 如何在CentOS6上安装Python2.7和Python3.3-Python
CentOS 6自带了Python 2.6.6(CentOS 7则自带了Python 2.7)和一些非常好用的功能,如yum。但是,注意不要随便升级自带的Python以免yum不可用。 新版本将安装在/usr/local目录下以避免和自带的版本冲突。
虽然“我”只在64位的CentOS 6.5进行了尝试,但该教程应该适用于所有的CentOS 6版本(本人按此教程在CentOS 7上亦成功安装Python3.4)。
下
面的示例命令您最好以root身份运行或者在命令前加sudo赋予权限。但注意,若不是以root身份执行的话,make 与make
install最好分开执行,并且都在前面加sudo,连着写,如sudo make && make install的话会在make
install过程中报权限不足问题,因为sudo不作用于&&后面的make install。
安装前准备
编
译Python之前您最好先安装一系列的开发工具和一些拓展库,虽然不是必须的,但这样Python才能依赖这些工具和拓展库展示它强悍的功能。下面是利
用yum进行工具和拓展库安装的示例命令,直接执行即可(注意部分命令显示不全,但可以通过移动光标查看和复制)。
yumgroupinstall"Development tools"
yuminstallzlib-develbzip2-developenssl-develncurses-develsqlite-develreadline-develtk-develgdbm-develdb4-devellibpcap-develxz-devel
该考虑的因素
在您编译和安装Python之前,有些东西您是应该知道或考虑的。如下。
Unicode编码
Python
编码问题历史悠久,但不用过多关注,知道它目前支持Unicode编码即可(Python3中默认的)。考虑到兼容性等原因,除非有特殊的理由,您最好配
置下Python 3.2和更早的版本,使其支持UTF-32编码,虽然会增加小小的内存代价。在Python
2.7中您可以通过在configure时添加选项--enable-unicode=ucs4 进行配置,而在Python 3.2中是--with-wide-unicode选项。
Shared library(动态共享库)
目
前大部分的linux系统自带的Python都是以共享库的方式编译的,
此外,某些第三方工具例如mod_wsgi和Blender,没有Python的共享库还运行不了,所以,您最好还是把Python编译成动态共享库吧。
为了以共享库方式编译Python,您必须指明共享库的路径。您有两种选择:
在configure命令后面添加:LDFLAGS="-Wl,-rpath /usr/local/lib"从而将库路径直接编译进Python中。
以记事本方式打开 /etc/ld.so.conf ,然后在文件最后添加新行:/usr/local/lib 。紧接着运行命令 /sbin/ldconfig 更新动态链接器。 添加后的文件内容在CentOS 6.5 如下:
/etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/local/lib
使用 “make altinstall” 而不是make install
切记,在安装自定义版本的Python时,make altinstall命令是必须的!如果您使用一般的 make install命令,呵呵,您将会在解压编译的目录下看到两个命名一样但版本不同的python,这有可能会导致一些意想不到的bug哦,具体是什么作者没说,我也不知道。
下载,编译,安装Python
如下命令可用于下载、编译和安装Python。注意,如果您打算安装后手动修改/etc/ld.so.conf文件以更新动态链接器,那么下面的 LDFLAGS 参数您就可以去掉了。
# Python 2.7.6:
wgethttp://python.org/ftp/python/2.7.6/Python-2.7.6.tar.xz
tarxfPython-2.7.6.tar.xz
cdPython-2.7.6
./configure--prefix=/usr/local--enable-unicode=ucs4--enable-sharedLDFLAGS="-Wl,-rpath /usr/local/lib"
make&&makealtinstall(此处切记,要么以root运行,要么分开执行!)
# Python 3.3.5:
wgethttp://python.org/ftp/python/3.3.5/Python-3.3.5.tar.xz
tarxfPython-3.3.5.tar.xz
cdPython-3.3.5
./configure--prefix=/usr/local--enable-sharedLDFLAGS="-Wl,-rpath /usr/local/lib"
make&&makealtinstall(此处切记,要么以root运行,要么分开执行!)
执行上述命令之后,您可以在/usr/local/bin/python2.7或 /usr/local/bin/python3.3中找到新安装的Python。而Python 2.6.6则可能在/usr/bin/python, /usr/bin/python2或 /usr/bin/python2.6找到。
下载和安装Setuptools + pip
Setuptools早已取代 Distribute成为Python官方的拓展包管理器,以用于从Python Package Index安装拓展功能包。 不同版本的Python需要的Setuptools版本不同。建议您也通过Setuptools安装 pip,它提供了一些额外在安装拓展功能包时很有用的功能。
以下的命令可用于安装最新版Setuptools 和 pip。
# First get the setup script for Setuptools:
wgethttps://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py
# Then install it for Python 2.7 and/or Python 3.3:
python2.7ez_setup.py
python3.3ez_setup.py
# Now install pip using the newly installed setuptools:
easy_install-2.7pip
easy_install-3.3pip
# With pip installed you can now do things like this:
pip2.7install[packagename]
pip2.7install--upgrade[packagename]
pip2.7uninstall[packagename]
安装的拓展功能包在/usr/local/lib/pythonX.Y/site-packages/中可以找到(X.Y是Python的版本号)。
接下来干嘛?
如果您使用 Python 2.7,强烈建议您安装virtualenv并学会使用它,它可用于创建独立的 Python 环境。如果您使用 Python 3.3的话就可以省心些,它已被内置了。
不
同的 Python 运行环境(也叫沙盒) 可以有自己的 Python
版本和拓展功能包,就是说不同的Python安装和运行的目录不同,也可以为每个版本的Python安装对应的名称一样但版本不同的拓展包。
这在开发多个功能不同的项目或在同一个项目中需要用到不同版本的Python是会很有用的。
创建您第一个独立的Python环境
# Install virtualenv for Python 2.7 and create a sandbox called my27project:
pip2.7installvirtualenv
virtualenv-2.7my27project
# Use the built-in pyvenv program in Python 3.3 to create a sandbox called my33project:
pyvenv-3.3my33project
# Check the system Python interpreter version:
python--version
# This will show Python 2.6.6
# Activate the my27project sandbox and check the version of the default Python interpreter in it:
sourcemy27project/bin/activate
python--version
# This will show Python 2.7.6
deactivate
# Activate the my33project sandbox and check the version of the default Python interpreter in it:
sourcemy33project/bin/activate
python--version
# This will show Python 3.3.5
deactivate
4. 如何使用WSGI部署Django
如何使用Apache 和mod_wsgi 部署Django¶
用Apache 和 mod_wsgi 部署Django项目是一个第三方的,测试的方法来得到Django生产环境。
mod_wsgi是一个Apache模块,可以托管任何Python WSGI应用程序,包括Django。Django将与支持mod_wsgi的任何版本的Apache一起工作。
官方mod_wsgi文档是太棒了!它是所有关于如何使用mod_wsgi的细节的来源。您可能需要先从安装和配置文档开始。
Basic configuration¶
一旦您安装并激活了mod_wsgi,请编辑Apache服务器的httpd.conf文件并添加以下内容。如果你的Apache版本低于2.4, 请将 Requireall granted 替换成 Allow from all 并在上一行添加 Order deny,allow .
WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py
WSGIPythonPath /path/to/mysite.com
<Directory /path/to/mysite.com/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIScriptAlias行中的第一个位是您要在其上(/指示根URL)的服务应用程序的基本URL路径,第二个位置是“ WSGI文件“ - 见下面 - 在您的系统上,通常在您的项目包(在本例中mysite)。这告诉Apache使用该文件中定义的WSGI应用程序来提供给定URL下面的任何请求。
The WSGIPythonPath line ensures that your project package is available for import on the Python path; in other words, that importmysite works.
The <Directory> piece just ensures that Apache can access your wsgi.py file.
接下来,我们需要确保这个wsgi.py与WSGI应用程序对象存在。从Django版本1.4起,startproject将为您创建一个;否则,您需要创建它。请参阅WSGI overview documentation以获取您应该放入此文件的默认内容,以及您可以添加到其中的其他内容。
警告
如果多个Django站点在单个mod_wsgi进程中运行,则所有这些站点将使用首先运行的设置。这可以通过改变:
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name }}.settings")
在wsgi.py中:
os.environ["DJANGO_SETTINGS_MODULE"] = "{{ project_name }}.settings"
或者通过using mod_wsgi daemon mode,并确保每个站点在其自己的守护进程中运行。
使用虚拟机¶
If you install your project’s Python dependencies inside a virtualenv, you’ll need to add the path to this virtualenv’s directory to your Python path as well. 如果你的python项目在一个依赖虚拟机的python环境中,你需要将路径添加虚拟机的site-packages目录到你的python路径To do this, add an additional path to your WSGIPythonPath directive, with multiple paths separated by a colon (:) if using a UNIX-like system, or a semicolon (;) if using Windows.如果目录路径的任何部分包含空格字符,则必须引用WSGIPythonPath的完整参数字符串:
WSGIPythonPath /path/to/mysite.com:/path/to/your/venv/lib/python3.X/site-packages
请确保为您的virtualenv指定正确的路径,并将正确的Python版本替换为python3.X。python3.4)。
采用mod_wsgi守护进程模式¶
“Daemon模式”是运行mod_wsgi的推荐模式(在非Windows平台上)。需要通过WSGIDaemonProcess和WSGIProcessGroup指令来实现Django实例运行在守护进程组中如果使用守护程序模式,则上述配置所需的进一步更改是您不能使用WSGIPythonPath;而应使用WSGIDaemonProcess的python-path选项,例如:
WSGIDaemonProcess example.com python-path=/path/to/mysite.com:/path/to/venv/lib/python2.7/site-packages
WSGIProcessGroup example.com
如果您要在子目录(本示例中为)中投放您的项目,可以将WSGIScriptAlias添加到上面的配置中:
WSGIScriptAlias /mysite /path/to/mysite.com/mysite/wsgi.py process-group=example.com
See the official mod_wsgi documentation for details on setting up daemon mode.
Serving files¶
Django不提供文件本身;它将该作业留给您选择的任何Web服务器。
我们建议使用单独的Web服务器(即不运行Django的服务器)来提供媒体。这里有一些很好的选择:
Nginx
Apache的精简版本
但是,如果您无法选择在与Django相同的Apache VirtualHost上提供媒体文件,则可以将Apache设置为将某些网址用作静态媒体,而将其他网址用于Django的mod_wsgi接口。
This example sets up Django at the site root, but explicitly serves robots.txt, favicon.ico, any CSS file, and anything in the /static/ and /media/ URL space as a static file. 所有其他网址将使用mod_wsgi:
Alias /robots.txt /path/to/mysite.com/static/robots.txt
Alias /favicon.ico /path/to/mysite.com/static/favicon.ico
Alias /media/ /path/to/mysite.com/media/
Alias /static/ /path/to/mysite.com/static/
<Directory /path/to/mysite.com/static>
Require all granted
</Directory>
<Directory /path/to/mysite.com/media>
Require all granted
</Directory>
WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py
<Directory /path/to/mysite.com/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
If you are using a version of Apache older than 2.4, replace Require all granted with Allow from all and also add the line Orderdeny,allow above it.
Serving the admin files¶
当django.contrib.staticfiles位于INSTALLED_APPS中时,Django开发服务器会自动提供管理应用程序(以及任何其他已安装的应用程序)的静态文件。但是,当您使用任何其他服务器布局时不是这样。您负责设置Apache,或您使用的任何Web服务器,以提供管理文件。
管理文件位于Django发行版的django/contrib/admin/static/admin中。
We strongly recommend using django.contrib.staticfiles to handle the admin files (along with a Web server as outlined in the previous section; this means using the collectstatic management command to collect the static files in STATIC_ROOT, and then configuring your Web server to serve STATIC_ROOT at STATIC_URL), but here are three other approaches:
在文档根目录中创建一个指向管理静态文件的符号链接(这可能需要Apache配置中的+FollowSymLinks)。
使用如上所示的Alias指令,将适当的网址(可能是STATIC_URL + admin/)别名到管理文件的实际位置。
复制admin静态文件,使它们存在于Apache文档根目录下。
Authenticating against Django’s user database from Apache¶
Django提供了一个处理程序,允许Apache直接对Django的身份验证后端进行身份验证。请参阅mod_wsgi authentication documentation。
If you get a UnicodeEncodeError¶
如果您正在利用Django的国际化功能(请参阅Internationalization and localization),并且您打算允许用户上传文件,则必须确保用于启动Apache的环境配置为接受非-ASCII文件名。如果未正确配置环境,则在调用类似于os.path中的函数时,将触发UnicodeEncodeError异常,该函数包含非ASCII字符。
为了避免这些问题,用于启动Apache的环境应包含类似于以下内容的设置:
export LANG='en_US.UTF-8'
export LC_ALL='en_US.UTF-8'
请查阅您的操作系统的文档以获取适当的语法和位置来放置这些配置项; /etc/apache2/envvars是Unix平台上的常见位置。将这些语句添加到环境后,重新启动Apache。
目录
如何使用Django与Apache和mod_wsgi
基本配置
使用virtualenv
使用mod_wsgi守护程序模式
提供文件
提供管理文件
对来自Apache的Django用户数据库进行身份验证
如果您得到UnicodeEncodeError
浏览
上一页:如何使用WSGI部署
下一步:对来自Apache的Django用户数据库进行身份验证
你在这里:
Django 1.8.2.dev20150513143415 documentation
部署Django
如何使用Django与Apache和mod_wsgi
如何使用WSGI进行部署
“操作指南”
这一页
显示源
快速搜索
输入搜索字词或模块,类或函数名称。
最后更新:
2015年5月13日
5. 如何创建部署WSGI类型的Python应用
1.因为这是部署Python开发环境,所以安装pip可以简化一些软件的安装过程。(PIP对应Lua的luarocks)
sudo apt-get install python-pip
安装三个Python框架
sudo pip install flask
sudo pip install django==1.5.1
sudo pip install tornado==3.1.1
2.安装Gunicorn,这是运行Python的WSGI HTTP服务。
sudo pip install gunicorn
3.Virtualenv, 安装这个是因为,在部署Django的时候,使用了不同的版本。
sudo pip install virtualenv
第二部分:创建部署应用。
1.创建一个WSGI类型的Tornado应用。
import tornado.web
import tornado.wsgi
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("My source code in the MoPaas server by python Tornado!")
settings = {
"debug" : True,
"static_path": "static",
}
#####
urls = [
(r"/", MainHandler),
]
app = tornado.wsgi.WSGIApplication(urls, **settings)
启动这个服务:
gunicorn -w 4 torapp:app -b 0.0.0.0:8888
2.创建一个Flask应用。
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "My source code in the MoPaas server by python Tornado!"
if __name__ == "__main__":
app.run()
启动这个服务:
gunicorn -w 4 server:app -b 0.0.0.0:8888
3.创建Django应用。
Django是一个比较大的WEB应用,创建各部署的过程,稍微复杂一些。
创建工程
django-admin.py startproject hotdoc
创建应用
python manage.py startapp verp
创建数据库表
python manage.py syncdb
启动工程
gunicorn hotdoc.wsgi:application -b 0.0.0.0:8888
需要在修改工程目录下的settings.py
在INSTALLED_APPS中加入, verup和gunicorn:
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'verup',
'gunicorn'
以上,本地开发环境是没问题的。
这些步骤也可以用virtualenv新创建一个虚拟环境完成,本地创建virtualenv可以
目前在WEB IDE上没有测试通过,理论上说,如果coding的WEB IDE是基于Docker
的,virtualevn也应该好用。
mkdir ~/environments/
virtualenv ~/environments/tutorial/
cd ~/environments/tutorial/bin
source bin/activate
目前的Paas平台上的Python服务就是WSGI形式的应用,比如SAE和Mopaas,
不同的是,在SAE上有些现成的例子。Mopaas需要自己从头写,这三个例子
在Mopaas生产环境下都运行测试通过。在coding.net的WEB IDE也可成功运
行。
6. 关于python的wsgi问题,向各位大神求助
dows下python+wsgi配置!(求大神看下哪里错了)
LoadMole mod_wsgi_mole mole/mod_wsgi.so
<Directory "E:/site">
Options ExecCGI
AddHandler wsgi-script .py
Order allow,deny
Allow from all
</Directory>
这是我的配置信息,重启apache一直错误,反复搞不定,还有啥地方不对?是不要将py安装目录加path?还是哪里,或者机器不能安装俩个版本的py?(我安装了2.6和3.3)就这样的配置怎么启动py解释器呢!求大神给我看下把
7. python modwsgi 安装 什么是apxs
apxs - APache eXtenSion tool
用来制作apache的扩展模块DSO,
要使用这个工具,安装apache的时候就必须添加enable-so以支持DSO.
8. linux下python和webpy怎么搭建
基于python的web开发,这里我们使用linux为开发环境,搭建基于nginx + web.py + fastcgi
有些基本基本概念解释下,哈哈,因为我不懂
1.wsgi为Web服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。自从WSGI被开发出来以后,许多其它语言中也出现了类似接口
2.uwsgi,另一种python定义的web服务器和web应用的接口
3.REST服务,REST(Representational State Transfer表述性状态转移)是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。
4.CRUD是指在做计算处理时的增加(Create)、查询(Retrieve)(重新得到数据)、更新(Update)和删除(Delete)几个单词的首字母简写。主要被用在描述软件系统中数据库或者持久层的基本操作功能
以下内容主要来自
http://webpy.org/cookbook/fastcgi-nginx
需要的软件
nginx 0.7以上版本,我使用的是nginx 0.9.2
webpy我使用的web.py-0.37
spawn-fcgi 1.6.3
flup 1.0
nginx的配置请参看官方文档
spawn-fcgi是lighttpd的一个子项目用于多进程管理
webpy和flup安装方式为解压后运行python setup.py install
安装编写index.py
点击(此处)折叠或打开
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import web
urls = ("/.*", "hello")
app = web.application(urls, globals())
class hello:
def GET(self):
return 'Hello, world!'
if __name__ == "__main__":
web.wsgi.runwsgi = lambda func, addr=None: web.wsgi.runfcgi(func, addr)
app.run()
注意index.py需要使用命令chmod +x index.py加入可执行权限
将index.py放入/data/www(我所使用的目录你可以修改)
修改nginx.conf配置
index要加入index.py
Nginx的配置加入
点击(此处)折叠或打开
location / {
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_pass 127.0.0.1:9002;
}
使用Spawn-fcgi
spawn-fcgi -d /data/www -f /data/www/index.py -a 127.0.0.1 -p 9002
如果报错为126,说明index.py没有可执行权限
netstat -lnp | grep 9002参考是否启动成功
我运行的实际为
spawn-fcgi -d /data/www -f /data/www/index.py -a 127.0.0.1 -p 9002 -F 2
启动2个进程
启动nginx
浏览器输入地址
成功结束
9. 如何在 virtualenv 环境下搭建 Python Web
由于字数的限制,其实本篇文章的全标题为 《如何在 virtualenv 环境下 Django + Nginx + Gunicorn+ Supervisor 搭建 Python Web》
在这篇文章里,我们将搭建一个简单的 Web 应用,在虚拟环境中基于 Flask 框架,用 Gunicorn 做 wsgi 容器,用 Supervisor 管理进程,然后使用 OneAPM Python 探针来监测应用性能,形成一个“闭环” !希望能对大家有所帮助,首先简单来介绍一下环境:
系统环境:ubuntu 14.04 Python 2.7.6
安装组件库
第一步安装所需要的存储库,因为打算用到虚拟环境,用到 pip 安装和管理 Python 组件,所以先更新本地包,然后安装组件:
sudo apt-get updatesudo apt-get install python-pip python-dev nginx
创建虚拟环境 virtualenv
在一个系统中创建不同的 Python 隔离环境,相互之间还不会影响,为了使系统保持干净,遂决定用 virtualenv 跑应用程序,创建一个容易识别的目录,开始安装,再创建项目目录 super,然后激活环境:
sudo pip install virtualenv
mkdir ~/supervisor && cd ~/supervisor
virtualenv supersource super/bin/activate
安装 Flask 框架
好了,现在在虚拟环境里面,开始安装 Flask 框架,flask 依赖两个库 werkzeug 和 jinjia2, 采用 pip 方式安装即可, pip 是一个重要的工具,Python 用它来管理包:
pip install flask
先用 Flask 写一个简单的 Web 服务 myweb.py ,因为后面要做一些测试,所以设置了几个请求:
from flask import Flask
app = Flask(__name__)
@app.route('/')def index(): return 'hello world supervisor gunicorn '@app.route('/1')def index1(): return 'hello world supervisor gunicorn ffffff'@app.route('/qw/1')def indexqw(): return 'hello world supervisor gunicorn fdfdfbdfbfb 'if __name__ == '__main__':
app.debug = True
app.run()
启动 Flask 看看!
python myweb.py
在浏览器中访问 http://127.0.0.1:5000 就可以看到了“几个路径都试一试”
用 Gunicorn 部署 Python Web
现在我们使用 Flask 自带的服务器,完成了 Web 服务的启动。生产环境下,Flask 自带的服务器,无法满足性能要求。所以我们这里采用 Gunicorn 做 wsgi 容器,用来部署 Python,首先还是安装 Gunicorn:
pip install gunicorn
当我们安装好 Gunicorn 之后,需要用 Gunicorn 启动 Flask,Flask 用自带的服务器启动时,Flask 里面的 name 里面的代码启动了 app.run()。而这里我们使用 Gunicorn,myweb.py 就等同于一个库文件,被 Gunicorn 调用,这样启动:
gunicorn -w 4 -b 0.0.0.0:8000 myweb:app
其中 myweb 就是指 myweb.py,app 就是那个 wsgifunc 的名字,这样运行监听 8000 端口,原先的 5000 端口并没有启用,-w 表示开启多少个 worker,-b 表示 Gunicorn 开发的访问地址。
想要结束 Gunicorn 只需执行 pkill Gunicorn,但有时候还要 ps 找到 pid 进程号才能 kill。可是这对于一个开发来说,太过于繁琐,因此出现了另外一个神器 ---supervisor,一个专门用来管理进程的工具,还可以管理系统的工具进程。
安装 Supervisor
pip install supervisor
echo_supervisord_conf > supervisor.conf # 生成 supervisor 默认配置文件gedit supervisor.conf # 修改 supervisor 配置文件,添加 gunicorn 进程管理在 supervisor.conf 底部下添加 myweb.py 的配置 `/home/wang/supervisor/super` 是我的项目目录”
[program:myweb]
command=/home/wang/supervisor/super/bin/gunicorn -w 4 -b 0.0.0.0:8000 myweb:app
directory=/home/wang/supervisor
startsecs=0 stopwaitsecs=0 autostart=false
autorestart=false
user=wang
stdout_logfile=/home/wang/supervisor/log/gunicorn.log
stderr_logfile=/home/wang/supervisor/log/gunicorn.err
supervisor 的基本使用命令:
supervisord -c supervisor.conf supervisorctl -c supervisor.conf status 查看supervisor的状态
supervisorctl -c supervisor.conf reload 重新载入 配置文件
supervisorctl -c supervisor.conf start [all]|[appname] 启动指定/所有 supervisor 管理的程序进程
supervisorctl -c supervisor.conf stop [all]|[appname] 关闭指定/所有 supervisor 管理的程序进程
supervisor 还有一个 web 的管理界面,可以激活。更改下配置:
[inet_http_server] ; inet (TCP) server disabled by defaultport=127.0.0.1:9001 ; (ip_address:port specifier, *:port for alliface)
username=wang ; (default is no username (open server)
password=123 ; (default is no password (open server))
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socketserverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socketusername=wang ; should be same as http_username if setpassword=123 ; should be same as http_password if set;prompt=mysupervisor ; cmd line prompt (default "supervisor");history_file=~/.sc_history ; use readline history if available
现在可以使用 supervsior 启动 gunicorn 啦。运行命令:
supervisord -c supervisor.conf
浏览器访问 http://127.0.0.1:9001 可以得到 supervisor 的 web 管理界面,访问 http://127.0.0.1:8000 可以看见 gunicorn 启动的返回的页面。
配置 Nginx
前面我们已经在系统环境下安装了 Nginx, 安装好的 Nginx 二进制文件放在 /usr/sbin/ 文件夹下,接下来使用 Supervisor 来管理 Nginx。这里需要注意一个问题,权限问题。Nginx 是 sudo 的方式安装,启动的适合也是 root 用户,那么我们现在也需要用 root 用户启动 supervisor。在 supervisor.conf 下添加配置文件:
[program:nginx]command=/usr/sbin/nginxstartsecs=0stopwaitsecs=0autostart=falseautorestart=falsestdout_logfile=/home/wang/supervisor/log/nginx.logstderr_logfile=/home/wang/supervisor/log/nginx.err
好了,都配置完之后,启动 supervisor:
supervisord -c supervisor.conf
访问页面,也可以用 ab 进行压力测试:
ab -c 100 -n 100 http://127.0.0.1:8000/qw/1
-c 用于指定压力测试的并发数, -n 用于指定压力测试总共的执行次数。
安装 Python 探针
搭建好了 web,想实时监控应用数据,有什么好的工具,用 OneAPM 的 Python 探针试试,
首先也是安装 Python 探针:
pip install -i http://pypi.oneapm.com/simple --upgrade blueware
根据 License Key 生成配置文件:
blueware-admin generate-config (License Key) = blueware.ini
由于是在虚拟环境下,所以要特别注意路径,修改 supervisor.conf 里面两项:
[program:myapp]
command = /home/wang/supervisor/super/bin/blueware-admin run-program /home/wang/supervisor/super/bin/gunicorn -w 4 -b 0.0.0.0:8000 myapp:app
environment = BLUEWARE_CONFIG_FILE=blueware.ini
重启应用
supervisorctl # 进入命令行supervisor> reload # 重新加载
向上面一样访问页面,也可以用 ab 进行压力测试
几分钟后有下图,可以看到页面加载时间,web 事物,页面吞吐量,其中后面是设置自定义事物“Business Transaction”。
参考文章
10. 我安装boost python 时碰到问题,网上搜索可能是缺少 python-dev,这是什么东西,哪里下载
你用的是mod_python,可能是版本太老了。它检查到版本不对。
如果使用最新版本的mod_python也许没有这个问题。
另外就是通过它的检测,这个不难。通常检测是通过几个办法:
1.注册表。这个地方我不太记得了。似乎有1-2个值是标志python版本的。你搜索一下看。
最笨的办法是搜索python的class里的注册值。找到python,看看它后面的版本号以及执行路径。如果不对。你将2.5.4改成2.5就OK
2.python执行文件本身报告出来的版本。这个有些难,如果搞不定可以通过一个批处理过滤一下。
3.python的安装目录名不对。(可能性不大)
不过老实说mod_python已经过时了,现在一般都是用wsgi的。连fastcgi都用得少了。就是wsgi。