WordPress:在不同服务器之间同步媒体库



我们有三台服务器使用相同的WordPress网站 - 一个实时版本,一个测试版和一个Kiosk版本(用于iPad信息亭的网站的有限版本)。Beta 站点从 GitHub 上的beta分支部署,而 Live 和 Kiosk 站点都是从master分支部署的。站点之间的任何功能差异都由环境变量控制,除此之外,它们共享相同的代码。

wp-content/uploads文件夹使用挂载的 Amazon EFS 文件系统在站点的所有三个版本之间共享(由于插件冲突而无法使用 S3)。这就是问题所在。

Live 服务器和展台服务器共享相同的 RDS 数据库,因此它们的媒体库始终保持同步。但是,Beta 服务器使用自己的单独数据库进行测试 - 并且由于 WP 媒体库对象存储在数据库中,这会导致以下问题:

  • 将文件上传到 Beta 版网站时,不会自动添加到直播/自助服务终端网站上的媒体库中(反之亦然)
  • 从共享上传文件夹中移除文件时,它不会自动从媒体库中移除,从而导致媒体库条目损坏/为空。

这并不一定是错的;这只是Wordpress的工作方式。我一直在使用"从服务器添加"插件来规避这个问题,该插件允许我手动保持媒体库同步 - 但自动化它会很好。

所以我认为以下任何一种解决方案都可以工作:

  1. 一种使两个数据库的"media"表保持同步,同时使其余表保持独立的方法
  2. 一种根据wp-content/uploads文件夹的内容自动更新所有 3 台服务器上的媒体库的方法,这种方法也足够智能,可以忽略缩略图版本(不幸的是,"从服务器添加"插件不这样做,所以当我尝试时,我最终得到了无数的"缩略图缩略图",如果这有意义的话)

以前有没有人在类似的环境中工作过?关于我提出的解决方案或更好的解决方案的任何想法?

至于开发/暂存环境,我通常将rsynccrontab或 Jenkins 结合使用,并将复制的媒体文件夹符号链接到wp-content/uploads每次我使用生产数据库的转储构建暂存时。

这也将为您提供在不同服务器上自动备份数据库和媒体文件夹的好处。

我通常建议不要通过更改 beta/dev 环境来更新实时数据库,因为这通常违背了这种环境的目的。

关于保持信息亭和生产同步,插件WPSiteSync看起来很有前途。我还没有在生产中尝试过,但它应该符合您的要求。

最新更新