WikiFarmAlternative网站

摘要:管理wiki场或web服务器的有效方法。
版本:2.1
维护人员:本·威尔逊

上次测试:此配方上次在PmWiki版本PmWiki-2.3.34上测试

目录

问题

我喜欢Wiki Farm逐步方法,但有其他方法吗?

摘要

PmWiki是一个用于管理网站的通用工具。一个未被识别其特点是Pmwiki能够管理多个不同的网站同时从相同的代码库。此配方演示了web管理员可以配置PmWiki以在保持平稳处理升级的能力。实施后,此配方提供对PmWiki管理的集中控制。这个最终的结果是一个易于维护的web服务器。这个食谱可以应用于wiki场或网站上下文。

实施

此配方旨在保持安全性,同时提供易用性管理和灵活性。出于演示目的,我们将假设管理员想要管理三个网站:example.org,example.net和example.com。此过程的第一步是在不可通过web访问的目录中构建框架。使用这些网站例如,web目录将是:

/var/httpd/hosts/example.org/var/httpd/hosts/example.net/var/httpd/hosts/example.com

作为背景,我使用此配方的方法管理12个wiki字段托管在四个位于同一位置的网站上。这个食谱有允许我对所有这些站点进行无缝升级,同时减少运行简单shell脚本的管理开销。这个食谱中的一些表明了我个人的意识形态,比如显式设置配置值,而不是信任PmWiki这是因为我遇到了一些奇怪的情况这种方法在每种情况下都有效,但我遇到了困难按照PmWiki方式工作。此外,对这些进行硬编码值降低了PmWiki被颠覆的可能性那些衍生价值被利用。

下面的一些步骤设置变量。因为我的方法并不完全与PmWiki一致,我正在尝试控制这个食谱。因此,我将提供样本附件:WAF_example-farmconfig.php Δ用那些设置。(等待发布$SkinLibDirs(皮肤库目录)实施。)

设置集中式配置

那么,让我们使用/var/httpd/hosts作为非web目录。对于这个食谱的剩余部分,我们将称之为{核心目录}。需要在中创建的目录{核心目录}是下面示例中以红色列出的那些。注:此配方可以位于web服务的任何目录中用户可以访问(例如,apached或httpd),但不一定要访问{核心目录}。我们使用此目录简化文档。

核心目录内容:

/example.org/示例.net/example.com

/pmwiki-2.3.34版(您正在使用的PmWiki的当前版本)
/pmwiki测试(符号链接到/pmwiki-2.3.34)
/pmwiki共享
/pub(发布)
/食谱
/本地
的内容/pmwiki共享目录将是PmWiki对所有人来说都是通用的:

这个/本地目录允许您共享公共配置。通用配置可以集中在这里。对于例如,如果多个站点使用相同的安全配置,那么您可以将该配置放入/pmwiki-share/local/security.php.

这个/酒吧目录能够被放入/pmwiki共享目录。这是下面讨论更加详细。每个wiki字段必须有pub目录,但如果可以使用symlinks,则可以在中维护该目录/pmwiki共享并将其链接到这些字段。这允许您快速更新/酒吧目录一次并影响所有字段。例如,如果您对多个站点或字段使用相同的“蒙皮”,则此处的一个更改将立即在所有这些位置生效。此外,一些食谱需要放入文件/酒吧因此,通过将它们放在这里,我们可以提高/pmwiki共享.

这个/食谱目录应该 被删除出于安全目的,从web目录中删除。这降低了黑客利用薄弱配方的可能性。虽然这可能不是一个问题,但通常应该以“安全带和吊带”的方式来处理安全问题(即,比你认为应该的更小心)。此外,将该目录放入/pmwiki共享允许站点和wiki字段共享相同的菜谱。

我将指定一个文件作为通用配置文件。我通常称之为标准配置.php,但它类似于farmconfig.php。我选择了命名标准配置.php来帮助它它可以应用于多个地点和领域。

作为替代方案,/pmwiki共享可以是/usr/share/pmwiki/common,带有/pmwiki-2.3.34版位于/usr/share/pmwiki/pmwiki-2.3.34然而,此配方使用{核心目录}在所有示例中保持一致。

配置字段

为了利用这个食谱,你需要稍微修改使用它的字段的结构。截至2006年8月26日,我我修改了这个食谱,把这些步骤分解成更离散的部分。所以,其中有一节专门介绍您感兴趣的部件,请参考该部分。

在每个wiki字段中,您需要:

索引.php/pub->{core_directory}/pmwiki-share/pub(如果可以使用符号链接,则必须复制)/wiki.d(可以删除,请参阅下文。)/本地配置.php

