DigitalOcean object spaces 是兼容 AWS S3 的 APIs 服務,並且提供快速配置跟 CDN,收費方面也是較為便宜,主要是可以控制每月的預算花費,而且在設定上相比於 S3 簡單許多,以下是如何將 Spaces 兼容到 Laravel 使用的方法。

DigitalOcean 前置配置

  1. 建立 Personal Access Token
  2. 建立 Spaces
    1. 啟動 CDN
  3. 進入 Spaces 頁面,配置 CORS allowed headers

Laravel 配置

.env 新建 keys

DO_ACCESS_KEY_ID=
DO_SECRET_ACCESS_KEY=
DO_DEFAULT_REGION=your-bucket-region
DO_BUCKET=your-bucket-name
DO_USE_PATH_STYLE_ENDPOINT=false
DO_URL="https://${DO_BUCKET}.${DO_DEFAULT_REGION}.cdn.digitaloceanspaces.com"
DO_ENDPOINT=https://${DO_DEFAULT_REGION}.digitaloceanspaces.com

config/filesystems.php

'spaces' => [
    'driver' => 's3',
    'key' => env('DO_ACCESS_KEY_ID'),
    'secret' => env('DO_SECRET_ACCESS_KEY'),
    'region' => env('DO_DEFAULT_REGION'),
    'bucket' => env('DO_BUCKET'),
    'url' => env('DO_URL'),
    'endpoint' => env('DO_ENDPOINT'),
    'use_path_style_endpoint' => env('DO_USE_PATH_STYLE_ENDPOINT', false),
    'throw' => false,
    'visibility' => 'public',
],

這樣就可以用原本方式使用,由於兼容 S3 APIs 所以相當容易兼容進去。

Storage::disk($'spaces')->url($path);