【问题标题】:Sitecore best practicesSitecore 最佳实践
【发布时间】:2009-08-05 21:26:15
【问题描述】:

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

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

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

【问题讨论】:

    标签: sitecore


    【解决方案1】:

    根据我的经验,使用 Sitecore 的多个站点的“1 个 IIS 网站下的所有内容”仅在您没有以下条件时才有效:

    1. 每个站点不同的 SSL 证书:IIS 将只允许每个 IP 地址/端口组合一个 SSL 证书,并且在 IIS 中每个网站只允许一个。我们有 4 个不同的通配符 SSL 证书(用于 4 个不同的基域),因此我们必须至少有 4 个独立的 IIS 网站。
    2. 每个站点有不同的虚拟目录:如果您想要一个虚拟目录在一个网站上可用,而在另一个网站上不可用,您必须在 IIS 中有不同的网站。

    如果您有这些要求中的任何一个,它们必须是 IIS 中的不同网站(或者这些要求必须在 IIS 之外处理)。

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

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

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

    【讨论】:

      【解决方案2】:

      一般来说,我们建议在 1 个 IIS 网站下运行所有​​内容。这样可以省去很多配置和部署问题。除此之外,使用多个网站并不一定会提高性能。

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

      总体而言,我认为您应该咨询您当地的 Sitecore 办事处,以考虑设置此解决方案。由于我们在此类迁移方面经验丰富,我们很乐意为您提供正确的建议并讨论所有选项。

      【讨论】:

        【解决方案3】:
        • 您应该从根本没有 /sitecore 文件的空白 Web 应用程序解决方案开始。如果您需要添加文件或修改站点核心文件,在您的项目中构建文件夹结构等部署,它将覆盖现有的站点核心文件。
        • 所有 Sitecore 配置更改都应在解决方案中的 /App_Confif/Include/z_[Client] 文件夹中。
        • Sitecore 的所有 dll 都应来自官方 sitecore NuGet feed,您可以在其中指定 sitecore 版本,而不是在 NuGet 中使用“最新”。
        • 您的 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 部署到空白站点。那么你的状态就会很好。

        【讨论】:

          【解决方案4】:

          对于第 2 题:

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

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

          如果您使用多实例,则需要查看您的站点核心许可。

          【讨论】:

            【解决方案5】:

            根据我的理解,我可以看到您在这里有两个顾虑:

            1.如何构建 Sitecore 项目

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

            1. ABC.Web ==> 最高层
            2. ABC.Data ==> 使用数据层
            3. ABC.Services => 业务处理层
            4. ABC.Domain ==> 公共层

            我们创建了一个应该安装 Sitecore dll 的新项目,它实际上替换了 ABC.Web(最高层),它将包含所有 Sitecore MVC 代码并且没有对旧代码进行任何更改。 从那时起,我们可以同时使用旧系统(通过引用 ABC.Services dll)和 Sitecore 中的数据。

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

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

            这是我的配置

            <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/

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2010-09-05
              相关资源
              最近更新 更多