上面的结构是你应该拥有的最小值。这个索引.php下面将更详细地讨论该文件。然而,它的目的是将田地映射到集中的农场信息。这个/酒吧此处的目录符号链接到/pmwiki共享/pub子目录。创建此命令(在Unix中)的命令是:“ln-sf{核心目录}/pmwiki-share/pub-pub“。如果您处于FTP环境中,或者无法创建此目录,则会失去这种安排的潜力。但是,要使其在没有符号链接的情况下工作,您应该复制/pmwiki共享/pub目录。

如上所述,可以移出wiki.dweb可访问目录的。由于该目录具有广泛的开放权限,我认为离开该目录本质上是不安全的维基。d日在web-accessible目录中。然而,如果您希望不使用这个目录,那么我将其留在这个清单中。

要进一步将字段映射到中心目录,您需要创建一个索引文件。符号链接和非符号链接配置都有一个示例。

在index.php中(带符号链接):

<?php(电话)$农场D= '{核心目录}pmwiki-latest';$FarmS='{core_directory}pmwiki共享/';$FarmC='{核心目录}pmwiki-share/食谱';$FarmL='{core_directory}pmwiki共享/本地';包含一次(“$农场D/pmwiki.php”);

因为我们可以使用符号链接,所以站点管理员可以$农场D指向一个目录,该目录实际上是当前PmWiki的符号链接安装。下面解释了如何以及为什么这样做。我有一个这种变化与无符号链接方法一致。创建版本.php文件,并放置所有Farm(X)变量:

<?php(电话)include_once('{core_directory}/pmwiki-share/version.php');包含一次(“$农场D/pmwiki.php”);

在这种情况下,web管理员无法使用符号链接。补救措施这样,管理员将创建一个跟踪版本的文件/pmwiki-share/local/version.php。这允许web管理员从一个集中的文件升级所有站点和农场,而不是必须使用新版本号编辑每个字段。这是进一步的解释如下。

版本.php的内容

<?php(电话)$version='pmwiki-2.3.34';#或$version='pmwiki_latest';带有符号链接。$FarmS='{核心目录}pmwiki-share';$FarmC=“$FarmS/食谱”;$农场D=“{core_directory}/$version”;$FarmL=“$FarmS/local”;

实际版本号将是您想要使用的任何版本。将变量移到这个公共文件中,这样就可以很容易地更改价值观,而无需在wiki种植园中搜索。

注:在这两种情况下,管理员强制分配$农场D因此,PmWiki没有机会感到困惑。这不使用“../”接近,因为将其放在完整路径中更安全。此外,这允许我复制wiki场的子目录中的index.php,并且仍然可以找到pmwiki.php的正确版本。我的经验是,这个变量的明确定义可以解决我遇到的各种问题。
Pm认为这太过分了。然而,通过在这里显式定义几个关键目录,我没有那么头痛。我在使用这种方法时遇到的唯一重要问题是/食谱要加入$农场D在这种情况下,我通常通过替换$农场D/食谱具有$农场C没有太多问题。

要访问集中的所有配方/食谱:

include_once(“$FarmC/{recipe.php}”);

注:您不需要将cookbook目录放到每个目录中字段!只需确保脚本知道在哪里查找即可。我分配index.php中的位置,无论字段位于何处都有效。此通过允许多个字段从一个食谱中受益。

要访问常用共享配置,请执行以下操作:

include_once(“$FarmL/standard_configurations.php”);

这是添加到每个wiki字段的本地/config.php文件到启用标准配置。

本地配置

您将创建“local/config.php”,就像创建普通的安装。请注意,常见的共享配置可以是站点具体而言。所以,如果你有两个网站,你可能有

/pmwiki共享/本地通用配置示例org.php通用配置示例com.php

然后,“example.org”的所有字段都可以访问标准配置,因此:

include_once(“$FarmL/common_config-example_org.php”);

如果您希望example.com和example.org共享一组通用的核心配置(例如,通用安全配方),将配置为超通用配置(例如。“common_security.php”)并将其包含在“common_config-{site_name}.php”。

每个字段都将包含自己的一组食谱。我喜欢跑步相同的基本六个,因此它们被放入farmconfig.php中,并且每个然后通过local.php单独包含不同的菜谱。

将Cookbook移出Web路径

移动/食谱离开web路径可能是最容易的获得最大回报的解决方案。然而,由于食谱的不同它们被创造出来后,头痛的可能性仍然存在。首先,我们会解决方案本身,然后讨论权衡。

移动食谱。第一步很简单:找到/食谱目录中的/pmwiki共享目录,通过贝壳毫伏命令或FTP。然后,您需要编辑您的配置文件以指向新位置。因此,当配方说你应该用一种方式引用它,你需要用另一种方式。下面这一段我说明了我的意思。通过速记,我创建了$农场C变量,它指向{core_directory}/pmwiki-share/cookbook.

