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

2023-11-04

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安装成功:

  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,使用下列命令安装:

  1. sudo apt-get install apache2-dev  

还有一个依赖库就是python-dev
  1. sudo apt-get install python-dev  

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

接下来就是

  1. make  
  2.   
  3. make install  

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

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

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


3. 配置apache来加载mod_wsgi


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

  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命令:

  1. sudo find / -name mod_wsgi.so  


重启apache

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


4. 安装django

先安装必要的工具

  1. sudo apt-get install python-setuptools  
  2. sudo apt-get install python-pip  


安装 Django

  1. sudo pip install django  


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

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

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

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


5. 测试


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

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

192.168.0.107  wsgi.testserver

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


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

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


  1. cd /var/www  
  2. sudo mkdir wsgi  
  3. cd wsgi  
  4. sudo vim main.wsgi  


在main.wsgi输入下列代码:

  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, 新建一个我们网站的配置文件。


  1. cd /etc/apache/sites-available  
  2. sudo vim wsgi  

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

  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>  

 
 

激活我们的网站:

  1. sudo a2ensite wsgi  

加载我们的网站:

  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/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ubuntu下安装apache2.2+mod_wsgi+django(一) 的相关文章

  • 万字长文,SpringSecurity

    思维导图如下 RBAC权限分析 RBAC 全称为基于角色的权限控制 本段将会从什么是RBAC 模型分类 什么是权限 用户组的使用 实例分析等几个方面阐述RBAC 思维导图 绘制思维导图如下 什么是RBAC RBAC 全称为用户角色权限控制

