zoukankan      html  css  js  c++  java
  • Linux(Debian)+Apache+Django 配置

    配置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 svn切换用户
    解决QQ“抱歉,无法发起临时会话,您可以 添加对方为好友以发送消息”
    node.js中http.respone.end方法概述
    niginx:duplicate MIME type "text/html" in nginx.conf 错误(转载)
    大三暑假实习,我们可以怎么做
    一个Java程序员的实习总结(2)
    正式工作的前奏——一个Java程序员的实习总结(1)
    【个人】当我秀智商的时候我秀什么
    基于java的设计模式入门(1)——为什么要学习设计模式
    【个人】我不愿让你一个人
  • 原文地址:https://www.cnblogs.com/dreamlofter/p/4478873.html
Copyright © 2011-2022 走看看