#与此不同的是:include_once(“烹饪书/GreatRecipe.php”);#对此:include_once(“$FarmC/GreatRecipe.php”);#include_once(“{core_directory}/pmwiki-share/cookbook/GreatRecipe.php”);

将书移出Web路径的优势。这个解决方案提供了某些好处。最大的好处是安全改进。下午积极解决潜在的安全问题PmWiki核心中的漏洞。然而,并不是所有食谱作者都能做到。因此,通过将配方移开危害,配方的可能性开采量大大减少。第二个优势是可用性所有领域的食谱。维基农场配置配方$农场D/所有wiki都可以使用烹饪书。

将Cookbook移出Web路径的缺点。这个解决方案提供了某些权衡。配方由不同的开发人员编写。因此,每个开发人员都有不同的方法指的是他配方之外的文件。有时,作者认为食谱与他的食谱在同一目录中。有时,作者会尝试招募$农场D以帮助定位外部文件。通过移动/食谱由于$农场D(整个食谱$农场D远离所有本地目录),那么这些食谱就会失败。解决方法是要么正确错误,和/或联系配方开发人员并推荐他采用另一种方法(如下面的方法)。

换句话说(对于非技术性读者),如果您使用此配置,则必须在许多配方中编辑代码以使其正常工作。 彼得·鲍尔斯2015年6月3日凌晨03:04

define('GREATRECIPEPATH',目录名(__File__).'/');#define('COOKBOOKPATH',目录名(__File__).'/');

将wiki.d移出Web路径

如果您还想将wiki.d移到web区域之外,请记住设置$工作目录在每个字段的配置文件中。为了实现这一目标,创建新目录/pmwiki-share/work_dirs,并复制/维基。d日来自每个字段。你会想/维基。d日防止覆盖文件的唯一名称。下面是这个解决方案看起来:

{核心目录}/pmwiki共享/工作/示例org-wiki.d/example_com-wiki.d示例/例如net-wiki。d日

链接到非Web路径Wiki。D类在我们改变PmWiki的行为之前,我想简单提及一些相关变量。有三个受影响的变量:$工作目录,$WikiDir(维基目录)、和$LastModFile(上次修改文件)通常,前两个指向同一个位置,但后者是一个页面存储对象,前者是字符串。$LastModFile(上次修改文件)依赖于$WorkDir(工作目录)知道在哪里跟踪对文件进行修改。第四个变量$WikiLibDirs是另一个为了让这个工作,我们必须模仿变量。

在共享配置中,我们将重建$WikiLibDirs(维基目录)如下所示。请注意,我显式地设置了所有变数,而不是任凭机会。我们还正在创建一个新的调用了per-farm变量$维基---此变量在服务器场的本地配置文件。例如,如果您的新wiki.d是例如org-wiki。d日,然后将其放入本地文件“$WikiD='example_org-wiki.d';"这就变成了{core_directory}/pmwiki-share/work/example_org-wiki。d日.

$WorkDir=“$FarmS/work/$WikiD/”;$LastModFile=“$WorkDir.lastmod”;$WikiDir=新的PageStore(“$WorkDir\$FullName”,1);$WikiLibDirs=数组(&$WikiDir,新的PageStore(“$FarmM/work/share.d/\$FullName”),新的PageStore(“$FarmD/wikilib.d/\$FullName”));

将Wiki.d移出Web路径的优势。这个解决方案提供了某些好处。搬家的主要优势/维基。d日从中退出web路径提高了安全性。这是因为/维基。d日目录是全球可写和全球可执行的,这使得破解在服务器上放置和执行代码的机会。而PmWiki为了减轻这种情况,危险仍然存在。将其移出可以减少这种情况进一步危害。此外,这允许站点管理员将所有的/维基。d日公共目录中的目录,这有助于档案和其他行政职能。也就是说,您可以存档通过在一条路径上铺设柏油路来覆盖所有站点和字段。

将Wiki.d移出Web路径的缺点。这个解决方案提供了某些权衡。主要缺点是必须配置PmWiki,使其行为超出其默认行为。此外,通过分组全部/维基。d日加在一起不小心把它们都抹掉了。然而,这就是我们提前备份的原因而且经常如此。

将/pub移出Web路径

此解决方案假定下午将实施$SkinLibDirs(皮肤库目录)在2.1.15之后的版本中。因此$SkinLibDirs(皮肤库目录)可能会发生变化。这个解决方案有三个步骤:1)重新定位/pub目录2)编辑$SkinLibDirs(皮肤库目录)$SkinDirUrl(皮肤精灵)指示PmWiki在哪里查找皮肤和3)编辑.ht访问指示web服务器查找位置/酒吧.截止日期$SkinLibDirs(皮肤库目录)如果实现了,这个配方将添加一个替代步骤4,即创建一个符号链接。此步骤将被实现取代。

