配置Apache和Django连接的过程可谓是一波三折,在此记录。

 

零、基本的安装

软件环境

l  Linux-3.2.0-4-amd64-x86_64-with-debian-7.7

l  python 2.7.3

l  django 1.3.7

l  apache 2.2

l  mod_wsgi 3.3

基本指令、模块的安装(需root权限)

l  curl命令,用于命令行下访问网站,返回html内容

apt-get curl

l  sudo命令

apt-get sudo

l  mod_wsgi

apt-get install libapache2-mod-wsgi

一、使用apache2提供静态页面

Apache 预备知识

可执行程序 /usr/sbin/apache2

配置文件目录 /etc/apache2/

网站(web)文件目录 /var/www

  网站文件目录是指站点所对应的文件目录,可以配置。站点的配置文件是在 /etc/apache2/sites-available/目录中的文件里配置的,如/etc/apache2/sites-available/default文件。在这个文件中,字段DocumentRoot后填写网站文件目录,比如网站文件目录改到/var/temp 那么就把这行改成:DocumentRoot /var/temp

配置文件(/etc/apache2/下)

  配置文件并不是在网上盛传的httpd.conf(这可能在以前的apache版本中有)里面,而是:

apache2.conf        基本的配置信息

ports.conf             端口

  当然,也可以配置httpd.conf或者任一的.conf,apache会把配置文件目录下所有.conf结尾的配置文件载入进来。

Apache基本操作

$ su (切换成root用户,然后输入密码)

# service apache2 status        # 查看状态

# service apache2 start          # 启动

# service apache2 stop          # 停止

# service apache2 reload              # 重新应用配置文件

# service apache2 restart              # 重新启动进程

# a2ensite xx                           # 激活xx站点

# a2dissite xx                          # 取消xx站点

# apachectl configtest            # 检查一下 apache2 配置文件语法

 

主机名

  主机名是用来指代域名(IP),可以直接输入主机名或域名来访问网站。主机名配置在/etc/hostname或/etc/hosts文件中。在Debian里是后者。

  打开/etc/hosts(通过vi /etc/hosts 来打开,需要root权限),可将本地域名的主机名叫做localhost,将本机ip的主机名叫做lei,如下所示:

  127.0.0.1 localhost

  192.168.131.233  lei

此时开启Apache后,可以访问http://localhost,及http://lei ,将展示 It works!默认界面。

如果Linux的发行版是命令行式的,没有图形界面,就用curl http://localhost和curl http://lei来访问。

配置虚拟主机

  上一步中访问的localhost和lei是默认页面,如果想访问自己的页面,需要进行如下配置:

$ cd /etc/apache2            # 进入 apache2 的配置目录

$ ls ./sites-enabled          # 查看当前生效的站点

            # 返回 000-default , 这是默认启动的站点

$ su

# a2dissite default           # 取消默认站点 default

            # 这时候sites-enabled目录下没有000-default

# service apache2 reload       # 使配置生效

  现在刷新一下 http://localhost/,应该已经不能访问了。

  现在/etc/apache2/sites-available/目录下,建立一个名为 test的文件,为了清晰,写得尽可能简单,具体内容如下:

<VirtualHost *:80>

  ServerName localhost

  DocumentRoot /var/www

</VirtualHost>

解释:

-------------------------------------------------------------

<VirtualHost *:80>   #80是自定义的端口号

          #要与/etc/apache2/ports.conf中Listen后的端口号一致

          #如Listen 8001,则这里要写成<VirtualHost *:8001>

  ServerName localhost     #填写之前配置过的主机名

  DocumentRoot /var/www      #填写站点目录

</VirtualHost>

-------------------------------------------------------------

  配置文件建立完毕后,要让它生效:

$ sudo su

# a2ensite test   # 激活 test 站点

# ls /etc/apache2/sites-enabled/        # 查看当前生效的站点

                  # 返回 test ,表示test站点生效

# apachectl configtest                         # 检查一下 apache2 配置文件语法

  返回结果:

apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

Syntax OK

  在 apache2.conf 中增加主机名后,解决报错问题。添加如下:

ServerName localhost

  重新检查配置文件语法,并重新载入:

# apachectl configtest                  # 这次结果应该只有 Syntax OK

# service apache2 reload

  现在又能够正常访问 http://localhsot/ 。

