분류 php

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

컨텐츠 정보

  • 조회 541 (작성일 )

본문

라라벨은 오픈 소스 PHP 프레임 워크로 최신 PHP 애플리케이션을 구축하기 위한 툴과 리소스를 제공합니다.


https://dev.to/digitalocean/how-to-set-up-and-use-object-storage-in-laravel-6-36ak 


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


이 짧은 안내서는 관리되는 데이터베이스 및 객체 저장소를 사용하여 확장 가능한 Laravel 6 응용 프로그램을 설정하는 방법에 대한 자습서의 일부이며 데모 응용 프로그램을 사용하여이 설정을 작성하는 방법에 대한 자세한 지침이 포함되어 있습니다.


Laravel은 파일 시스템 추상화 라이브러리 인 league / flysystem을 사용하여 Laravel 애플리케이션이 로컬 디스크 및 클라우드 서비스를 포함한 여러 스토리지 솔루션을 사용하고 결합 할 수 있도록 합니다. 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 파일을 여십시오.


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


'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' => env('FILESYSTEM_CLOUD', 'spaces'),

편집이 끝나면 파일을 저장하고 닫습니다. 컨트롤러에서 Storage :: cloud() 메소드를 기본 클라우드 디스크에 액세스 하기 위한 바로 가기로 사용할 수 있습니다. 이러한 방식으로 애플리케이션은 여러 스토리지 솔루션을 사용할 수 있는 유연성을 유지하며 환경별로 제공자를 전환 할 수 있습니다.


예를 들어, 방문한 장소의 사진을 저장하는 여행 사진 앨범 응용 프로그램이 있다고 가정합니다. 양식을 사용하면 사진을 업로드하고 장소를 선택하거나 새 장소를 만들 수 있습니다. 새로운 공간 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) }}" />