正在重新定位/pub目录。第一步是重新定位/酒吧目录。这可能是更直接的步骤,因为它只需要移动内容。这很简单mv-pub{core_directory}/pmwiki-share/。命令。在FTP环境中,只需将内容FTP到新位置,然后从默认位置删除它们。

配置蒙皮位置。 未实施 $SkinLibDirs(皮肤库目录)是Pmwiki用于搜索皮肤目录的目录数组。2.1.15和更早的方法检查脚本的目录和$农场D。此数组允许站点管理员添加目录。farmconfig.php,添加以下代码行。这将说明PmWiki查找皮肤目录的位置,这对于PmWiki:使用皮肤。

$SkinLibDirs=数组('{core_directory}/pmwiki-share/pub');

为Web服务器配置/pub位置。 未实施一次/酒吧已从web-path中删除,则必须指示web服务器在何处查找其内容。在Apache中,可以通过编辑.ht访问文件。如果您正在使用食谱:CleanUrls,则您可能已经熟悉此文件。.ht访问文件,在所有其他RewriteRules之后,添加下面的代码行。这一行告诉Apache查找{核心目录}/pmwiki-share/pub以满足任何参考/酒吧这意味着浏览器请求文件,例如/pub/skins/pmwiki/screen.css将导致Apache传递位于的文件{核心目录}/pmwiki-share/pub/skins/pmwiki/screen.css。我认为这是一个巧妙的伏都教。当你达到这一步时,你应该能够用你选择的皮肤查看Pmwiki网站没有需要有/酒吧在每个领域。

重写规则^/pub/?(.*){核心目录}/pmwiki-share/pub/$1[L,qsa]

备选:Symlink到/pub。如果您无法实现$SkinLibDirs(皮肤库目录).ht访问方法,然后另一种方法是创建一个符号链接/pmwiki共享/pub到wiki字段。为此,请确保当前工作目录是您想要符号链接的位置(密码). 然后,执行以下shell命令:ln-sf{核心目录}/pmwiki-share/pub-pub。您现在有一个链接/酒吧目录。

将/pub移出Web路径的优势。当然,有每个解决方案都需要一个理由。将此目录从web路径中移出的优势很大程度上是管理性的。当您管理多个共享相同皮肤、javascripts或CSS文件的wiki字段时,您可能更喜欢一次性更新该文件,并同时对所有字段进行有效更新。此解决方案提供了这一优势。此外,没有/酒吧directory减少了实现所使用的磁盘空间量。虽然对许多管理员来说,使用的空间量可能微不足道,但对一些管理员来说,磁盘空间仍然是一个问题。

将/pub移出Web路径的缺点。所有解决方案都提供了一些折衷。此解决方案的缺点是,编辑文件会带来一些开销,并且可能会调试.ht访问$SkinLibDirs(皮肤库目录)代码。此外,一些web服务器禁止符号链接或路径重定向。我对限制性网络主机的看法是考虑另一种选择,因为网络主机是一个商品市场。

优势:升级

此配方的真正优势在于能够升级。(使用维基农场-你将完成下面的前两个步骤,然后你就完成了。)什么时候?您正处于符号链接状态,下面是您需要做的:

  1. 下载最新版本的PmWiki
  2. 解压缩{core_directory}中的版本
  3. 删除/pmwiki测试符号链接
  4. 从添加符号链接/pmwiki-2.3.34版/pmwiki测试
代码:
wget-chttp://www.pmwiki.org/pub/pmwiki/pmwiki测试.tgz
tar xvfz pmwiki测试.tgz
rm pmwiki测试ln-sf pmwiki-2.3.34 pmwiki测试

如果没有符号链接,您仍然可以执行前两个步骤。而不是第三步和第四步,您将改为编辑/pmwiki-share/local/version.php并在新版本号中进行编辑。

在这两种情况下,如果新安装不起作用,只需将版本分配(即,还原符号链接更改,或编辑回旧的、稳定的版本号)。

发布

2006年8月26日。 本·威尔逊2006年8月26日下午03:33

2006年8月13日。添加了将wiki.d目录移出的解决方案web可访问目录的。本·威尔逊2006年8月13日下午03:33

2006年7月2日。我正在尝试新的改写,以帮助澄清一些引起了混乱。本·威尔逊2006年7月2日下午03:33

2006年2月10日。我用它在相同的服务器—每个站点都有自己的服务器场。我正在提供这个给其他管理员。本·威尔逊2006年2月10日下午03:33

评论

此配方的注释可在其讨论第页。过去的讨论也在那里存档。

另请参见

贡献者

本·威尔逊


用户注释?:如果您使用、使用或查看此配方,您可以添加您的姓名这些统计数据显示在Cookbook列表中,将帮助新手浏览wiki。