ubuntu下安装apache2.2+mod_wsgi+django(一)

http://blog.csdn.net/huangxiansheng1980/article/details/7202319

为了让apache或者nginx或者lighthttpd支持python可以用mod_python的方式,但是由于mod_python这个开源的项目似乎已死,官网地址:


www.modpython.org/


这个项目的从2009后再也没有去继续了,python的版本目前已经到了3.2,但是mod_python最后一个版本

mod_python-3.3.1.tgz                  2009-10-03 20:45 

却只支持到了python 2.5, 所以如果你一定要用mod_python,那么你安装只能使用python 2.5以前的版本了。


我想使用最新的python的版本,所以不得不放弃mod_python这种方式了。


还有另外一种方式,就是我们要介绍的mod_wsgi+django的方式。


1. 安装apache2

使用命令安装或者源代码安装都可以,这里我采用的是命令安装方式:


sudo apt-get install apache


目前最新的版本是 v2.2,如果你要安装其他版本请使用apache2官方提供的安装包。

安装过程中,同时apache2会安装一个服务apache2供我们启动,停止和重启apache服务。

启动:

sudo service apache2 start  或者

sudo apachectl start


停止:

sudo service apache2 stop 或者

sudo apachectl stop


重启:

sudo service spache2 restart 或者

sudo apachectl restart

注意sudo不能少,否则权限不够,会失败。


安装完后,启动服务,测试一下apache服务器,在 浏览器中输入 http://localhost, 回车看看效果,如果你看到如下的东西,说明apache安装成功:

[html] view plain copy
  1. It works!  
  2.   
  3. This is the default web page for this server.  
  4.   
  5. The web server software is running but no content has been added, yet.  

这里要说一下apache在linux的配置文件。配置文件的名字和位置和windows下面不一样,windows下面apache安装后全部的文件是在一个目录下面,包括可执行程序,对应的动态库,以及配置文件,但是linux下面却是分开的。可执行程序是

/usr/sbin/apache2


配置文件是在

/etc/apache2


网站(web)文件是在:

/var/www


这个当然你可以配置,修改

/etc/apache2/sites-available/default

这个文件的下面的字段

DocumentRoot /var/www

比如你改到/var/temp

那么就把这行改成:

DocumentRoot /var/temp


配置文件并不是在httpd.conf里面,而是apache2.conf,而这里面并没有配置所有的东西,如端口是在ports.conf这个文件里面,而网站的根目录是在上面的提到的

/etc/apache2/sites-available/default

这个文件中。 虽然也有httpd.conf这个文件,但是httpd.conf里面是空的,其实你可以在这里面加一些配置,因为apache2.conf里面会把httpd.conf加到它的文件里面。


2. 安装mod_wsgi


安装mod_wsgi有3种方式,源码安装和二进制文件安装和命令安装。

a. 命令安装:

目前unbuntu提供了2个源,一个针对2.x python,另外一个针对3.x python:

libapache2-mod-wsgi - Python WSGI adapter module for Apache

libapache2-mod-wsgi-py3 - Python 3 WSGI adapter module for Apache


b. 二进制文件安装:

从下列地址下载二进制文件,然后把他们copy到对应的文件夹即可:

http://ftp.cn.debian.org/debian/pool/main/m/mod-wsgi/libapache2-mod-wsgi_3.3-4_i386.deb


c. 源码安装:

通过下面的链接下载源码:

http://code.google.com/p/modwsgi/downloads/detail?name=mod_wsgi-3.3.tar.gz

解压进入该目录,使用configure生成Makefile,

[python] view plain copy
  1. ./configure  

发现有错误:

apxs: command not found

上网google一堆,发现有人说缺少httpd.devel等等之类的,发现都解决不了问题,后来在mod_wsgi的官网找到了答案:

http://code.google.com/p/modwsgi/wiki/QuickInstallationGuide

原来是要安装apache2-dev,使用下列命令安装:

[html] view plain copy
  1. sudo apt-get install apache2-dev  

还有一个依赖库就是python-dev
[html] view plain copy
  1. sudo apt-get install python-dev  

现在,再来一次configure,发现成功的生成了makefile

接下来就是

[html] view plain copy
  1. make  
  2.   
  3. make install  

如果没有什么错误这样我们就成功了安装了mod_wsgi

还有一个方法就是直接看看下面的文件存不存在:

/usr/lib/apache2/modules/mod_wsgi.so


3. 配置apache来加载mod_wsgi


如果你的apache是在运行状态,先停止它

[html] view plain copy
  1. sudo service apache2 stop  


然后配置apache, 在/etc/apache/httpd.conf加入下面一行:

LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so


注意上面的/usr/lib/apache2/modules/mod_wsgi.so是我的安装路径,如果你的是安装其他的目录,应做出相应的调整,怎么查看这个so安装在什么位置,就用find命令:

