Django开发者群  - 讨论区

标题:[入门级]在Ubuntu上用Apache发布Django项目

2012年04月30日 星期一 20:28

[入门级]在Ubuntu上用Apache发布Django项目

本人甚愚,一本薄薄的『Django Web開發指南』怎麼也看不完。

雖然書看不完,倒是做了一個簡單的Django項目。

還記得書中道:“誰要是敢使用開發用的manage.pl runserver來發佈Django項目,就吊銷他的執照。”

故決定用Apache來發佈。

『Django Web開發指南』附錄上介紹了方法,但語焉不詳。

想想現在都是Ubuntu了,大概發佈個Django不會很難吧!

終於,我在谷歌上搜索到這樣一篇文章:

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

很詳盡,不足之處是英文的。於是,根據自己在Ubuntu11.10上的實際操作,翻譯之。

甚簡:

翻譯開始

在Ubuntu 10.04上使用Apache和mod_wsgi安裝Django

作者:KEVAN STANNARD

發佈於:2010年12月11日

這是一篇在Ubuntu 10.04上使用Apache和mod_wsgi安裝Django的一步步的操作指南。

 

第一部分 – 服務器的準備工作

升級服務器

> sudo apt-get update

> sudo apt-get upgrade

 

安裝Apache和mod_wsgi

> sudo apt-get install apache2 libapache2-mod-wsgi

 

安裝setup tools和pip

> sudo apt-get install python-setuptools

> sudo apt-get install python-pip

 

安裝Django

> sudo pip install django

 

創建存儲網站的目錄

我要將網站存儲在/srv/www目錄下。/srv目錄已經存在了,因此我們只需創建/www目錄

> sudo mkdir /srv/www

(譯者註:可能原著是服務器版本吧!我的個人機上沒有/srv目錄,所以我的指令是:

sudo mkdir /srv/www -p)

 

第二部分 – 添加測試用主機條目(host entries)

我們將要構建兩個用於測試配置的域名:

- 一個用於測試WSGI是否工作

- 另一個用於測試Django

 

我的測試用的虛擬機的IP地址是172.16.52.130,所以我會在我的本地hosts文件中(而不是服務器上)構建如下域名

> sudo nano /etc/hosts

 

在其中增加如下信息:

172.16.52.130    djangoserver

172.16.52.130    wsgi.djangoserver

172.16.52.130    hello.djangoserver

 

第三部分 – 测试WSGI

重建我的wsgi测试网站内容

> sudo mkdir /srv/www/wsgi

> sudo nano /srv/www/wsgi/app.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]

 

创建一个新的apache网站

> sudo nano /etc/apache2/sites-available/wsgi

 

并添加如下内容

<VirtualHost *:80>

 

    ServerName wsgi.djangoserver

    DocumentRoot /srv/www/wsgi

 

    <Directory /srv/www/wsgi>

        Order allow,deny

        Allow from all

    </Directory>

 

    WSGIScriptAlias / /srv/www/wsgi/app.wsgi

 

</VirtualHost>

 

激活网站

> sudo a2ensite wsgi

> sudo /etc/init.d/apache2 reload

 

然后,打开你的浏览器,并访问如下地址

http://wsgi.djangoserver

 

你会看到‘Hello World!’字样

 

第四部分 – 测试Django

创建一个新的Django网站

> cd /srv/www

> sudo django-admin.py startproject hello

 

为网站创建一个wsgi文件

> sudo mkdir /srv/www/hello/apache

> sudo nano /srv/www/hello/apache/django.wsgi

 

并添加如下内容

import os

import sys

 

path = '/srv/www'

if path not in sys.path:

    sys.path.insert(0, '/srv/www')

 

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

 

import django.core.handlers.wsgi

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

 

创建一个新的apache网站

> sudo nano /etc/apache2/sites-available/hello

 

并添加如下内容

<VirtualHost *:80>

 

    ServerName hello.djangoserver

    DocumentRoot /srv/www/hello

 

    <Directory /srv/www/hello>

        Order allow,deny

        Allow from all

    </Directory>

 

    WSGIDaemonProcess hello.djangoserver processes=2 threads=15 display-name=%{GROUP}

    WSGIProcessGroup hello.djangoserver

 

    WSGIScriptAlias / /srv/www/hello/apache/django.wsgi

 

</VirtualHost>

 

激活网站

> sudo a2ensite hello

> sudo /etc/init.d/apache2 reload

 

