b13 / distributed-flysystem
基于 PHP League / Flysystem 在多节点环境中同步前端节点之间的文件
Requires
- php: ^8.0
- league/flysystem: ^3.0
- league/flysystem-sftp-v3: ^3.0
- typo3/cms-core: ^11.0
Replaces
- typo3-ter/distributed-flysystem: 0.2.0
This package is auto-updated.
Last update: 2024-08-25 14:32:08 UTC
README
想象一下,你在运行一个基于 TYPO3 的多节点环境。每个应用服务器都是一个“节点”。
通常情况下,存在一些需要注意的问题和需要解决的障碍。通常,你会有本地缓存文件(“var/”)和(理想情况下)通过远程共享存储的 FAL 驱动程序来处理“fileadmin”。数据库位于集群上,并且你运行 Redis 哨兵来处理共享缓存。
但 TYPO3 有时生成的其他文件怎么办呢?
在理想的世界里,TYPO3 已经处理了大部分逻辑,但由于某些扩展或“压缩”文件,一些文件会在 typo3temp/ 中的“节点 20”等位置生成,而其他节点上则不可用。
过去,我们通常使用 NFS 来解决这个问题,但当 NFS 不可用时,我们基于 Frank De Jonge 的 Flysystem 抽象层构建了一个“解决方案”扩展。
每次访问 typo3temp/ 中的文件时,如果该文件在本节点不可用,将通过 SFTP 检查其他节点,如果某个节点有该文件,则将其下载到当前节点的 typo3temp/ 文件夹中。
目前,此扩展是一个“拉取”解决方案 - 如果需要则获取文件 - 但应与文件抽象层的本地驱动程序进行更深入的集成,以在单独的步骤中监视此行为。
安装
通过 composer 设置:composer req b13/distributed-flysystem
。
配置
例如,在您的 LocalConfiguration 中为所有节点添加适当的 SFTP 连接配置
$GLOBALS['TYPO3_CONF_VARS']['FILE']['flysystem'] = [
'default' => [
'rootPath' => '/path/from/sftp/ch-root/to/public/path/',
'username' => 'b13',
'password' => null,
'port' => 2222,
'privateKey' => Environment::getVarPath() . '/my-sftp_privkey',
'passphrase' => 'take it or leave it',
'timeout' => 10
],
'nodes' => [
'node01' => [
'host' => '1.2.3.4'
'alias' => 'primary'
],
'node02' => [
'host' => '1.2.3.5',
'username' => 'b14',
],
],
];
修改每个节点上的 .htaccess 文件以激活“拉取”机制
# Rewrite non-existent fileadmin and typo3temp files to a custom eID script
RewriteCond %{REQUEST_URI} "^(/fileadmin|/typo3temp/assets/).*" [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^.*$ %{ENV:CWD}index.php?eID=flysystem [QSA,L]
注意事项
预期将 rootPath
变量设置为 TYPO3 安装公共目录的文件夹。
许可证
与 TYPO3 核心一样,分布式 flysystem 根据 GPL2 或更高版本授权。有关详细信息,请参阅 LICENSE 文件。