二、配置 wsgi 模块

查看版本

$ sudo dpkg -l libapache2-mod-wsgi              #查看wsgi的版本

                      # 结果: libapache2-mod-wsgi 3.3-4+deb7u1

$ a2enmod wsgi                                           #验证模块安装正常

                      # 结果:Module wsgi already enabled

 

验证 wsgi

  为了验证wsgi的正常使用,准备手工建一个最简单的wsgi应用,实际就是一个py脚本。

  在 /var/www/目录下,建立一个名为 main.wsgi 文件,内容如下:

def application(environ, start_response):

  status = '200 OK'

  output = 'Hello World!'

  response_headers = [('Content-type', 'text/plain'),

  ('Content-Length', str(len(output)))]

  start_response(status, response_headers)

  return [output]

  在 /etc/apache2/sites-available/test中增加一行,同时可以取消DocumentRoot配置,修改后内容如下:

<VirtualHost *:80>

  ServerName test

  WSGIScriptAlias / /var/www/main.wsgi

</VirtualHost>

  应用配置:

$ sudo service apache2 reload

  现在刷新 http://localhost 能够返回Hello World! 说明 wsgi 解析正常。

三、配置 wsgi解析django

  1. 在django工程目录下新建django.wsgi,并编辑如下:

import os

import sys

HERE = os.path.dirname(__file__)

sys.path.append(HERE)

sys.path.append(os.path.dirname(HERE))

os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

#settings指工程目录下的settings.py

#如果该文件放在当前目录的xx文件夹下,就写成'xx.settings'

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()

  2. 修改 apache2 的配置文件 /etc/apache2/sites-available/test,修改后的内容(其中/home/apache2/lei_web/为django工程目录):

<VirtualHost  *:8001>

  ServerName localhost

  DocumentRoot  /home/apache2/lei_web/

  <Directory />

    Options Indexes FollowSymLinks

     AllowOverride None

  </Directory>

  <Directory /home/apache2/lei_web/>

    Order allow,deny

    Allow from all

  </Directory>

  WSGIScriptAlias / /home/apache2/lei_web/django.wsgi

  ErrorLog ${APACHE_LOG_DIR}/error.log

CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

  3. 重新应用 apache2 配置文件

$ sudo service apache2 reload

  访问 http://localhost/ ,能够看到 django 的 It Worked! 页面,说明django安装正常。

四、SVN配置

Apache进程进行svn前的配置

  由于在Django工程中有进行svn操作的代码,Apache服务器启动Django后,是以www-data身份做系统中运行,无对应权限。这时需要用sudo以及相关的/etc/sudoers来帮忙。

  修改sudo配置文件,直接键入visudo命令编辑配置文件:

  1. 注释Defaults requiretty

    Defaults requiretty修改为 #Defaults requiretty, 表示不需要控制终端。 否则会出现sudo: sorry, you must have a tty to run sudo。

  2. 增加行 Defaults visiblepw

    否则会出现 sudo: no tty present and no askpass program specified。sudo-1.6.9p17-5.el5不支持这个参数,sudo-1.7.2p1-10.el5支持。

  3.在配置文件靠近尾部的地方有一行root ALL=(ALL) ALL,紧接着这行加入www-data ALL=(ALL) NOPASSWD:/usr/bin/svn *

    注:NOPASSWD可以使在命令执行时不需要交互输入www-data用户的密码

参考链接:

  django 1.5.1 apache2 wsgi 配置教程 http://blog.chinaunix.net/uid-23500957-id-3838223.html

  php如何控制svn更新代码 http://blog.csdn.net/ownfire/article/details/9187177

