Sitecore最佳实践

时间:2009-08-05 21:26:16

标签: sitecore

我们正在设置首次迁移到Sitecore。我们有多个多语言网站,其内容存储在具有LCID的数据库字段中。用户控件使数据库调用显示不同的语言内容。我们正在将我们的内容迁移到Sitecore项目,并希望利用Sitecore API从我们的用户控件中获取内容以构建数据结构。

我想知道如何为Sitecore开发构建Visual Studio项目,以便使用现有的VS解决方案。我们是否将Sitecore .dll和配置复制到所有解决方案,或共享一个Sitecore安装?

另外,如何在生产中安装所需的文件以支持在IIS中作为单独的网站存在的多个站点?我们是否必须在每个网站的单独/sitecore文件夹中包含所有必需的.dll和配置文件的副本,或者我们共享一个文件夹,每个站点中的虚拟文件夹指向相同的物理{{1}文件夹?

5 个答案:

答案 0 :(得分:6)

根据我的经验,只有在您没有以下内容的情况下,使用Sitecore的多个网站的“1个IIS网站下的所有内容”才有效:

  1. 每个站点的不同SSL证书:IIS每个IP地址/端口组合只允许一个SSL证书,IIS中每个网站只允许一个。我们有4种不同的通配符SSL证书(针对4个不同的基本域),因此我们必须至少拥有4个独立的IIS网站。
  2. 每个站点的不同虚拟目录:如果您希望虚拟目录在一个网站上可用而在另一个网站上不可用,则您必须在IIS中拥有不同的网站。
  3. 如果您有这些要求中的任何一个,它们必须是IIS中的不同网站(或者必须在IIS之外处理要求)。

    至于你如何设置它,要记住的一件事是我们被告知在服务器上多次安装Sitecore需要不同的/多个许可证。

    因此,对于我们来说,我们必须与IIS中的多个站点共享相同的安装,因为我们有这两个要求(并且只有一个许可证)。我们让所有网站共享相同的Sitecore安装(共享所有文件,包括DLL和web.config)。对此的回顾是:

    • 任何配置或DLL更改都会导致所有网站重新启动
    • 每个网站都有自己的应用程序域(因此它会增加内存需求,并且不共享内存缓存)
    • 该应用程序域基本上是一个单独的进程,因此任何维护或调度操作(即清除媒体缓存)都在每个网站上运行并访问相同的文件。这可能会导致性能和并发问题。我们不得不从外部计划的任务开始执行这些过程,并且只在我们的编辑网站上启动以防止冲突。
    • 由于我们只有一个配置文件,因此我们无法关闭内容交付网站的编辑功能。这意味着我们必须使用IIS的功能来阻止在内容交付网站上进行编辑。
    • 我们不得不把它当作sitecore的多服务器安装来对待,这意味着我们必须设置一个stager来清除发布时的缓存。我们使用了共享源库中的stager。

答案 1 :(得分:4)

一般情况下,我们建议在1个IIS网站下运行所有​​内容。这样可以节省大量配置和部署问题。除此之外,使用多个网站并不是必要的表现。

设置项目可以非常直接地完成。只需确保将构建目标设置为Sitecore安装的/ Website / bin-folder。如果是这样,您就可以重复使用任何东西。 您可以将Sitecore.Kernel链接为Visual Studio中的解决方案项。

总体而言,我认为您应该咨询当地的Sitecore办公室,与您一起考虑设置此解决方案。由于我们对这类迁移有经验,我们很乐意为您提供正确的建议并讨论所有选择。

答案 2 :(得分:2)

  • 您应该从没有/ sitecore文件的空白Web应用程序解决方案开始。如果您需要添加文件或修改sitcore文件,请在项目中构建文件夹结构,以便在部署时覆盖现有的sitecore文件。
  • 所有Sitecore配置更改都应位于/ App_Confif / Include / z_ [Client]文件夹中的解决方案中。
  • Sitecore的所有dll应来自官方sitecore NuGet feed,您可以在其中指定sitecore版本,而不是使用NuGet中的“latest”。
  • 您的web.config应该是开箱即用的Sitecore web.config,并使用转换使web.config成为构建所需的内容。
  • 您应该使用Helix guidelines为您的项目结构进行开发。
  • 所有Sitecore项目更改都应该在您选择的序列化软件中进行跟踪。是TDS还是Unicorn

我的试金石是,如果我可以用Sim工具创建一个网站并部署我的项目代码和项目,我的网站是否有效?在某些情况下,我们从Sitecore using PowerShell提取生产/阶段内容,将包复制到Nuget服务器并使用PowerShell将其部署到开发/ CI。

要创建网站,我使用了Sim工具和命令行或Powershell script

你并不孤单沮丧。我遇到过几个客户,他们的解决方案中包含了Sitecore网站。部署和升级总是非常困难。但是,如果您设计的解决方案不包含实际的Sitecore文件,并且可以通过CI部署到空白站点。那你就会很好。

答案 3 :(得分:1)

问题2:

我们使用Helix guidelines / Habitat,它似乎是Sitecore最佳实践的来源。 sitecore的所有培训都表示要在Sitecore之外创建一个项目,并且只根据需要导入项目。 对于配置,我建议您快速阅读this

SSL确实如此,应用程序池可能成为一个问题。部署到一个客户的站点将降低所有,取决于设置。

如果您使用多实例,则需要查看您的sitecore许可。

答案 4 :(得分:1)

根据我的理解,我可以看到你有两个问题:

<强> 1。如何构建Sitecore项目

我是Sitecore开发人员超过3年,根据我的经验,最好的实践是创建一个Sitecore项目,这是您解决方案的最高层 您不需要将sitecore dll安装到所有项目,只需保留旧代码并将其转换为基本代码即可。例如,我刚刚完成了一个客户希望使用Sitecore转移到的项目, 解决方案已经存在,它有4个项目:

  1. ABC.Web ==&gt;最高层
  2. ABC.Data ==&gt;使用数据层
  3. ABC.Services =&gt;业务处理层
  4. ABC.Domain ==&gt;公共图层
  5. 我们创建了一个应该安装Sitecore dll的新项目,它实际上取代了包含所有Sitecore MVC代码的ABC.Web(最高层),并且没有将任何内容更改为旧代码。 从那时起,我们可以处理来自旧系统的数据(通过引用ABC.Services dll)和Sitecore的数据。

    <强> 2。如何在生产中安装所需的文件以支持多个站点?

    Sitecore通过结构化Sitecore内容树和litte配置来支持多站点。你不需要在IIS中创建separeate网站, 它们实际上是一个具有不同域名的网站。在名为SiteDefinition.config的配置文件中(或者您可以添加自己的配置文件),您基本上设置了一个带有开始项目的域。 Sitecore识别与配置文件中的域匹配的域,并将重定向到 相应的开始项目。例如。在图像中,我创建了2个站点(基本上,它们是sitecore内容树的2个分支),其中的起始项是(MySite1和MySite2)

    enter image description here

    这是我的配置

    <sites>
          <site name="MySite1" patch:before="site[@name='website']"
                virtualFolder="/"
                physicalFolder="/"
                rootPath="/sitecore/content"
                startItem="/content/MySite1/home"
                database="web"
                domain="extranet"
                allowDebug="true"
                cacheHtml="true"
                htmlCacheSize="50MB"
                enablePreview="true"
                enableWebEdit="true"
                enableDebugger="true"
                disableClientData="false"/>
           <site name="MySite2" patch:before="site[@name='website']"
                virtualFolder="/"
                physicalFolder="/"
                rootPath="/sitecore/content"
                startItem="/content/MySite2/home"
                database="web"
                domain="extranet"
                allowDebug="true"
                cacheHtml="true"
                htmlCacheSize="50MB"
                enablePreview="true"
                enableWebEdit="true"
                enableDebugger="true"
                disableClientData="false"/>
        </sites>
    

    您可以参考本教程了解更多详情

    https://briancaos.wordpress.com/2010/03/01/working-with-multiple-sites-in-sitecore/