我应该如何设置从开发到生产的Plone工作流?

我应该如何设置从开发到生产的Plone工作流?,plone,web-deployment,Plone,Web Deployment,几年前我曾与Plone 2合作,但它的工作流和安全系统(更不用说新的主题引擎)似乎最适合当前的项目。从可用性的角度来看,Plone 4看起来要好得多,但由于其不强迫用户进行特定设置的驱动力,在如何最好地在面向公众的Ubuntu服务器上托管它的问题上,它有点像一个迷宫。我已经使用统一安装程序(在/home/Plone/Plone/zinstance中)安装了Plone,并一直在前台运行它进行开发,但我现在需要为使该网站成为现实做好准备 我想在project server上实现一个开发实例,我们可以

几年前我曾与Plone 2合作,但它的工作流和安全系统(更不用说新的主题引擎)似乎最适合当前的项目。从可用性的角度来看,Plone 4看起来要好得多,但由于其不强迫用户进行特定设置的驱动力,在如何最好地在面向公众的Ubuntu服务器上托管它的问题上,它有点像一个迷宫。我已经使用统一安装程序(在
/home/Plone/Plone/zinstance
中)安装了Plone,并一直在前台运行它进行开发,但我现在需要为使该网站成为现实做好准备

我想在project server上实现一个开发实例,我们可以将其用于我们自己的定制(在签入开发实例之前,在我们的桌面上有额外的本地实例进行测试),然后是一个我们的客户可以在其上线前对其进行测试的站点,最后是一个上线的网站

特别是:

  • 我假设实时站点将基于ZEO,而测试和开发将是独立的;这有意义吗

  • 目前,所有东西都生活在
    /home/plone/plone
    中,而我们的所有其他(通常是PHP CMS)网站都是从
    /srv//www
    托管的;然后,域的所有内容都将一次性备份。布局不同Plone实例的最佳方式是什么

  • 在从开发到测试再到现场的整个周期中,将我们的更改转移到构建和产品的最佳方式是什么?我们目前有一个基本的部署过程,在其他系统中使用Mercurial

  • ZEO与否-用于生产或开发-取决于个人需求和偏好。许多开发人员使用ZEO进行生产和开发,而许多开发人员不使用ZEO。需要ZEO进行扩展(多个应用服务器)

  • 没人在乎…将Plone安装在您想要或需要的地方…在移动安装后重新运行buildout修复了重新定位问题。这是你的系统,不是我们的…由你决定

  • 通常,构建配置位于存储库中,并且可以从存储库中拉入生产服务器上……否则,您需要自己复制相关的构建文件。典型的安装工程如下:

    • 虚拟运行
    • 从git/subversion签出构建配置
    • 运行引导
    • 耗尽

  • 当前的最佳实践是用于定义完全可复制的部署

    通常,您使用通过包含共享配置的
    production.cfg
    development.cfg
    配置来调整部署以满足任一环境的特定需求;您可以根据需要扩展此模型。例如,一个大型项目可能有一个
    staging.cfg
    来首先将新特性部署到测试环境中

    您是否在开发中使用ZEO完全取决于您的用例。大多数开发设置当然不需要它,但在包含异步工作者的大型部署中,您可能会发现在开发时需要ZEO服务器。同样,buildout将使切换开发环境以满足不断变化的需求变得更加容易,尤其是与管理安装中使用的各种守护进程相结合时

    对于我管理的最大部署,我们使用subversion和git的组合,但这只是出于历史原因。这些都将被移动到一个git存储库中。最后,存储库将保存完整的构建,包括各种配置、
    development.cfg
    staging.cfg
    和每台生产机器配置文件(生产集群中的每台服务器一个)。例如,对于3台机器的ZEO设置,应该是一个
    ZEO.cfg
    instances-1.cfg
    instances-2.cfg
    。核心开发鸡蛋存储在
    src/
    中的同一存储库中

    开发只在每个功能和每个问题分支中进行。完成后,分支将合并到临时分支中,并更新和重新启动临时服务器。一旦客户在每个合并的分支机构上签字,并且计划好了推出,我们将批准的分支机构合并到主分支机构并标记发布。然后,生产群集计算机切换到该新标签并重新启动

    我们还使用连续集成测试;main和staging分支每天至少进行一次测试,让我们能够尽早发现问题

    所有守护进程都由专用的supervisord管理,该命令通过crontab条目(
    @reboot
    )启动,而不是本机OS
    init.d
    结构。通过这种方式,我们可以完全使用buildout管理正在运行的守护进程。构建甚至生成logrotate配置和munin监控插件;根据需要将这些符号链接到操作系统位置

    因为构建是完全独立的,所以在机器上的何处设置生产构建并不重要。一定要选择一致的东西,记录下来并坚持下去。确保您有足够的磁盘空间来满足守护程序的需要,否则就不用太担心了