[入门级]在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的版本問題解決了!
http://www.zeuux.com/group/django/bbs/content/53945/