[html] view plain copy
  1. sudo find / -name mod_wsgi.so  


重启apache

[html] view plain copy
  1. sudo service apache2 start  
如果系统找不到你的mod_wsgi.so,apache服务就会启动失败。


4. 安装django

先安装必要的工具

[text] view plain copy
  1. sudo apt-get install python-setuptools  
  2. sudo apt-get install python-pip  


安装 Django

[text] view plain copy
  1. sudo pip install django  


django安装在python路径下面的子文件夹下,如下:

/usr/local/lib/python2.7/dist-packages/django

你可以使用下面的命令来查看是否安装成功:

[html] view plain copy
  1. sudo find / -name django  
如果看到上面的输出,就表示安装成功。


5. 测试


为了测试的方便,我们新建一个虚拟主机:

[html] view plain copy
  1. sudo vim /etc/hosts  
通过上面的命令开发hosts这个文件,添加如下行:

192.168.0.107  wsgi.testserver

上面的IP换成你自己的。然后保存退出。


因为前面我们已经提到,我们的网站是在

/var/www目录下面,所以我们cd到这个目录,创建一个工程目录,创建一个工程文件


[html] view plain copy
  1. cd /var/www  
  2. sudo mkdir wsgi  
  3. cd wsgi  
  4. sudo vim main.wsgi  


在main.wsgi输入下列代码:

[html] view plain copy
  1. def application(environ, start_response):  
  2.     status = '200 OK'  
  3.     output = 'Hello World!'  
  4.    
  5.     response_headers = [('Content-type', 'text/plain'),  
  6.                         ('Content-Length', str(len(output)))]  
  7.     start_response(status, response_headers)  
  8.    
  9.     return [output]  



 

让后保存推出。

这里少许解释一下上面的都做了些什么。

为了让目录结构比较清晰,我们创建自己的目录wsgi,而不是直接www的根目录下,让后创建一个python文件,这个文件用来生成一个hello world的网页,并且告诉web服务器-这里就是apache,处理状态是成功-200,就这么简单。


接下来,让apache来加载我们自己的工程网站,去apache的配置目录/etc/apache/sites-available, 新建一个我们网站的配置文件。


[html] view plain copy
  1. cd /etc/apache/sites-available  
  2. sudo vim wsgi  

让后在新创建的wsgi文件中输入如下内容:

[html] view plain copy
  1. <VirtualHost *:80>  
  2.    
  3.     ServerName wsgi.testserver  
  4.     DocumentRoot /var/www/wsgi  
  5.    
  6.     <Directory /var/www/wsgi>  
  7.         Order allow,deny  
  8.         Allow from all  
  9.     </Directory>  
  10.    
  11.     WSGIScriptAlias / /var/www/wsgi/main.wsgi  
  12.    
  13. </VirtualHost>  

 
 

激活我们的网站:

[html] view plain copy
  1. sudo a2ensite wsgi  

加载我们的网站:

[html] view plain copy
  1. sudo service apache2 reload  


这时候,你打开浏览器,输入http://wsgi.testserver, 你就可以看到hello world。 如果你看到了,说明一切ok了。如果没有看到可以留言给我,大家一起研究。


这个东西比较麻烦的,挺耗时间的,花了我大半天的时间,中间出现了一个 server error 500, 最后一个一个排除,发现是main.wsgi文件有语法错误导致。因为我初次搞web server的东西(之前是c++在做桌面和网络应用),所以不知道是什么原因错误,花了不少时间。 后来想到,wsgi既然是一个python文件,那么看看这个文件用python执行会是什么效果,就用


python main.wsgi


结果告诉我,有语法错误,修复这个错误后,浏览器中输入http://wsgi.testserver,看到了想要的结果。



这里说明一点,上面把python脚本保存成后缀wsgi,但是这不是规定,你也可以定义成其他,如常用的后缀名py,或者干脆什么后缀名都不用,都没有问题。

 

还有一点,上面我们虽然安装了django,但是我们根本没有用到这个框架,因为我觉得先用wsgi+python自己写一些东西,然后再使用django来创建的自己的web应用,能更好的理解django帮我做了哪些事,如何更好的使用它。这好比先熟练的使用win32的编程,然后再使用MFC,你就能更好的理解MFC,更好的使用MFC。

 

将来我会在其他的博文中接着续写django的学习和使用。


 

参看文档:

https://docs.djangoproject.com/en/1.2/howto/deployment/modwsgi/

http://blog.stannard.net.au/2010/12/11/installing-django-with-apache-and-mod_wsgi-on-ubuntu-10-04/

你可能感兴趣的:(ubuntu下安装apache2.2+mod_wsgi+django(一))