visay / syncontent
从远程服务器获取站点内容到本地。
This package is auto-updated.
Last update: 2024-08-28 19:49:11 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
replacement、search和replace是关键字,但对于1和2,您可以使用任何字符串来定义您的内容类型。如果需要,可以添加更多包含search和replace对的数组列表。
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
如果您有任何反馈、评论和/或问题,请随时通过上述电子邮件地址联系。当然,合并请求始终受到欢迎。