Laravel i HostArena S3: podešavanje filesystem diska
Laravel ima ugrađenu podršku za S3 preko Flysystem biblioteke, pa HostArena S3 storage možete koristiti kao glavni ili dodatni disk za fajlove vaše aplikacije: korisničke uploade, slike, izveštaje i slično. Ovo uputstvo pokazuje podešavanje i osnovne primere.
Šta vam je potrebno
| Podatak | Vrednost / primer | Gde ga nalazite |
|---|---|---|
| Endpoint | https://s3.hostarena.rs | isti za sve korisnike |
| Region | garage | isti za sve korisnike, obavezan |
| Bucket | vas-bucket | HostArena korisnički panel, kod S3 usluge |
| Access Key | VAS_ACCESS_KEY | HostArena korisnički panel, kod S3 usluge |
| Secret Key | VAS_SECRET_KEY | HostArena korisnički panel, kod S3 usluge |
Uz to vam treba Laravel projekat i Composer.
Koraci podešavanja
- Instalirajte S3 adapter za Flysystem:
composer require league/flysystem-aws-s3-v3 "^3.0" --with-all-dependencies - U
.envfajl dodajte ili izmenite sledeće vrednosti:FILESYSTEM_DISK=s3 AWS_ACCESS_KEY_ID=VAS_ACCESS_KEY AWS_SECRET_ACCESS_KEY=VAS_SECRET_KEY AWS_DEFAULT_REGION=garage AWS_BUCKET=vas-bucket AWS_ENDPOINT=https://s3.hostarena.rs AWS_USE_PATH_STYLE_ENDPOINT=true AWS_URL=https://s3.hostarena.rs/vas-bucket - Proverite da disk
s3uconfig/filesystems.phpčita ove vrednosti. U novijim verzijama Laravela on već izgleda ovako; ako nešto nedostaje, dopunite:'s3' => [ 'driver' => 's3', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION'), 'bucket' => env('AWS_BUCKET'), 'url' => env('AWS_URL'), 'endpoint' => env('AWS_ENDPOINT'), 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), 'throw' => false, ], - Ako ste ranije keširali konfiguraciju, osvežite je:
php artisan config:clear
Napomene uz vrednosti:
AWS_DEFAULT_REGIONmora bitigarage; saus-east-1server odbija zahteve.AWS_ENDPOINTje uvekhttps://s3.hostarena.rs, bez naziva bucket-a.AWS_USE_PATH_STYLE_ENDPOINT=trueje najpouzdanija opcija.AWS_URLse koristi za javne adrese fajlova (Storage::url()); bucket se u adresi navodi samo jednom.- Fajl
.envnikad ne stavljajte u Git ili javni repozitorijum.
Provera da radi
Pokrenite php artisan tinker i izvršite:
use IlluminateSupportFacadesStorage;
Storage::disk('s3')->put('test.txt', 'HostArena S3 storage');
Storage::disk('s3')->exists('test.txt'); // treba da vrati true
Storage::disk('s3')->get('test.txt'); // vraća sadržaj fajlaAko put vrati false, privremeno postavite 'throw' => true u konfiguraciji diska da biste videli tačnu grešku.
Primeri korišćenja
Čuvanje fajla koji je poslao korisnik (u kontroleru):
use IlluminateHttpRequest;
use IlluminateSupportFacadesStorage;
public function store(Request $request)
{
$putanja = Storage::disk('s3')->putFile('uploads', $request->file('file'));
return $putanja; // npr. uploads/abc123.jpg
}Javna adresa fajla (radi samo ako je za bucket uključen Website hosting u HostArena panelu):
$url = Storage::disk('s3')->url('uploads/slika.jpg');
// https://s3.hostarena.rs/vas-bucket/uploads/slika.jpgPrivremena adresa za privatan fajl (presigned URL), na primer na 10 minuta:
$url = Storage::disk('s3')->temporaryUrl('uploads/ugovor.pdf', now()->addMinutes(10));Brisanje fajla:
Storage::disk('s3')->delete('test.txt');Pažnja: delete trajno briše fajl sa S3. Kod brisanja više fajlova ili celih foldera (deleteDirectory) proverite putanju pre pokretanja.
Najčešći problemi
Greška „AuthorizationHeaderMalformed”
Region nije garage. Ispravite AWS_DEFAULT_REGION i pokrenite php artisan config:clear.
Access Denied ili SignatureDoesNotMatch
Proverite AWS_ACCESS_KEY_ID i AWS_SECRET_ACCESS_KEY, bez razmaka i navodnika viška.
Bucket ne postoji (NoSuchBucket)
Proverite AWS_BUCKET i da u AWS_ENDPOINT niste dopisali naziv bucket-a.
Ne može da se poveže
Proverite da je AWS_ENDPOINT=https://s3.hostarena.rs i da server dozvoljava odlazne veze na port 443.
Adresa iz Storage::url() ne otvara sliku
Uključite Website hosting za bucket ili koristite temporaryUrl(). Proverite i da AWS_URL sadrži bucket samo jednom.
Zaključak
Sa ovim podešavanjem Laravel čuva fajlove na HostArena S3 storage-u. Za rad bez Laravela pogledajte PHP (AWS SDK) i HostArena S3, a za detalje o adresama HostArena S3 API. Nemate S3? Pogledajte pakete. Za pomoć otvorite tiket u korisničkom panelu.
