不合理的繁荣
  • 金沙手机APP
  • 为django创建我的梦想服务器

    2007年7月13日。
    Django(72), Lighttpd(2), memcache(3), PostgreSQL(4), slicehost(4), Ubuntu(4)

    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。

    ###我的文章
    1. 我的列表输入一个
    2. 我的名单第两个

    类=“Python”>def x(a,b):返回* b

    添加Apache&其他库

    主要是从[这里] [apache]。

    我们在此安装一些库。其中一些人将有趣的小安装屏幕走过。虽然它们都不是特别困难。您可能会注意到PSYCO_PG2未通过APT-GET安装,即apt-get存储库中的PSYCO_PG2对我不起作用(保持导致段故障)。

    ###我的文章
    1. 我的列表输入一个
    2. 我的名单第两个

    @@ 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.变量在设置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的成熟是足够的,对我来说很好。

    如果您对任何设置有任何疑问,请告诉我,我很乐意提供帮助。此外,如果有人对改进这个设置有任何想法,我真的很想听到它们。

    嗨伙计。我是将要阿卡@lethain.。
    如果你想向我联系,那么我提供帮助的方式。如果您想从我这里收到电子邮件,请订阅我的每周时事通讯金沙手机APP。

    我写一个优雅的拼图。

    也,员工工程师。

    受欢迎的

    • 写五,然后合成:良好的工程战略很无聊。
    • 管理Codebase中的技术质量。
    • 致力于重要的事情。
    • 您的第一个90天作为CTO或VP工程。
    • Digg团队如何被剥夺。

    最近的

    • Mailbag:我们应该打电话给他们建筑师吗?
    • RSS饲料更换!接下来几天迁移博客。
    • mailbag:如何在内部平台上处理不满意的用户?
    • 工程造成措施。
    • 数字园艺在旺盛的草图。

    有关的

    • 如何跨模型更改迁移数据
    • 为Django编写自定义上下文
    • Google Analytics的Django中间件(转发)
    • 关于django的思考(转发)
    ©将金沙手机网larson 2021标签金沙手机APPrss.关于