2009/2/13可以在此处查看使用Ubuntu Intepid的本文的更新版本。
笔记:这篇文章已重新加工将nginx作为前端到Apache2,而不是本文中显示的相当不寻常的配置。您可能希望查看重新编辑版本。
当您为您构建重要的东西时,您希望在坚实的基础上建立它。没有什么比试图建立一个很棒的软件,然后在配置不良的服务器上运行它。最近我决定停止有这种感觉,我重建了我的服务器,这是我的指示。
最终产品是使用Apache2和Mod_Python的Ubuntu Feisty Server,以提供Django和LightTPD以提供静态媒体。它使用Memcached作为其缓存后端,并使用Postgres8.2作为其数据库。使用这些说明构建的机器实际上是运行此博客,这是一个Django应用程序。我在Slicehost 256 Meg切片上执行了此安装,但它们会同样适用于任何Ubuntu服务器(对共享托管不太好)。
在有趣的东西上。
信用
此设置指南是整合由广泛的个人编写的大量其他资源。以下是我在此设置过程中使用的资源,我将尝试在我使用它们的上下文中链接到它们。
- [执行与Feisty相关的服务器的指南] [服务器]
- [启动指南设置Feisty] [开始]
- [将slicehost切片升级到ubuntu feisty] [feisty]
- [在SliceHost上设置MySQL Django服务器] [开始]
- [在Ubuntu上安装Postgres [Postgres]
- [在Djangojoe的Postgres上为Django的Slicehost上设定CentOS] [CentOS]
- [将LightTPD配置为Apache] [LightTPD]
将Ubuntu Dapper升级到Feisty
这些说明从[这里] [Feisty]取出。
从Ubuntu Dapper(Slicehost的当前Ubuntu OS)升级到Feisty是快速而无痛的。您需要按顺序进行升级,直接跳到Feisty可能会使您的安装不稳定。最终的'LSB_RELEASE -A'只是确认升级已经发生。它应该表明你现在已经安装了Ubuntu Feisty。
###我的文章
- 我的列表输入一个
- 我的名单第两个
类=“Python”>def x(a,b):返回* b code>
添加Apache&其他库
主要是从[这里] [apache]。
我们在此安装一些库。其中一些人将有趣的小安装屏幕走过。虽然它们都不是特别困难。您可能会注意到PSYCO_PG2未通过APT-GET安装,即apt-get存储库中的PSYCO_PG2对我不起作用(保持导致段故障)。
###我的文章
- 我的列表输入一个
- 我的名单第两个
@@ python def x(a,b):返回* b
这将是安装的最简单的部分。它持续的时候仍然很好。
PostgreSQL.
从[这里] [postgres]和[这里] [CentOS]所采取的说明。
确保在下面的代码中使用自己的密码而不是仅仅是“密码”。
进口myproject.myapp.markdownpp.作为Markdownpp.
然后我们编辑pg_hba.conf文件。
班级入口(楷模。模型):标题=楷模。Charfield.(最长长度=200.)身体=楷模。文本域()Body_html.=楷模。文本域(空白的=真的那无效的=真的)use_markdown.=楷模。布尔菲尔德(默认=真的)
转到文件的末尾并注释出以主机开头的所有行(除非您将远程访问您的数据库)。最后,本地线应该看起来像
def保存(自己):如果自己。use_markdown.:自己。Body_html.=Markdownpp.。啰嗦(自己。HTML.)别的:自己。Body_html.=自己。身体极好的(入口那自己)。保存()
最后,我们希望重新启动Postgres:
班级资源(楷模。模型):标题=楷模。Charfield.(最长长度=50.)markdown_id.=楷模。Charfield.(最长长度=50.)内容=楷模。文件菲尔德(upload_to.=“myapp /资源”)
配置memcached.
现在我们将要设置Memcached。这很容易做到,它将为您的Django系统提供一个很好的缓存系统。第一步是:
班级入口(楷模。模型):标题=楷模。Charfield.(最长长度=200.)身体=楷模。文本域()Body_html.=楷模。文本域(空白的=真的那无效的=真的)use_markdown.=楷模。布尔菲尔德(默认=真的)
在Ubuntu上,用户www-data是运行web服务器的用户,使其与某些其他发行版的Apache用户非常相似。使用-uww-data选项运行Memcached意味着我们将使用与Web服务器的相同用户运行Memcached。端口11211是MEMCACHED的默认值,除非您正在运行多个MEMCACHED实例,否则可能不会更改。我选择用32毫米的内存开始我的memcached实例,因为我的切片只有256 meg总数,我的django应用程序根本没有很多信息来缓存。您可能想要将更多内存投入到Memcached,特别是如果您有更大的切片。
接下来,我们需要获得Python-Memcached,这是一个Python Memcached客户端。有一个备用CMEMCACHED库的Python是Python-Memcached的两倍,但我遇到了编译(我相信,因为我从存储库安装Memcached而不是来自源)。python-memcached很容易得到:
def保存(自己):如果自己。use_markdown.:件=[自己。HTML.,]为了res.在资源。对象。全部():裁判=你\ n \ n[%S.]:%S.“%S.“\ n \ n'%(res.。markdown_id.那res.。get_content_url.(),res.。标题那)件。附加(res.)内容=你“\ n“。加入(件)自己。Body_html.=Markdownpp.。啰嗦(内容)别的:自己。Body_html.=自己。身体极好的(入口那自己)。保存()
然后应该是那个。
在这个确切的时刻(2007年7月12日),Django的当前SVN版本被Python-Memcached破坏了。已经提交了一个补丁并正在通过提交系统工作,因此希望这个问题很快就会解决。如果有人受到这种情况的影响,请向我发送电子邮件或留下评论,我将更新本指南以包含所需的修改。
设置非root帐户
现在为一些安全的事情。不是我非常了解安全性,但每个都有帮助。
复制root行并将其复制为新帐户。
现在,您将希望关闭SSH和SSH作为您刚刚制作的新用户。
然后,您要禁用root帐户。
def保存:极好的(入口那自己)。保存()res.=自己。资源。全部()#等等极好的(入口那自己)。保存()
禁用root帐户背后的思想是难以拥有众所周知的名称,这是不好的。它也是糟糕的,可以快速苏。不可否认,您的新帐户仍将无法访问,但至少它将是您的帐户,而不是普遍已知的帐户。
使用键设置自动SSH登录
这更像是一个安全的解决方案,但一旦我们禁用基于密码的访问(虽然您可能选择不为此),但它也是对您的安全性的提升。我假设在〜/ .ssh的本地机器上有一组RSA键。如果您没有(或者您使用Windows等),您将更好地查找更详细的指南。
进口时间那线从django.db.进口楷模从django.dispatch.进口调度员从django.db.models.进口信号########################你的型号去这里########################
远程登录现在应该是自动的。现在我们将更多地限制ssh更多
您希望进行这些更改
现在退出,ssh。一切都在工作,对吧?如果是这样,我们现在将禁用SSH的密码(必须具有启用密钥)。再来一次
defresave_object.(发件人那实例那信号那*args.那**kwargs.):defdo_save.():时间。睡觉(3.)尝试:实例。保存()除了:经过ID=unicode.(实例)+unicode.(实例。ID)尝试:应该_Resave.=resave_hist.[ID]除了KEYERROR.:resave_hist.[ID]=真的应该_Resave.=真的如果应该_Resave.是真的:resave_hist.[ID]=错误的线。start_new_thread.(do_save.那())别的:resave_hist.[ID]=真的
并附加这条线
resave_hist.={}调度员。连接(resave_object.那信号=信号。post_save.那发件人=入口)
并使这种变化
(PAM有助于防止蛮力SSH登录,因为自禁用基于密码的登录以来不再适用。)
现在只有具有有效键的用户可以在...中只意味着只有您的一个帐户可以ssh。如果要允许其他人登录,您可以让他们向您发送他们的公共RSA密钥,或者您可以暂时基于密码的登录他们建立了ssh。
配置iptables.
是的......我不知道如何在Ubuntu上做到这一点。这就是说我不知道配置文件在哪里。命令行工具是杀戮我。我拒绝学习另一个迷你语言!我们真的需要每个平凡的任务是否需要迷你语言?
那说,你应该做这个。希望我会尽快打开Helpfiles并之后更新。
设置django等
现在我们要设置Django。我们首先为我们的Django应用程序创建一个postgres用户:
暗示:写下数据库表,用户和密码我们将在几分钟内再次使用它们,在将来就足够了,以完全忘记它们。
现在我们需要给www-data用户访问我们的文件(www-data是运行Web服务器的用户)。
然后我们希望为Django创建一些文件夹。您可以随意使用文件夹布局,主要是一个个人的东西,但您必须在遵循其余指令时保留您记住的任何更改。
qaodmasdkwaspemas18ajkqlsmdqpakldnzsdfl.
现在我们查看Django源并将已被检查的源链接到站点包中,以便Python解释器可以找到它。
qaodmasdkwaspemas19ajkqlsmdqpakldnzsdfl.
现在我们可以创建我们的第一个Django项目。
Qaodmasdkwaspemas20ajkqlsmdqpakldnzsdfl.
现在编辑新棉被设置.py文件。
qaodmasdkwaspemas21ajkqlsmdqpakldnzsdfls.
您需要进行多种更改,这些是您需要添加(未更改)的行.PY:
qaodmasdkwaspemas22ajkqlsmdqpakldnzsdfl.
我个人使用一个非常长的中间件缓存,因为我的页面没有太大改变(我主要为博客提供服务,因此缓存整页对我的情况也可以),标准值远低于300左右。关键前缀用于区分使用相同的缓存后端的多个Django项目之间的高速缓存。如果您只计划使用缓存后端的一个项目,那么将键作为空字符串将键作为空字符串,如果您在AHVING多个项目上进行计划,则每个都应该具有唯一的键前缀。最后,匿名唯一的选项意味着登录用户不会接收缓存的页面。对于我的应用程序,只有admin将被登录,这是一个适当的设置,您的跨国可能会有所不同。
以下是您需要在Settings.py中修改的现有行:
qaodmasdkwaspemas23ajkqlsmdqpakldnzsdfl.
稍后扩展此Django设置:您最终将希望添加自己的模板和您自己的媒体以及您自己的苹果。要提供对您的媒体文件的访问,您将希望从它们中的/var/www/yourdomain.com/media文件夹中创建一个symlink:
qaodmasdkwaspemas24ajkqlsmdqpakldnzsdfl.
对于模板,您只需要将一个路径附加到您的模板目录template_dirs. code>变量在设置s.py文件中。配置Django应用程序和项目有时是艺术而不是科学。去尝试绘画一段时间,但如果你需要,请随时寻求帮助。
创建我们的Django项目后,我们需要完成Apache设置。首先,我们需要为错误日志制作一个目录:
qaodmasdkwaspemas25ajkqlsmdqpakldnzsdfls.
然后我们需要编辑我们的Apache配置文件:
qaodmasdkwaspemas26ajkqlsmdqpakldnzsdfl.
这将最初是一个空文件,您将为它添加它:
qaodmasdkwaspemas27ajkqlsmdqpakldnzsdfl.
最后更多的符号链接来密封这笔交易:
qaodmasdkwaspemas28ajkqlsmdqpakldnzsdfl.
继续并重新启动Apache和A Stock Django页面应该显示:
qaodmasdkwaspemas29ajkqlsmdqpakldnzsdfl.
安装lighttpd.
基本上我跟随[这里的说明] [LightTPD]。他们是奇妙的说明,虽然我确实最终玩了一些比赛,以便使用我的特定安装细节。
首先,我们打开配置文件:
Qaodmasdkwaspemas30ajkqlsmdqpakldnzsdfl.
接下来,您需要取消注释60行
qaodmasdkwaspemas31ajkqlsmdqpakldnzsdfl.
添加以下内容(或许在第118行,就像他做的[这里] [Lighttpd]):
qaodmasdkwaspemas32ajkqlsmdqpakldnzsdfl.
然后我们启动LightTPD服务器:
qaodmasdkwaspemas33ajkqlsmdqpakldnzsdfl.
并启用一些Apache2 Mods ...
qaodmasdkwaspemas34ajkqlsmdqpakldnzsdfl.
最后编辑proxy.conf文件
qaodmasdkwaspemas35ajkqlsmdqpakldnzsdfl.
您需要修改文件看起来像这样(你将改变现有的配置文件看起来如下所示,而不仅仅将下面的文本附加到配置文件中):
qaodmasdkwaspemas36ajkqlsmdqpakldnzsdfl.
您无需启用代理路由/ etc或修改文件之外的文件的任何部分
标签接下来,您需要修改VirtualHost文件:
qaodmasdkwaspemas37ajkqlsmdqpakldnzsdfl.
在VirtualHost中添加这些行(除媒体位置除外,很好。我把它们放在顶部附近):
qaodmasdkwaspemas38ajkqlsmdqpakldnzsdfl.
加载到Apache中的变化并重新启动它。
qaodmasdkwaspemas39ajkqlsmdqpakldnzsdfl.
[LightTPD]推荐使用Curl来验证您从LightTPD的页面提供页面的[LightTPD],但它更容易使用Firefox / Firebug并查看您认为Lighttpd的静态媒体文件的响应标题服务。无论哪种方式,您现在应该使用lighttpd为/媒体文件夹提供所有文件。
完成的
此时,您应该有一个漂亮的Kickin'Django服务器。您可能想要遍布安全的安全性(我将展望这个并添加更多细节),但我觉得这一点,安全保障,正如我可以到来的那样接近生产服务器。mod_python for django,Lighttpd为静态文件,Memcached用于缓存,Python 2.5(2.4将有点稳定,但此时我认为2.5的成熟是足够的,对我来说很好。
如果您对任何设置有任何疑问,请告诉我,我很乐意提供帮助。此外,如果有人对改进这个设置有任何想法,我真的很想听到它们。