然后,打开你的浏览器,访问如下网址

http://hello.djangoserver

 

你会看到Django的默认安装信息。

 

 

注释

 

注释 1 – 在守护进程模式(daemon mode)下运行

 

我们测试的Django网站是配置在守护进程模式下运行的。因为配置文件中有这样的两行:

WSGIDaemonProcess hello.djangoserver processes=2 threads=15 display-name=%{GROUP}

WSGIProcessGroup hello.djangoserver

 

因此,如果改动了代码,我们不必重启apache服务器。我们只要touch一下wsgi文件,对代码的改动便会被提交:

> sudo touch /srv/www/hello/apache/django.wsgi

 

注释 2 – 指定应用程序的模块名称

 

指定DJANGO_SETTINGS_MODULE变量来定义应用程序的模块名称,看起来是个好主意。因此,我们不这样写:

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

 

而是这样写:

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

 

好用的指令

 

错误日志文件

如果除了错误,就要检查apache的日志文件

> tail /var/log/apache2/error.log

 

使用开发模式(development mode)测试

 

如果你的应用程序不打算使用wsgi来工作,那么你可以通过开发服务器来检查它是否工作顺畅。

> cd /srv/www/hello

> python manage.py runserver 0:8080

 

然后在你的网页浏览器中输入

http://hello.djangoserver:8080

 

参考文献

 

一个使用Django的WSGI改进脚本。

An improved WSGI script for use with Django.

http://blog.dscpl.com.au/2010/03/improved-wsgi-script-for-use-with.html

 

Mogwsgi——与Django集成

Modwsgi – Integration With Django

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

 

当我使用django和wsgi时,如何避免导入错误:“Could not import settings ‘mofin.settings’”?

How do I stop getting ImportError: Could not import settings ‘mofin.settings’ when using django with wsgi?

http://stackoverflow.com/questions/1411417/how-do-i-stop-getting-importerror-could-not-import-settings-mofin-settings-whe

 

django和mod_wsgi的配置问题

Configuration problems with django and mod_wsgi

http://stackoverflow.com/questions/2587251/configuration-problems-with-django-and-mod-wsgi

 

这篇文章发布于Django领域中。标签为:Django, Python, Ubuntu, WSGI。

 

翻譯完畢

本人在ubuntu11.10下,操作了一下。發現wsgi存在python的版本問題。

我的ubuntu11.10原來安裝了python2.7.

但是,安裝wsgi時,卻又安裝了python2.6.

這樣一來,python2.6下的wsgi就找不到python2.7下的django了。

直接的影響就是django項目中的admin的css效果沒有了。

爲了在網頁上實現css,我在etc/apache2/sites-enabled/telnomis中增加了一個別名。

sudo gedit /etc/apache2/sites-enabled/telnomis 


<VirtualHost *:80>

 

    ServerName telnomis.djangoserver

    DocumentRoot /srv/www/telnomis

 

    <Directory /srv/www/telnomis>

        Order allow,deny

        Allow from all

    </Directory>

 

    WSGIDaemonProcess telnomis.djangoserver processes=2 threads=15 display-name=%{GROUP}

    WSGIProcessGroup telnomis.djangoserver

 

    WSGIScriptAlias / /srv/www/telnomis/apache/django.wsgi

 

    Alias "/static/admin" "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/media"    

    <Directory "/usr/local/lib/python2.7/dist-packages/django/contrib/admin">    

        Options Indexes FollowSymLinks  

        AllowOverride None  

        Order allow,deny  

        Allow from all  

    </Directory>    

    <Location "/static/admin">    

        SetHandler None    

    </Location> 

</VirtualHost>

問題順利解決。

近期升級到Ubuntu12.4,python的版本問題解決了!

2012年05月04日 星期五 00:18

用virutualenv可以同時支持多個python版本

2012年05月05日 星期六 16:43

谢谢夏老师指导!

2012年12月26日 星期三 23:45

你好  周先生。

添加如下信息 def application(environ, start_response):

我在加如信息后,保存退出  老提示找不到文件。 

control +o  也 保存不了

 

我刚使用ubuntu ,  极度不熟悉中。  望指教下

2012年12月29日 星期六 23:06

hello  得部分可能遇到得错误和修改方法

path = '/srv/www'

if path not in sys.path:

    sys.path.insert(0, '/srv/www')

修改:

    sys.path.insert(0, '/srv/www/hello ')


如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2024

    京ICP备05028076号