同一网站的多个副本:如何组织代码/架构?

时间:2016-01-02 作者:oneloop

我有一个wordpress网站,现在我想有几个类似的网站,但可能在小方面略有不同。我不知道如何以一种可扩展的方式来管理它。

现在,我的一个网站是按以下方式组织的。使用apache服务器和mysql数据库的单个EC2实例。静态文件托管在实例本身中,并使用Cloudfront CDN交付。现在,我知道接下来要做什么了:让静态文件从S3 bucket和mysql db作为专用RDS实例提供服务。我还没做那件事,但我知道怎么做。

现在,对于wordpress/PHP代码本身,有两个部分:

A) 共性。还有CMS基础设施,它是由wordpress提供的,我希望每个网站都一样。我有一个管理面板,可以用来创建帖子、管理小部件等。所有这些数据都将存储在RDS中,我想每个网站都会在同一个RDS中有自己的DB。

B) 详情。另一点是诸如颜色、页面元素的相对大小、一些静态信息,如徽标等。这一点我希望每个网站都有所不同。

因此,鉴于上述情况,我希望有一个框架,在这个框架中,我启动一个EC2实例,对共性做任何需要的更改,当我满意时,我将代码推送到所有保留细节的网站。

组织这项活动的最佳方式是什么?

谢谢

1 个回复
最合适的回答,由SO网友:kaiser 整理而成

tl;dr

代码

您可以轻松使用WordPress多站点或网络install (你可以在下面读到我反对的理由)。它允许在安装之间共享很多内容,从用户帐户到(父)主题、插件等,与网络中的其他站点共享。

另一种选择是使用Composer加速安装。我建议您使用这个选项,这样您就可以轻松地重用插件或(父)主题。然后,按照@s\\u ha\\u dum在评论中的建议,添加子主题以解释安装中的视觉差异。将尽可能多的功能卸载到插件中,以便更轻松地处理安装中的差异。

数据库

除了having a "base dump" 从那里你可以开始。在启动新安装时导入这些内容很容易,如果您有一个部署服务/提供程序,允许在进程之间执行(例如shell)脚本,则更容易。根据您的详细用例,您甚至可以dump tables 而不是完整的数据库,并合并这两个表。

一般答案首先,你应该review your complete workflow. 问自己一些问题,然后你可以一点一点地解决,并为自己或众包回答。

  1. Development –你是如何发展的?您是否有可靠的本地开发环境?如果您需要在普通的环境中进行测试,您能否快速启动测试站点
  2. Planning & VCS –如何处理代码的版本控制?您是否有一个明确的流程,您和其他人可以遵循并分享?您是否有可以确定优先顺序的路线图
  3. Deployment – 代码如何进入服务器
  4. Tests –您是否有一个测试环境,可以在上线之前检查事情是否按预期的方式进行
  5. Hosting – 如何配置服务器?如果您的一个或两个服务器或服务出现故障,您是否有回退实例(群集)
    1. 开发

      对于开发,您可能希望拥有一个可共享的虚拟机/机箱,可以将其交给第三方开发人员,并尽可能与您的生产环境/服务器匹配。这大大有助于在本地调试问题并加快该过程。看看Vagrant, Otto, Docker (仅限Linux或带有Win、OS X解决方案)或Rocket.

      除此之外,我建议不要进行多站点安装,除非您需要在安装之间共享数据,并且希望共享数据库。在任何其他情况下,它只会使数据库备份变得更困难(因为更大),开发和部署都会更慢。

      您可能需要切换到Composer based setup, 拿WP Starter 以@gmazzap为基础来加速您的安装,这可能是启动和维护isntall最快、最可靠的方法。

      规划和VCS在启动新功能、修复bug、发布时,您可能需要使用以下内容Git Flow, 您可以与运行在服务和工具上的规划流程紧密匹配,如GitHub issues, Trello boardsWaffle.io on top of GitHub 问题。这意味着您要编写路线图,然后进行分支、构建功能、测试并合并回下一版本。

      当你有composer.json 作为设置的主要入口点,您可以轻松地在单独的回购中拆分代码库(如果您需要免费的私有回购,请考虑使用Bitbucket,以防您不想使用问题跟踪程序)。这只允许在需要时安装插件或主题。您可以通过以下途径从官方的w.org repo获取插件和主题WPackagist 以及GitLab、GitHub、Bitbucket等上的自托管或私人回购。

      部署

      有大量的服务和自托管包可以以标准化的方式部署代码。手动执行此操作imo是不允许的。在服务GUI中编写或配置您的流程,这样您只需在终端中按下按钮或编写单个命令。其他一切都不可靠,(人为)容易出错,浪费你的时间。在一个可靠的部署服务上花费一些钱,以便在事情发生意外时进行无缝的角色备份,这可能是您可以做出的最佳决策。尽量避免将部署和托管结合在一起,这样就可以切换其中一个,而不必过多地接触另一个。

      测试

      从最基本的逻辑到最高级别,测试您可以做的任何事情。从最低的开始。首先测试最关键的业务逻辑,然后测试连接到代码或环境中其他位的位。有Travis, Codeship, Snap CI, Circle CI 以及其他用于连续集成测试的。有些允许部署,但您可能希望将其分开以增加服务的互换性。

      托管

      正如您已经提到的,您正在使用Amazons EC2服务,请考虑使用CoreOS 为您的安装建立一个可靠的基础,包括内部通信和回退。另一种选择是运行NixOS instances 在EC2上。两个操作系统都是containerized, 它允许更好的调试,提供更高的可靠性,并使位易于更换。您的服务越孤立越好。

      正如在《开发》一书中所写的那样,尝试从托管转移到更像DevOps的方法,并尽可能将所有内容转移到外部服务。这也使得移交安装变得更加容易。

      一句话,即使只是将一些可用的主题与一些插件组合在一起,根据您的设置的可靠性和故障保护程度,运行已配置的WordPress安装也可能需要一到两天的时间。在托管设置、部署、存储库等环境中投入时间,总是会在您需要对安装进行的第一次更改中获得回报。拥有一种可靠的方法来构建和交付安装通常比删除冗余代码行更有价值。

相关推荐

如何在我的博客WordPress中嵌入或共享Git?

我是worpdress的新手,但我想在我的博客wordpress中分享我的代码Git。然后我在github中制作了一个gits:(此代码只是此问题的一个示例)但当我尝试在wordpress中分享我的gits时,我发现:有人知道我如何解决这个问题并在wordpress中共享我的代码吗?注:*我的博客wordpress位于托管网站中,我不使用wordpress的平台,我已经在我的博客中安装了wordpress**