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 ကို သုံးဖို့ ကျွန်တော်ကတော့ အကြံပြုလိုပါတယ်။

Leave a Reply

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