博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用Apache+mod_wsgi部署python程序 作者:leven | 日期2010-11-29 00:09:37
阅读量:6170 次
发布时间:2019-06-21

本文共 2517 字,大约阅读时间需要 8 分钟。

用Apache+mod_wsgi部署python程序

使用Apache+mod_wsgi部署webpy等python程序

webpy是一个python上的非常轻量级的web框架,它和其他许多python web框架一样,都能支持wsgi部署,而目前来看比较优秀的wsgi部署方案自然是Apache+mod_wsgi,它提供非常简单优秀的部署方式,使得python程序的部署不再困难,本文将详细讲述在Apache上部署mod_wsgi的方法,并尝试使用mod_wsgi支持webpy程序.

首先,我们假定我们的服务器已经安装配置好Apache了,安装路径为/usr/local/apache,虚拟主机配置文件在/usr/local/apache/conf/vhost下,那么我们可以开始安装mod_wsgi.

从mod_wsgi的官方网站http://code.google.com/p/modwsgi/下载最新的源代码,截止到本文,其最新版为3.3.下载解压,我们需要编译安装
在编译之前,我们需要确认当前环境是否能支持mod_wsgi,编译它需要完整的gcc编译环境,同时必须保证安装了python和python-dev包,如果您不确定是否有python支持,在debian上可以直接apt-get安装

1 apt-get install python python-dev

如果提示未安装,安装即可

下面开始编译mod_wsgi

1 ./configure --with-apxs=/usr/local/apache/bin/apxs --with-python=/usr/bin/python
2 make
3 make install

如果没有错误,那么恭喜,mod_wsgi已经被成功编译并安装了.

然后我们编辑/usr/local/apache/conf/httpd.conf文件
加上

1 LoadModule wsgi_module modules/mod_wsgi.so
2 AddType text/html .py

如果要在某个虚拟主机上启用python+wsgi支持,只需要在vhost的配置文件中加入

1 WSGIScriptAlias / /var/www/main.py/

其中/var/www/main.py就是提供wsgi的主程序

当然,一般程序都有静态文件支持,所以,您可能需要对某个目录下的文件跳过处理,如下

1 Alias /static   /var/www/static/

如此即可.最后加上目录设置即可,对于上面的例子,完整的虚拟主机配置如下

01 ServerAdmin admin@xxx.com
02 DocumentRoot /var/www
03 ServerName xxx.com
04 ServerAlias www.xxx.com
05 WSGIScriptAlias / /var/www/main.py/
06 Alias /static   /var/www/static/
07 AddType text/html .py
08 ErrorLog /var/log/httpd/xxx_error.log
09 CustomLog "|/usr/bin/cronolog /var/log/httpd/xxx_access_%Y%m%d.log" custom1
10  
11  
12 Options Indexes FollowSymLinks
13 AllowOverride All
14 Order allow,deny
15 Allow from all

这样就配置好了此站点的mod_wsgi支持.那么对于python程序,应该如何使用这样的配置工作呢?下面我们以webpy为例,考虑实际部署一个测试程序

对于webpy,官方给出了wsgi的配置例子,具体参考:http://webpy.org/cookbook/mod_wsgi-apache/zh-cn
在本文中,我们参考之后,实际的main.py内容如下:

01 #!/usr/bin/env python
02 import os
03 import sys
04 path = os.path.dirname(os.path.realpath(__file__))
05 sys.path.append(path)
06   
07 import web
08   
09 urls = (
10         '/', 'index'
11 )
12   
13 class index:
14         def GET(self):
15                 return "Hello, I am Leven."
16   
17 app = web.application(urls, globals())
18 curdir = os.path.dirname(__file__)
19 session = web.session.Session(app, web.session.DiskStore(curdir + '/' + 'sessions'),)
20   
21 def session_hook():
22         web.ctx.session = session
23   
24 app.add_processor(web.loadhook(session_hook))
25 application = app.wsgifunc()

稍微解释下,由于我们考虑是虚拟主机部署,因此服务器并未安装webpy,我们将webpy放入web目录下,因此,在使用的时候,必须将当前目录加入path才可以正常载入webpy模块,所有文件开头先将当前目录加入path.

然后,由于web程序中会经常用到session,因此我们将session也加入到了程序中,具体存储路径在sessions目录下.

将webpy目录和main.py上传到web根目录,然后访问,如果访问结果如下图,恭喜,您的配置已经成功.

转载地址:http://mmjba.baihongyu.com/

你可能感兴趣的文章
如何快速实现异地不同网络打印机共享
查看>>
openinstall免费服务对App推广有哪些作用?
查看>>
基于Docker的微服务CI CD流水线
查看>>
学好SEO需要掌握哪些知识要点?
查看>>
JetBrains GoLand macv2019.1.2中文版如何换成无牵引模式?
查看>>
电气火灾监控系统工作原理
查看>>
中使馆驳斥《金融时报》“中国网络威胁论”
查看>>
【挨踢人物传】茶乡浪子:“传奇”职场路,一生感谢情(第12期)
查看>>
我的友情链接
查看>>
c#关于数据库连接操作的案例
查看>>
聊聊最近接触的媒体查询!
查看>>
HAproxy指南之haproxy重定向应用(案例篇)
查看>>
学习 HTTP协议挺不错的一个类
查看>>
深入字节码 -- ASM 关键接口 MethodVisitor
查看>>
linux 文件权限
查看>>
Linux常用命令集合
查看>>
Oracle DML
查看>>
Linux - FHS文件系统层次标准
查看>>
报错:Invalid bound statement (not found)
查看>>
Linux GPT分区格式磁盘的相关操作
查看>>