Digital Ocean Space with Laravel

ကၽြန္ေတာ္တုိ႕ေတြ အေနနဲ႕ file storage အတြက္ သီးသန္႕ server အစား amazon s3 ကို အသံုးျပဳၾကပါတယ္။ Digital Ocean က s3 အတိုင္း Digital Ocean Space ဆိုတာ ထုတ္ထားပါတယ္။ s3 နဲ႕ api အတူတူပဲ ျဖစ္ျပီးေတာ့  end point ပဲ ကြာပါတယ္။

Create Space

Space ကို ေဆာက္ဖို႕ အတြက္ Digital Ocean ကို Login ဝင္ပါ။

Create a Space ကို ႏိွပ္ပါ။

Region ကို ေရြးပါ။ ကၽြန္ေတာ္ကေတာ့ Singapore ပဲ ေရြးပါတယ္။

Allow file listing မွာေတာ့ Restrict File Listing ကိုပဲ သံုးပါတယ္။

Unique name ေပးဖို႕ လိုပါတယ္။ S3 မွာ ဆုိရင္ေတာ့ bucket name ေပါ့။ ကၽြန္ေတာ္ အေနနဲ႕ statics-11 လုိ႕ နာမည္ေပးလိုက္ပါမယ္။ ႏွစ္သက္ရာ နာမည္ေပးႏုိင္ပါတယ္။ ျပီးရင္ Create a Space ကို ႏိွပ္လိုက္ရံုပါပဲ။

Space Access Key

Space ကို ဖန္တီးျပီးရင္ Access Key ကို ဖန္တီးဖို႕ လိုပါတယ္။ Sidebar က API ကို သြားပါ။ Spaces access Keys ကို ႏိွပ္ပါ။ Generate New Key ကို ႏိွပ္ျပီးေတာ့ Secrect နဲ႕ Key ကို ရႏိုင္ပါတယ္။

ပံုမွာ ဆုိရင္ Key က YUM7U6VBFYXQNT7FEHSU ျဖစ္ျပီးေတာ့ Secret က LgToJR5rnvo6MNV3ZILiAEaiJU80Hp1Fo1NQVo/1S5Q

သတိထားဖို႕က Secret က မကူးထားရင္ ျပန္ျပီး generate လုပ္မွ ရလိမ့္မယ္။ ဒါေၾကာင့္ ခ်က္ျခင္း ကူးထားပါ။

Laravel Storage

Laravel Storage ကို https://laravel.com/docs/5.6/filesystem မွာ ဖတ္ႏိုင္ပါတယ္။ ကၽြန္ေတာ္တုိ႕က DO Space သံုးေပမယ့္ driver ကေတာ့ s3 ပါပဲ။ ဒါေၾကာင့္ composer တစ္ခ်ဳိ႕ သြင္းဖို႕ လိုပါတယ္။

ေအာက္ေဖာ္ျပပါ composer ၂ ခု ကို ထည့္ျပီး composer update လုပ္ဖို႕လိုပါတယ္။

"league/flysystem-aws-s3-v3": "^1.0",
"league/flysystem-cached-adapter": "^1.0"

config/filesystem.php မွာ ကၽြန္ေတာ္တုိ႕ေတြ s3 ေအာက္မွာ

'dospace' => [
    'driver' => 's3',
    'key' => env('SP_ACCESS_KEY_ID'),
    'secret' => env('SP_SECRET_ACCESS_KEY'),
    'region' => env('SP_DEFAULT_REGION'),
    'bucket' => env('SP_BUCKET'),
    'endpoint' => env('SP_URL')
]

ဆိုျပီး ထည့္လိုက္ပါ။

.env မွာ

FILESYSTEM_DRIVER=dospace
SP_ACCESS_KEY_ID=MY_KEY
SP_SECRET_ACCESS_KEY=MY_SECRECT
SP_DEFAULT_REGION=sgp1
SP_BUCKET=statics-11
SP_URL=https://sgp1.digitaloceanspaces.com

ထပ္ျဖည့္လိုက္ပါ။

ကၽြန္ေတာ္တုိ႕ space ကို သံုးမယ့္ sample PHP code ကေတာ့

$exists = Storage::exists('avatar/avatar1.jpg');
$file_name = "avatar/avatar1.jpg";
if(!$exists) {
    $content = file_get_contents("/Volumes/Samsung_T5/GDrive/12inMacbook/Localhost/sto/avatar.jpg");
    Storage::put($file_name,$content);
    Storage::setVisibility($file_name,"public");
}
$url= Storage::url($file_name);

Storage::setVisibility($file_name,"public"); ကေတာ့ access လုပ္လို႕ ရေအာင္ public လုပ္ထားတာပါ။

Storage::url($file_name); ကေတာ့ file ရဲ႕ url ကို ျပန္လည္ရယူတာပါ။

image ေတြ ႏွင့္ အျခား file အေသးေလးေတြ အတြက္ သီးသန္႕ server အစား Space လိုမ်ဳိး ေစ်းသက္သာသည့္ storage ကို သံုးဖုိ႕ ကၽြန္ေတာ္ကေတာ့ အၾကံျပဳလိုပါတယ္။


 

9
Kudos
Don't
move!

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.