Linux(Debian)+Apache+Django 配置的更多相关文章

  1. Linux系统Apache服务 - 配置 HTTP 的虚拟机主机

    接Linux系统Apache服务 - 配置HTTP的默认主页 1.创建/srv目录,作为httpd的文件目录,并创建/srv/default/www和/srv/www1.example.com/www ...

  2. Windows Apache Django 配置

    所有刚刚学习Django 都会在这里配置的时候遇到问题.这里我简单秒速一个傻瓜步骤,使得大家更容易上手. 一.环境准备 1.windows 32系统 至少是 XPSP3 版本,注意:apache2.X ...

  3. linux(debian)系统django配远程连接sqlserver数据库

    费了将近一天时间.最终解决,记下来留给须要的人 须要安装的: python-odbc : https://github.com/mkleehammer/pyodbc下载后install 安装pytho ...

  4. linux下apache+openssl配置记录

    软件环境 Apache Httpd 2.2.29 (http://httpd.apache.org ) OpenSSL 1.0.1h (http://www.openssl.org/source ) ...

  5. Linux下 Apache Vhost 配置 防止403

    首先,贴一份正确的配置(最简单的) <VirtualHost *:80> DocumentRoot /home/ubuntu/www/spider/public ServerName sp ...

  6. linux下apache php配置redis

    1.安装redis 第一步: 下载:https://github.com/nicolasff/phpredis/archive/2.2.4.tar.gz 上传phpredis-2.2.4.tar.gz ...

  7. Linux系统Apache服务 - 配置HTTP的默认主页

    1.安装HTTPD和httpd-manual软件包 # yum -y install http httpd-manual 2.创建/var/www/html/index.html 内容是 Hello ...

  8. 【Linux】Apache服务配置

    一. URL 统一资源定位符 http://www.sina.com.cn:80/admin/index.html 二. 环境安装 LAMP 源码包编译安装 版本可以自定义 生产环境 安全 稳定 开发 ...

  9. Linux下apache+phppgadmin+postgresql安装配置

    Linux下apache+phppgadmin+postgresql安装配置 操作系统:CentOS 安装包:httpd(首选yum), php(包括php以及php-pgsql,php-mbstri ...

随机推荐

  1. VB6.0对鼠标滚轮不支持的解决方法[转]已经测试work

    今天要修改一个老DLL文件,安装了vb6,用起来很不爽. VB6编辑器 和 VBA编辑器 (Office 中的VB编辑器)都不支持鼠标滚动. 但 MS 已经提供了补丁http://download.m ...

  2. 解决安装vc2005运行库时提示Command line option syntax error.Type Command/?for Help

    安装vc2005运行库时提示 这是因为它要自解压到用户的临时文件夹下,如果用户名中带中文,就会报错. 简单的解决方法是,手动解压之,再安装 当然,你也可以修改用户名或者再新建个用户.

  3. GDI+一般性错误(A generic error occurred in GDI+)

    1.GDI+的前世今生 GDI+全称图形设备接口,Graphics Device Interface (GDI) ,他的爸爸叫做GDI, 用C写的.Windows XP出来以后用C++重新写了一下,变 ...

  4. Linux设备驱动中的并发控制

    1.并发是指多个执行单元同时.并行的执行.并发的执行单元对共享资源的访问很容易导致竞态. 在 Linux 内核中,主要的竞态发生于如下几种情况: ①对称多处理器(SMP)的多个 CPU ②单CPU内进 ...

  5. 使用OpenFileDialog会更改默认程序目录

    这个问题可能只有在特定的程序中会发现:当我们在程序中使用相对路径时是依赖于当前目录的.所以在使用类似代码: XElement rootNode = XElement.Load(@"zips/ ...

  6. 扩展easyui 的表单验证 (转)

    From:http://www.cnblogs.com/gengaixue/archive/2012/07/14/2591054.html easyui 的validatebox()提供了自定义验证的 ...

  7. 【matlab】用matlab 保存带标记图像、图片的方法总结

    最近看了一些用matlab对图形图片进行保存的帖子和资源,关于图像保存的方法给大家分享一下这些方法是大家所使用方法的一个总结. 如今常用的方法有三种printf,imwrite,saveas下面分别介 ...

  8. 3、android notification 详细用法

    在 android 系统中,在应用程序可能会遇到几种情况需要通知用户,有的需要用户回应,有的则不需要,例如: * 当保存文件等事件完成,应该会出现一个小的消息,以确认保存成功. * 如果应用程序在后台 ...

  9. 《Java中的包机制》

    /* 包的机制:(1) */ package lee; public class PackageTest { public void Test(int num) { System.out.printl ...

  10. svg DOM的一些js操作

    这是第一个实例,其中讲了如何新建svg,添加元素,保存svg document,查看svg. 下面将附上常用一些元素的添加方法:(为js的,但基本上跟java中操作一样,就是类名有点细微差别) Cir ...