feat: install Flysystem S3 and configure SeaweedFS storage

Add league/flysystem-bundle and league/flysystem-aws-s3-v3 packages and
configure the default.storage adapter to use AWS S3Client pointed at the
SeaweedFS endpoint (s3.lclr.dev) with path-style endpoints and secret-based
credentials.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
thibaud-leclere
2026-03-29 10:08:56 +02:00
parent def97304a9
commit 5d16d28c59
6 changed files with 1116 additions and 1 deletions

View File

@@ -15,4 +15,5 @@ return [
Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true],
Symfony\UX\React\ReactBundle::class => ['all' => true],
Pentatrion\ViteBundle\PentatrionViteBundle::class => ['all' => true],
League\FlysystemBundle\FlysystemBundle::class => ['all' => true],
];

View File

@@ -0,0 +1,19 @@
flysystem:
storages:
default.storage:
adapter: 'aws'
options:
client: 's3_client'
bucket: 'ltbxd-actorle'
services:
s3_client:
class: Aws\S3\S3Client
arguments:
- endpoint: 'https://s3.lclr.dev'
credentials:
key: '%env(secret:S3_ACCESS_KEY)%'
secret: '%env(secret:S3_SECRET_KEY)%'
region: 'us-east-1'
version: 'latest'
use_path_style_endpoint: true

View File

@@ -1487,6 +1487,22 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param;
* preload_attributes?: list<scalar|null|Param>,
* }>,
* }
* @psalm-type FlysystemConfig = array{
* storages?: array<string, array{ // Default: []
* adapter: scalar|null|Param,
* options?: list<mixed>,
* visibility?: scalar|null|Param, // Default: null
* directory_visibility?: scalar|null|Param, // Default: null
* retain_visibility?: bool|null|Param, // Default: null
* case_sensitive?: bool|Param, // Default: true
* disable_asserts?: bool|Param, // Default: false
* public_url?: list<scalar|null|Param>,
* path_normalizer?: scalar|null|Param, // Default: null
* public_url_generator?: scalar|null|Param, // Default: null
* temporary_url_generator?: scalar|null|Param, // Default: null
* read_only?: bool|Param, // Default: false
* }>,
* }
* @psalm-type ConfigType = array{
* imports?: ImportsConfig,
* parameters?: ParametersConfig,
@@ -1502,6 +1518,7 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param;
* monolog?: MonologConfig,
* react?: ReactConfig,
* pentatrion_vite?: PentatrionViteConfig,
* flysystem?: FlysystemConfig,
* "when@dev"?: array{
* imports?: ImportsConfig,
* parameters?: ParametersConfig,
@@ -1520,6 +1537,7 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param;
* maker?: MakerConfig,
* react?: ReactConfig,
* pentatrion_vite?: PentatrionViteConfig,
* flysystem?: FlysystemConfig,
* },
* "when@prod"?: array{
* imports?: ImportsConfig,
@@ -1536,6 +1554,7 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param;
* monolog?: MonologConfig,
* react?: ReactConfig,
* pentatrion_vite?: PentatrionViteConfig,
* flysystem?: FlysystemConfig,
* },
* "when@test"?: array{
* imports?: ImportsConfig,
@@ -1553,6 +1572,7 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param;
* monolog?: MonologConfig,
* react?: ReactConfig,
* pentatrion_vite?: PentatrionViteConfig,
* flysystem?: FlysystemConfig,
* },
* ...<string, ExtensionType|array{ // extra keys must follow the when@%env% pattern or match an extension alias
* imports?: ImportsConfig,