nextmotion/ google-cloud-storage-fal
Google Cloud Storage FAL 驱动器用于 TYPO3
Requires
- php: >=8.1 <8.3
- google/cloud-storage: >=v1.30 <1.31
- typo3/cms-core: >=12.0 <12.9.99
README
TYPO3 Google Cloud Storage FAL 驱动器。
此 FAL (文件抽象层) 驱动程序允许您在 TYPO3 中使用 Google Cloud Storage 存储桶作为资产,而不是本地文件系统。它依赖于 google/cloud-storage 库来连接到 Google。
功能
- 支持所有操作(重命名、复制、移动、文件夹、文件等)。
- 完全支持 "_recycler_" 文件夹。
- 支持多个存储桶和多个服务账户。
- 在 Google Cloud Storage 中存储处理后的图像。
- 可以通过 JSON、ENV 或 TYPO3 后端配置 Google 登录凭据。
- 支持按存储桶配置基础 URL(例如,对于 https://cdn.projectname.com/)。
- 支持直接将文件添加到 Google 存储(无需使用 Filelist 模块)。
- 即使 Google Cloud Storage 是扁平文件系统,也模拟文件夹。
- 它包含缓存策略以提高性能。
- 迁移命令,用于将文件从另一个存储移动到 Google Cloud Storage
它为您提供了在 Google Cloud Platform (GCP) 上使用 TYPO3 "云原生" 而不是 "云就绪" 的能力。
安装
应通过 Composer 安装此扩展
composer require nextmotion/google-cloud-storage-fal
配置
Google Cloud Storage 配置
首先,您必须在 Google Cloud Platform 上创建一个存储桶。其次,您必须创建一个用于访问存储桶的私钥/公钥。此驱动程序仅支持在统一存储桶级别上的访问。
CORS 头
为了使用 TYPO3 裁剪编辑器,必须配置存储桶的 CORS 头。
创建一个 CORS.json 文件并按需修改
[
{
"origin": ["*"],
"method": ["GET", "POST", "OPTIONS", "HEAD"],
"responseHeader": ["Authorization", "Origin", "X-Requested-With", "Content-Type", "Accept"],
"maxAgeSeconds": 3600
}
]
警告:"origin": ["*"] 表示完全开放的配置。建议您定义自己的域名,例如 "origin": ["subdomain.domain.tld", "local.dev" ... ]
使用命令 gsutil cors 在存储桶中配置 CORS
# Log-in into your account.
gcloud auth login [MY_ACCOUNT]
# List your projects
gcloud projects list
# Choose project
gcloud config set project [PROJECT_NAME]
# List your buckets
gsutil ls
# Update CORS of your bucket
gsutil cors set CORS.json gs://[BUCKET_NAME]
如果您想删除 CORS,请参阅:https://cloud.google.com/storage/docs/configuring-cors#remove-cors-bucket
TYPO3 配置
首先创建一个 文件存储。
所有配置字段都支持 %env(ENV_VALUE_NAME)% 语法。
使用密钥文件
使用密钥文件内容
本地 1:_processed_ 与远程 _processed_ 图像
这取决于您的需求和您希望将 处理后的 图像存储在何处。
如果您正在尝试开发云原生 TYPO3,将 处理后的 图像也存储在 Google Cloud Store 中是非常有意义的。一旦图像被处理,您的 TYPO3 的任何实例都可以访问它。
将现有文件迁移到 Google Cloud Storage
!!! 警告: 在迁移之前请备份您的 TYPO3 数据库和文件。 !!!
使用 CLI 命令 googlecloudstorage:move 将文件从现有存储移动并保留引用。
vendor/bin/typo3cms googlecloudstorage:move 1 2
通常 1 是本地文件存储,在这个例子中 2 是 Google Cloud Storage 存储桶。
- 此命令读取sys_file表中每个具有源存储ID(
1)的记录。在开始之前,请确保所有文件都已索引。您可以使用计划任务“文件抽象层:更新存储索引”。 - 将每个文件从源下载到本地临时目录。
- 将文件从临时目录上传到目标存储。
- 在sys_file中交换存储ID。
- 在源存储(
1)中删除文件。
在完成命令后,您必须使用“维护 > 删除临时资产 > 扫描临时文件 > 删除处理中的文件”模块来清除processed_files。
注意:由于技术限制,创建和修改日期将设置为当前时间戳。
vendor/bin/typo3cms googlecloudstorage:move [-f|--force [FORCE]] [--filter FILTER] [--limit LIMIT] [--exclude EXCLUDE] [--] <source> <target>
Usage:
googlecloudstorage:move [options] [--] <source> <target>
google_cloud_storage_fal:googlecloudstorage:move
Arguments:
source Source storage identifier
target Target storage identifier
Options:
-f, --force[=FORCE] never prompt
• [default: false]
--filter=FILTER Filter pattern with possible wild cards, --filter="%.pdf"
• [default: ""]
--limit=LIMIT Add a possible offset, limit to restrain the number of files. e.g. 0,100
• [default: ""]
--exclude=EXCLUDE Exclude pattern, can contain comma separated values e.g. --exclude="/apps/%,/_temp/%"
• [default: ""]
限制
- 仅支持统一桶级别的访问。更多信息请参阅https://cloud.google.com/storage/docs/uniform-bucket-level-access。
需求和兼容性
已知问题
- 由于Google使用的是类似于键值存储的扁平文件系统,因此它不支持目录。在GCS中,目录通过带有尾随斜杠的空文件来模拟(例如,“
images/”)。此驱动程序支持两种方式:驱动程序显示模拟的目录。如果一个文件的模拟父目录缺失,驱动程序会模拟现有的虚拟目录。因此,请注意:如果您删除了“images/”中的最后一个文件,例如“images/product.jpg”,并且没有父虚拟目录,则父目录也将从文件列表中消失。
致谢
此扩展由Pierre Geyer于2020年为next.motion OHG,Gera创建。

