【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
基本配置
LoadModulepython_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
运
行一个开发服务器
只要 加入MaxRequestsPerChild1
到配置文件中强制 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
参加讨论
相关文章推荐
- 【day 17】python编程:从入门到实践学习笔记-基于Django框架的Web开发-设计样式和部署(一)
- 新手上路,django学习笔记(1) 环境部署
- Django学习笔记五:通过nginx+uwsgi部署Django项目(暂时静态文件没有部署上去)
- 学习笔记(八)——Django初步了解及环境部署
- [置顶] 【第一部分-django论坛从搭建到部署】一个完整的Django入门指南学习笔记
- Django学习笔记1——win10下安装pip与python环境【django环境部署I】
- [置顶] 【第三部分-django论坛从搭建到部署】一个完整的Django入门指南学习笔记
- 【学习笔记】AWS之wordpress网站部署
- django_book学习笔记1-django介绍
- OGG学习笔记04-OGG复制部署快速参考
- Django学习笔记2 模型的使用
- Django 学习笔记(一)安装
- Introduction to 3D Game Programming with DirectX 11学习笔记 6 Direct3D中的绘制(三)像素着色器
- Effective Java 学习笔记 (11)
- Django框架学习笔记(22.CSRF原理简单介绍)
- Django框架学习笔记(23.中间件结合实例介绍)
- restlet2.1 学习笔记(十二)使用Tomcat部署RestletService
- DL学习笔记【11】caffe参数调节-loss层
- hadoop学习笔记(六)——hadoop2.5.2全分布模式实现的部署
- Django学习第一天学习笔记-环境搭建、模版变量