Configurare AWS S3 con TALL stack
Installare l’adapter sul progetto con composer require league/flysystem-aws-s3-v3 "^3.0"
.
Creare un bucket (https://s3.console.aws.amazon.com/) assegnando un nome (es. nomeprogetto-bucket) e una regione (es. eu-central-1) e lasciando le impostazioni di default.
Creare un utente IAM (https://console.aws.amazon.com/iamv2/home#/users):
- Selezionare “Chiave di accesso – Accesso programmatico“
- Selezionare “Collega direttamente le policy esistenti“
- Cercare “S3FullAccess“
- Confermare e salvare Access Key e Secret Key
Configurare il file .env
:
AWS_ACCESS_KEY_ID=Access Key dell'utente IAM creato
AWS_SECRET_ACCESS_KEY=Secret Key dell'utente IAM creato
AWS_BUCKET=nome bucket (es. nomeprogetto-bucket)
AWS_DEFAULT_REGION=codice regione (es. eu-central-1)
AWS_ENDPOINT=https://s3.eu-central-1.amazonaws.com // non lasciare vuoto
AWS_URL=https://nomeprogetto-bucket.eu-central-1.amazonaws.com // non lasciare vuoto
AWS_USE_PATH_STYLE_ENDPOINT=false // non lasciare vuoto
e il file config/filesystems.php
:
's3' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
'endpoint' => env('AWS_ENDPOINT'),
'url' => env('AWS_URL'),
'root' => 'path/to/root' // opzionale
],
Riferimento: Laravel Daily
Per adattare la configurazione allo stack TALL, bisogna aggiungere una CORS Policy al bucket, come spiegato in questo articolo di Tall Stack Tips.
Per farlo, bisogna accedere al bucket da AWS Console e cercare nella sezione Condivisione delle risorse multiorigine (CORS) in Autorizzazioni e inserire questa configurazione (che nell’articolo di Tall Stack Tips é in XML invece che JSON):
[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"GET",
"PUT",
"POST",
"DELETE"
],
"AllowedOrigins": [
"https://website.url" // oppure "*" per testare in locale
],
"ExposeHeaders": []
}
]
Eseguire il comando php artisan livewire:configure-s3-upload-cleanup
per impostare la pulizia periodica della cartella di upload temporanea di Livewire.
Abilitare la lettura pubblica dei contenuti
Accedere al bucket da AWS Console e, nella sezione Blocco dell’accesso pubblico (impostazioni del bucket) in Autorizzazioni, disabilitare “Blocca tutti gli accessi pubblici“.
Quindi, inserire nella sezione Policy del bucket in Autorizzazioni la seguente policy:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowPublicRead",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::nome-bucket/*"
}
]
}
Quando si carica un file su s3 non si deve specificare il parametrovisibility='public'
nel metodostore
.
Abilitare ACL
Accedere al bucket da AWS Console e, nella sezione Proprietà dell’oggetto in Autorizzazioni, scegliere ACL abilitate insieme a Proprietario del bucket preferito.
Con questa configurazione, quando si carica un file su s3 si può specificare il parametrovisibility='public'
nel metodostore
, come fa Jetstream se si usa la funzionalitàprofilePhotos
.
Per far funzionare il plugin di SpatieMediaLibrary con Filament, bisogna modificare il file di configurazione media-library.php
inserendo:
'extra_headers' => [
'CacheControl' => 'no-cache',
],