您的位置:首页 > 编程语言 > Go语言

【django 学习笔记】11-部署Django

2010-06-01 13:48 453 查看

准备你的代码库

关闭Debug
模式.

如果 DEBUG
模式被开启.
例如,
如果

DEBUG
被设置成 True ,
那么:

所有的数据库查询将被保存在内存中,

django.db.connection.queries

的形式.
你可以想象,
这个吃内存!

任何404
错误都将呈现django
的特殊的404
页面(
第3
章有)
而不是普通的404
页面。 这个页面包含潜在的敏感信息,
但是不会暴露在公共互联网。

你的应用中任何未捕获的异常,

基本的python
语法错误到数据库错
误以及模板语法错误都会返回漂亮的Django

误页面。 这个页面包含了比404

误页面更多的敏感信息,
所以这个页面绝
对不要公开暴露。

来关闭模板Debug

式。

实现一个404
模板

实现一个500
模板

设置错误警告

首先,
改变你的ADMINS
设置用来引入你的E-mail
地址,
以及那些任何需要被注意的联系人的E-mail
地址。 这个设置采用了类似于(
姓 名, Email)
元组,
像这样:

ADMINS = (

(‘John Lennon’,
‘jlennon@example.com’),

(‘Paul McCartney’,
‘pmacca@example.com’),

)

第二,
确保你的服务器配置为发送
电子邮件。 设置好postfix,sendmail

其他本书范围之外但是与Django

置相关的邮件服务器,
你需要将将 EMAIL_HOST
设置为你的邮件服务器的正确
的主机名.
默认模式下是设置为’localhost’,
这个设置对大多数的共享
主机系统环境适用.
取决于你的安排的
复杂性,
你可能还需要设置EMAIL_HOST_USER,EMAIL_HOST_PASSWORD,EMAIL_PORT
或EMAIL_USE_TLS
。你还可以设置EMAIL_SUBJECT_PREFIX
以控制Django
使用的 error e-mail
的前缀。
默认情况下它被设置为‘[Django] ‘

使用针对产品的不同的设置

设置成两个全面的,
彼此独立的
配置文件

设置一个基本的配置文件(
比如,
为了开发)
和第二个(
为了产品)
配置文件,
第二个配置文件仅仅从基本的那个配置文件导入配置,
并对需要定义的进行复写.

使用一个单独的配置文件,
此配
置文件包含一个Python
的逻辑判断
根据上下文环境改变设置。

最终,
最精简的达到两个配置环境
设定的方案是使用一个配置文件,
在此配
置文件中根据不同的环境进行设置。 一个达到这个目的的方法是检查当前的主机名。 例如:

# settings.py

import socket

if
socket.gethostname() == ‘my-laptop’:

DEBUG = TEMPLATE_DEBUG
= True

else:

DEB
4000
UG = TEMPLATE_DEBUG
= False

# …

在这里,
我们从python
标准库导入了socket
模块,
使用它来检查当前系统的主机名。
我们可以通过检查主机名来确认代码是否运行在产品服务器上。

DJANGO_SETTINGS_MODULE

DJANGO_SETTINGS_MODULE

你的配置文件的python
的路径

用Apache
和mod_python
来部署Django

基本配置

LoadModule
python_module /usr/lib/apache2/modules/mod_python.so

<Location “/”>

SetHandler
python-program

PythonHandler
django.core.handlers.modpython

SetEnv
DJANGO_SETTINGS_MODULE mysite.settings

PythonDebug Off

</Location>

PythonPath
“['/path/to/project', '/path/to/django'] + sys.path”

在同一个 Apache

实例中运行多个 Django


只要像下面这样使用 VirtualHost

可以实现:

NameVirtualHost *

<VirtualHost *>

ServerName
www.example.com

# …

SetEnv
DJANGO_SETTINGS_MODULE mysite.settings

</VirtualHost>

<VirtualHost *>

ServerName
www2.example.com

# …

SetEnv
DJANGO_SETTINGS_MODULE mysite.other_settings

</VirtualHost>

用 mod_python

行一个开发服务器

只要 加入MaxRequestsPerChild
1
到配置文件中强制 Apache

在每个请求时都重新载入所有的 代码。

使用相同的Apache

例来服务Django
和Media
文件

<Location
“/media/”>

SetHandler None

</Location>

错误处理

处理段错误

一种替代方案: mod_wsgi


使用FastCGI

署Django
应用

在使用Apache

共享主机服务商处运行Django

可扩展性

如何把一台服务器扩展为一个大规模的服务器集群

分离出数据库服务器

对于Django
来说,
把数据库服务器分离开来很容易:
只需要简单地修改 DATABASE_HOST ,
设置为新的数据库服
务器的IP
地址或者DNS
域名。 设置为IP
地址总是一个好主意,
因为使用DNS
域名,
还要牵涉到DNS
服务器的可靠性连接问题。

运行一个独立的媒体服务器

使用单机服务器仍然留下了一个大问题:

理动态内容的媒体资源,
也是在同一台机
器上完成的。

Django
的admin
管理接口需要能够获得足够的权限来处理上
传的媒体(
通过设置MEDIA_ROOT )
。如果媒体资源在另外的一
台服务器上,
你需要获得通过网络写操作
的权限。 如果你的应用牵

涉到文件上载,Django
需要
能够面向媒体服务器撰写上载媒体 如果媒体是在另外一台服务器上的,
你需要部署一种方法使得Django
可以通过网络去写这些媒体。

实现负担均衡和数据冗余备份

你还需要另一个软件来帮助你在多台服务器之间均衡网络流量:
流量均衡器(load balancer)

Apaches
的 mod_proxy
是一个可以考虑的选择,
但另一个配置更棒的选择是: memcached
是同一个团队的人写的一个负
载均衡和反向代理的程序.(
见第15
章)

慢慢变大

下面的这些步骤都是上面最后一个的变体:

当你需要更好的数据库性能,

可能需要增加数据库的冗余服务器。 MySQL

置了备份功能; PostgreSQL

该看一下Slony
(http://www.djangoproject.com/r/slony/)
和 pgpool

(http://www.djangoproject.com/r/pgpool/)
,
这两个分别是数据库备份和连接池的工具。

如果单个均衡器不能达到要求,

可以增加更多的均衡器,
并且使用轮训(round-robin)DNS
来实现分布访
问。

如果单台媒体服务器不够用,

可以增加更多的媒体服务器,
并通过集群
来分布流量。

如果你需要更多的高速缓存(cache),

可以增加cache
服务器。

在任何情况下,
只要集群工作性
能不好,
你都可以往上增加服务器。

性能优化

RAM
怎么也不嫌多

大多数的Web
服务器90%
的时间都浪费在了硬盘IO
上。 当硬盘上的数据开始交换,
性能就急剧下降。 更快速的硬盘可以改善这个问题,
但是比起RAM
来说,
那太贵了。

如果你拥有多台服务器,
首要的是
要在数据库服务器上增加内存。 如果你能负担得起,

你整个数据库都放入到内存中。 这应该不是很困难,

们已经开发过一个站点上面有多于一百万条报刊文章,

个站点使用了不到2GB
的空间。

下一步,
最大化Web
服务器上的内存。 最理想的情况是,
没有一台服务器进行磁盘交换。
如果你达到了这个水平,
你就能应付大多
数正常的流量。

禁用 Keep-Alive

使用 memcached


经常使用memcached

参加讨论

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息