随机推荐

  • javascript算法之数组反转浅谈

    本文主要介绍了javascript算法之数组反转 文章围绕主题展开详细的内容介绍 具有一定的参考价值 需要的小伙伴可以参考一下 1 数组反转 1 1 leecode题目 旋转数组 给你一个数组 将数组中的元素向右轮转 k 个位置 其中 k
  • Servlet是不是线程安全的?

    首先在servlet中的方法 三个重要方法 1 init 进行资源的加载 2 service 处理请求 根据请求方式 调用doGet或者doPost 3 destroy 进行资源的释放 servlet是单实例的 假如在处理请求时候 多线程访
  • AcWing 104. 货仓选址

    题目 在一条数轴上有 N 家商店 它们的坐标分别为 A1 AN 现在需要在数轴上建立一家货仓 每天清晨 从货仓到每家商店都要运送一车商品 为了提高效率 求把货仓建在何处 可以使得货仓到每家商店的距离之和最小 输入格式 第一行输入整数N 第二
  • windows下访问linux下的文件,【IT之家学院】如何从Win10访问Linux子系统中的文件 - IT之家...

    在19H1 目前处于Insider Preview阶段 预计4月份正式推送 中 微软为适用于Linux的Windows子系统带来了一项有趣的功能 这项功能允许用户从Windows 10访问Linux子系统中的文件 今天的这期教程 我们来讨论
  • AppScan 漏扫工具-保姆及配置使用说明

    本文章仅供学习使用 严禁在未经网站管理员的允许的条件下扫描任何网站 工具的滥用违反国家安全法后果自负 申明 本文实验环境在内网中进行 网站为自己服务器所搭建的sqli labs DVWA master测试网站 1 AppScan安装和基础配
  • 请分别创建出listA、listB、listC,完成以下各题 (1)将listC中的内容添加到listB中: (2)输出listA与listB的交集listD; (3)输出listA与listB的并集...

    答 1 将listC中的内容添加到listB中 将listC中的每一项元素都添加到listB尾部 2 输出listA与listB的交集listD 定义一个空listD 遍历listA中的每个元素 如果listB中有相同的元素 则将该元素加入
  • 爬虫碰到状态码412的解决办法

    爬虫碰到状态码412 近期在使用python的requests库爬取网页时 碰到返回状态码为412的情况 状态码412含义为 Precondition Failed 服务器在验证在请求的头字段中给出先决条件时 没能满足其中的一个或多个 这个
  • Arthas 使用实践

    文章目录 1 Arthas 2 学习总结 2 1 所有环境都在线上 学习时不用自己搭环境 2 2 官方文档 2 3 相关参考博文 2 4 idea arthas 插件 3 各种捣腾 3 1 Arthas 下载使用 3 2 支持管道操作 3
  • 物联网智能病床项目

    目录 第一部分 系统架构 第二部分 MCU工作过程 第三部分 嵌入式操作系统 第一部分 系统架构 总体采用设备端 MCU 医用传感器 通信模组 WiFi 蓝牙 4G 通信端 MQTT协议 应用层服务器组成构建一整套物联网系统 第二部分 MC
  • pytest框架之fixture测试夹具详解

    一 fixture的优势 pytest框架的fixture测试夹具就相当于unittest框架的setup teardown 但相对之下它的功能更加强大和灵活 命名方式灵活 不限于unittest的setup teardown 可以实现数据
  • 14-1_Qt 5.9 C++开发指南_网络编程及主机信息查询_HostInfo

    Qt 网络模块提供了用于编写 TCP IP 客户端和服务器端程序的各种类 如用于 TCP 通信的QTcpSocket 和 QTcpServer 用于 UDP 通信的 QUdpSocket 还有用于实现 HTTP FTP 等普通网络协议的高级
  • Flex4 Error #2032 Stream Error的解决方式

    最近在做一个项目 在程序发布的初期没有发现什么问题 但是有的用户反映看不到站点 并截图Error 2032错误 但是在研发中心测试没有问题 后来通过测试幸运地在一台测试机上发现了这个问题 而同时测试其他9台机器 发现都可以正常显示 而后到网
  • C语言中void*详解及应用

    void在英文中作为名词的解释为 空虚 空间 空隙 而在C语言中 void被翻译为 无类型 相应的void 为 无类型指针 void似乎只有 注释 和限制程序的作用 当然 这里的 注释 不是为我们人提供注释 而是为编译器提供一种所谓的注释
  • 开源毕业设计:基于嵌入式ARM-Linux的应用OpenCV和QT实现的人脸识别系统(源码+论文)

    毕业一载有余 把毕业设计作品分享一下 希望能帮助到有需要的同学们 资料获取 帮助 答疑 辅导 等请联系博主 请点如下链接 linux face txt zengzr share contact Gitee com 毕设课题选题参考 毕业设计
  • 在WIN10上用QT Creator写安卓APP

    操作系统 WIN 10 HOME QT 5 15 QT Creator 4 12 先讲一下踩过的坑 坑 本意用 虚拟机好复制移植 用了vm14 结果发现报错 adb fail to install 以为是QT的问题 结果不是 因为直接用指令
  • python字符串替换空格_Python去除、替换字符串空格的处理方法

    个人想到的解决方法有两种 一种是 replace old new 第一个参数是需要换掉的内容比如空格 第二个是替换成的内容 可以把字符串中的空格全部替换掉 第二种方法是像这样 str 1 data a b c str 2 list str
  • 用海伦公式求三角形周长与面积 C++

    海伦公式又译作希伦公式 海龙公式 希罗公式 海伦 秦九韶公式 它是利用三角形的三条边的边长直接求三角形面积的公式 表达式为 S p p a p b p c 其中p等于周长的一半 给出平面坐标上不在一条直线上三个点坐标 x1 y1 x2 y2
  • Netty (3)-ByteBuf、池、直接内存、16进制

    传统IO在收发数据时 会阻塞当前线程 一边接收数据 一边对数据进行处理 处理完一段数据再继续接收下一段 再处理 而NIO会一次性将接收的所有数据 放入内存 处理数据时只需要读取内存 而IO线程被完全释放 这就是非阻塞 而被放入内存的数据在
  • 最通透的KMP算法详解

    前言 以前自己写一个字符串匹配或者主串中查找子串的程序时 都是用一个指针指向主串 另一个指针指向子串 然后两指针按字母逐一比较 看着自己写的代码运行一切正常时还沾沾自喜 现在想来 虽然这种方法也行的通 但是当字符串足够长时 效率会很低 自从
  • ubuntu下安装apache2.2+mod_wsgi+django(一)

    http blog csdn net huangxiansheng1980 article details 7202319 为了让apache或者nginx或者lighthttpd支持python可以用mod python的方式 但是由于m