b13/distributed-flysystem

基于 PHP League / Flysystem 在多节点环境中同步前端节点之间的文件

安装次数: 5,852

依赖关系: 0

建议者: 0

安全: 0

星标: 2

关注者: 8

分支: 1

公开问题: 0

类型:typo3-cms-extension

0.2.0 2022-12-15 16:02 UTC

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 文件。