Laravel 6에서 객체 스토리지를 설정하고 사용하는 방법

Laravel은 최신 PHP 응용 프로그램을 구축하기 위한 일련의 도구 및 리소스를 제공하는 오픈 소스 PHP 프레임워크입니다.

이 짧은 가이드에서는 사용자 생성 콘텐츠를 저장하기 위해 S3 호환 객체 스토리지 서비스를 사용하도록 기존 Laravel 6 애플리케이션을 설정합니다. 이 설정은 S3 호환 객체 스토리지 서비스로 DigitalOcean Spaces을 사용하여 Ubuntu 18.04 LEMP 스택 위에서 실행되는 Laravel 6 애플리케이션용으로 생성되었습니다.

이 짧은 안내서는 How to Set Up a Scalable Laravel 6 Application using Managed Databases and Object Storage에 대한 자습서의 일부이며 데모 응용 프로그램을 사용하여 이 설정을 구축하는 방법에 대한 자세한 지침이 포함되어 있습니다.


Laravel은 Laravel 애플리케이션이 로컬 디스크 및 클라우드 서비스를 포함한 여러 스토리지 솔루션을 사용하고 결합할 수 있도록 하는 파일 시스템 추상화 라이브러리인 league/flysystem 를 사용합니다. s3 드라이버를 사용하려면 추가 패키지가 필요합니다.

Composer을 사용하여 이 패키지를 설치합니다. 애플리케이션의 디렉터리에서 다음을 실행합니다.

composer require league/flysystem-aws-s3-v3


필수 패키지를 설치한 후 오브젝트 스토리지에 연결하도록 애플리케이션을 업데이트할 수 있습니다. 먼저 .env 파일을 열어 개체 스토리지 서비스에 대한 키, 버킷 이름 및 리전과 같은 구성 세부 정보를 설정합니다.

선택한 편집기를 사용하여 .env 파일을 엽니다.

다음 환경 변수를 포함하고 예제 값을 자신의 개체 저장소 구성 세부 정보로 바꿉니다.

DO_SPACES_KEY=EXAMPLE7UQOTHDTF3GK4
DO_SPACES_SECRET=exampleb8e1ec97b97bff326955375c5
DO_SPACES_ENDPOINT=https://ams3.digitaloceanspaces.com
DO_SPACES_REGION=ams3
DO_SPACES_BUCKET=sammy-travellist


완료되면 파일을 저장하고 닫습니다. 이제 config/filesystems.php 파일을 엽니다.

이 파일 내에서 disks 배열에 새 디스크 항목을 만듭니다. 이 디스크의 이름을 spaces 로 지정하고 .env 파일에서 설정한 환경 변수를 사용하여 새 디스크를 구성합니다. disks 배열에 다음 항목을 포함합니다.


'spaces' => [
   'driver' => 's3',
   'key' => env('DO_SPACES_KEY'),
   'secret' => env('DO_SPACES_SECRET'),
   'endpoint' => env('DO_SPACES_ENDPOINT'),
   'region' => env('DO_SPACES_REGION'),
   'bucket' => env('DO_SPACES_BUCKET'),
],



여전히 동일한 파일에서 cloud 항목을 찾아 변경하여 새spaces 디스크를 기본 클라우드 파일 시스템 디스크로 설정합니다.

'cloud' => env('FILESYSTEM_CLOUD', 'spaces'),


편집이 완료되면 파일을 저장하고 닫습니다. 이제 컨트롤러에서 Storage::cloud() 방법을 바로 가기로 사용하여 기본cloud 디스크에 액세스할 수 있습니다. 이러한 방식으로 애플리케이션은 여러 스토리지 솔루션을 사용할 수 있도록 유연하게 유지되며 환경별로 공급자 간에 전환할 수 있습니다.

예를 들어 방문한 장소의 사진을 저장하는 여행 사진 앨범 애플리케이션이 있다고 가정해 보겠습니다. 양식을 사용하면 사진을 업로드하고 장소를 선택하거나 새 장소를 만들 수 있습니다. 다음은 새로운spaces S3 호환 디스크를 사용하는 업로드 컨트롤러의 모습입니다.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Photo;
use App\Place;
use Illuminate\Support\Facades\Storage;

class PhotoController extends Controller
{
   public function uploadForm()
   {
       $places = Place::all();

       return view('upload_photo', [
           'places' => $places
       ]);
   }

   public function uploadPhoto(Request $request)
   {
       $photo = new Photo();
       $place = Place::find($request->input('place'));

       if (!$place) {
           //add new place
           $place = new Place();
           $place->name = $request->input('place_name');
           $place->lat = $request->input('place_lat');
           $place->lng = $request->input('place_lng');
       }

       $place->visited = 1;
       $place->save();

       $photo->place()->associate($place);
       $photo->image = $request->image->store('/', 'spaces'); #save image
       Storage::setVisibility($photo->image, 'public'); #make it public
       $photo->save();

       return redirect()->route('Main');
   }
}




이 파일은 Github에서도 사용할 수 있습니다.

사진이 데이터베이스에 저장되면 Storage::url 메서드를 호출하여 공개 URL을 얻을 수 있습니다. 다음 코드는 블레이드 템플릿에서 이미지 URL을 가져오는 방법의 예를 보여줍니다.

<img src="{{ Storage::disk('spaces')->url($photo->image) }}" />


자세한 지침과 예는 How to Set Up a Scalable Laravel 6 Application using Managed Databases and Object Storage에서 전체 가이드를 확인하십시오.

좋은 웹페이지 즐겨찾기