visay/syncontent

从远程服务器获取站点内容到本地。

3.1.2 2017-03-16 03:13 UTC

README

这是一个从远程服务器上的 Flow 框架 / Neos CMS / TYPO3 安装中获取内容到运行 docker 的本地计算机上的辅助工具。

依赖

此工具需要您的 Flow 框架 / Neos CMS 安装配置为使用 dockerflow 包(见 https://github.com/Sebobo/Shel.DockerFlow)或您的 TYPO3 安装配置为使用 dockertypo3 包(见 https://github.com/visay/DockerTYPO3),并且在执行同步之前启动所有容器。

本地机器上需要安装 Ansible(支持 1.9 至 2.2)。

安装

syncontent 包添加到您的 composer.json 文件中并更新 composer.lock。建议在您的 composer 的 require-dev 部分中添加。

"visay/syncontent": "dev-master"

用法

在您项目的根目录中执行

bin-dir/syncontent --remote-user=demo-014-007
  • 将用户 demo-014-007 替换为您想要登录并获取内容的服务器用户名
  • 您需要确保您已经通过公钥自动登录到 demo-014-007@YOUR_SERVER_HOSTNAME_OR_IP。默认主机服务器是 10.10.10.27,这是我的内部 Web 服务器
  • 您可以使用 --remote-host=YOUR_SERVER_HOSTNAME_OR_IP 参数定义自己的服务器主机
  • 您可以使用 --remote-port=YOUR_SERVER_SSH_PORT 参数定义自己的服务器 ssh 端口
  • 您只能从您项目的根目录运行此命令
  • 服务器上的文档根必须位于 /home/demo-014-007/public_html
  • 如果您有不同的文档根路径,您可以使用 --remote-path 参数覆盖默认值

因此,完整覆盖的方式将是

bin-dir/syncontent --remote-user=demo-014-007 --remote-host=10.10.10.37 --remote-port=2222 --remote-path=/home/user/neosbox

或者参数的简写形式

bin-dir/syncontent -u=demo-014-007 -h=10.10.10.37 -P=2222 -p=/home/user/neosbox

可用参数

  • -u | --remote-user : 设置远程服务器的登录用户(必需
  • -h | --remote-host : 设置远程服务器的主机名或 IP 地址(默认: 10.10.10.27
  • -P | --remote-port : 设置远程服务器的 ssh 端口(默认: 22
  • -p | --remote-path : 设置远程服务器上文档根的路径(默认: /home/<remote-user>/public_html
  • -t | --ansible-tags : 设置您想要运行的特定任务。有关详细信息,请参阅可用的同步任务部分
  • --remote-php : 设置远程服务器上 php 的路径
  • --remote-dump : 设置远程服务器上 sql 转储的位置。它必须包含绝对路径和文件名
  • --from-cache : 使用上一次运行中的本地文件和数据库转储缓存,而不是从远程获取
  • -v : 设置 ansible 输出的详细程度。您也可以通过添加更多 v(如 -vvvvv)来设置更详细
  • --dry-run : 强制显示要执行的命令,但不会运行它们。当您想要调试时很有用
                         to see the full ansible command and maybe execute them directly for better error hints
    

自定义

如果您懒得一次又一次地输入用户,您可以通过创建一个在 vendor-dir/visay/syncontent/config/master 中的文件,文件名与 --remote-user 值相同来永久定义它。

vendor-dir
└── visay
	└── syncontent
		├── ansible
		├── bin
		├── config
		│   └── master
		│       └── demo-014-007
		├── CHANGELOG
		├── composer.json
		└── README.md

您还可以通过在创建的主文件中设置来覆盖 --remote-host--remote-port--remote-path--remote-php 等。

--remote-host=10.10.10.37
--remote-port=2222
--remote-path=/home/user/neosbox
--remote-php=/opt/php-versions/php55/bin/php

有了这个文件及其内容,您现在可以仅通过

bin-dir/syncontent

脚本将自动将demo-014-007作为内容主控,将10.10.10.37作为服务器主机,将/home/user/neosbox作为远程路径。

  • 您还可以将一些设置放在配置文件中,而另一些则作为参数传递。
  • 如果在配置文件中和作为参数传递的配置相同,则参数值将生效。
  • 每次只能有一个主控。这意味着您不应该在config/master目录中拥有超过一个文件。如果有多个文件存在,脚本将只处理第一个文件。
  • 在大多数情况下,默认主机和路径适用于内部Web Essentials项目开发,您只需要定义--remote-user

可用的同步任务

syncontent在3个不同的批次中完成其工作。首先,它将远程服务器上的用户文件同步到本地。其次,它从远程服务器转储数据库并在本地恢复,最后它运行一些必要的命令来清理,具体取决于框架。

默认情况下,syncontent将运行所有3个任务,但您可以通过传递参数来调用仅您想要运行的特定任务。

bin-dir/syncontent --ansible-tags=<TASK-NAME>

可用的任务名称有

  • rsync
  • db
  • cleanup

1. rsync

第一个任务是同步远程到本地的目录内容。只有本地存在的文件将被删除,以确保一切与远程服务器上完全相同。

对于Flow,将同步Data/Persistent/,而对于TYPO3,这些目录将被同步:

  • web/fileadmin/
  • web/typo3conf/l10n/
  • web/uploads/

带有名称.gitkeep_temp__processed_的文件/目录将不会同步。

要仅执行此任务,请运行以下命令:

bin-dir/syncontent --ansible-tags=rsync

2. db

第二个任务是重置本地数据库。对于Flow框架,它将首先连接到远程服务器并获取运行上下文的数据库连接信息。目前您不能切换到其他上下文,因此如果您的远程服务器不在生产上下文运行,此工具对您不起作用,但无论如何调整它以使其工作并不困难,您可以在ansible角色中完成它。

一旦获取了所有信息,它将转储数据库,将其压缩并下载到本地临时文件。在将数据库恢复到本地数据库之前,它首先完全删除本地数据库并重新创建它。这样确保了我们拥有与远程服务器上完全相同的状态,并防止数据库内容残留引起任何问题。

对于TYPO3,这个过程几乎相同,只是转储数据库的第一步不存在,但用户必须使用--remote-dump开关定义远程服务器上转储文件的位置。这意味着创建转储文件的过程是手动创建的。这将在未来的版本中改变。

要仅执行此任务,请运行此命令:

bin-dir/syncontent --ansible-tags=db

对于TYPO3,在恢复数据后,大多数情况下需要调整域名记录以匹配您的本地设置。在这种情况下,您可以提供一系列键值对,这样此工具就可以在恢复到您的本地系统之前进行搜索和替换。

要这样做,在ansible/roles/database/defaults/目录中创建一个名为main.yml的文件,并添加以下内容:

---
# Content replacement in database
replacement:
  1:
    search: live-domain.com
    replace: local-domain
  2:
    search: live-domain2.net
    replace: domain2.local-domain

replacementsearchreplace是关键字,但对于12,您可以使用任何字符串来定义您的内容类型。如果需要,可以添加更多包含searchreplace对的数组列表。

3. cleanup

最后一步是运行框架使应用程序工作所需的必要命令。

它们按照以下顺序在Flow框架中运行:

  • flow:cache:flush --force
  • database:setcharset
  • doctrine:migrate
  • resource:publish
  • cache:warmup

并且对于TYPO3 CMS(运行此部分需要helhum/typo3-console包)

  • cache:flush
  • database:updateschema --schema-update-types=field.add
  • database:updateschema --schema-update-types=field.change
  • database:updateschema --schema-update-types=field.drop
  • database:updateschema --schema-update-types=table.add
  • database:updateschema --schema-update-types=table.change
  • database:updateschema --schema-update-types=table.drop
  • database:updateschema --schema-update-types=table.clear
  • cleanup:updatereferenceindex
  • cache:warmup

要仅执行此任务,请运行此命令:

bin-dir/syncontent --ansible-tags=cleanup

作者

Visay Keo visay@web-essentials.asia

如果您有任何反馈、评论和/或问题,请随时通过上述电子邮件地址联系。当然,合并请求始终受到欢迎。