feat(storage): S3 相容物件儲存支援(cloud-ready-s3-storage) #55

Merged
a620906209 merged 4 commits from feat/cloud-ready-s3-storage into master 2026-08-02 19:44:04 +00:00
Owner

摘要

延續 P1 雲原生改造方向,規劃並實作將上傳檔案(課程圖片、教練證照、聊天室圖片)改存 S3 相容物件儲存,實現 container 無狀態化。

本次僅包含程式碼部分(OpenSpec tasks 1-3)

  • config/filesystems.phppublic disk 的 driver 改吃 FILESYSTEM_DISK env,既有 6 個 Storage::disk('public') 呼叫點零改動
  • .env.exampleFILESYSTEM_DISK 維持 local 預設(本機開發不受影響),補齊 R2 相容的 AWS_ENDPOINTAWS_URLAWS_USE_PATH_STYLE_ENDPOINT
  • 新增 storage:migrate-to-s3 一次性遷移指令(支援 --dry-run,失敗不中斷、不刪本機檔案)
  • 新增測試涵蓋遷移指令與 local driver 零 credentials 行為

R2 帳號申請、VPS 部署與實際切換(tasks 4-6)暫緩,等 Hank 申請好 S3 相容服務帳號後再繼續,已在 .env.example 與 command 裡加註 TODO(2026-08-03) 標記。

測試

  • 容器內 php artisan test:239 passed / 578 assertions,無回歸

完整規劃見 openspec/changes/cloud-ready-s3-storage/

## 摘要 延續 P1 雲原生改造方向,規劃並實作將上傳檔案(課程圖片、教練證照、聊天室圖片)改存 S3 相容物件儲存,實現 container 無狀態化。 **本次僅包含程式碼部分(OpenSpec tasks 1-3)**: - `config/filesystems.php`:`public` disk 的 driver 改吃 `FILESYSTEM_DISK` env,既有 6 個 `Storage::disk('public')` 呼叫點零改動 - `.env.example`:`FILESYSTEM_DISK` 維持 `local` 預設(本機開發不受影響),補齊 R2 相容的 `AWS_ENDPOINT`/`AWS_URL`/`AWS_USE_PATH_STYLE_ENDPOINT` - 新增 `storage:migrate-to-s3` 一次性遷移指令(支援 `--dry-run`,失敗不中斷、不刪本機檔案) - 新增測試涵蓋遷移指令與 local driver 零 credentials 行為 **R2 帳號申請、VPS 部署與實際切換(tasks 4-6)暫緩**,等 Hank 申請好 S3 相容服務帳號後再繼續,已在 `.env.example` 與 command 裡加註 TODO(2026-08-03) 標記。 ## 測試 - 容器內 `php artisan test`:239 passed / 578 assertions,無回歸 完整規劃見 `openspec/changes/cloud-ready-s3-storage/`。
a620906209 added 4 commits 2026-08-02 19:43:31 +00:00
延續 P1 雲原生改造方向,規劃將上傳檔案(課程圖片、教練證照、聊天室圖片)
改存 S3 相容物件儲存,實現 container 無狀態化。核心設計:public disk
driver 直接吃 FILESYSTEM_DISK env 切換,既有 6 個呼叫點零改動,本機開發
環境維持 local 預設不受影響。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011LpcY9b7y9x4fusHBTXciQ
實作 cloud-ready-s3-storage 的程式碼部分(tasks 1-3):

- config/filesystems.php:public disk 的 driver 改吃 FILESYSTEM_DISK env,
  切換為 s3 時不需改動既有 6 個 Storage::disk('public') 呼叫點
- .env.example:FILESYSTEM_DISK 維持 local 預設(本機無 S3 服務),補齊
  AWS_ENDPOINT/AWS_URL/AWS_USE_PATH_STYLE_ENDPOINT 供 R2 等服務使用
- 新增 storage:migrate-to-s3 指令:一次性把 storage/app/public 既有檔案
  上傳到 S3,來源固定讀本機磁碟(不受 FILESYSTEM_DISK 影響),支援
  --dry-run,失敗不中斷且不刪除本機檔案
- 新增測試:遷移指令(上傳/dry-run/部分失敗)+ public disk 在 local
  driver 下零 AWS credentials 也能正常運作

239 tests passed / 578 assertions,容器內驗證無回歸。

R2 環境準備、VPS 部署與實際切換(tasks 4-6)待 Hank 自行處理。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011LpcY9b7y9x4fusHBTXciQ
Hank 目前沒有 S3 相容服務帳號,tasks 4-6(R2 建置、VPS 遷移、切換驗證)
暫緩,等申請帳號後再繼續。程式碼部分(1-3 組)已完成,不受影響。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011LpcY9b7y9x4fusHBTXciQ
docs: 標註 S3 相容儲存尚未啟用(缺 R2 帳號)
Run Tests / test (pull_request) Failing after 11s
a0fa339d6d
在 .env.example 的 AWS_* 區塊與 MigrateStorageToS3 command 加上
TODO(2026-08-03) 註解,說明目前功能已實作但因缺帳號未啟用,直接在
code 裡就看得到狀態,不用另外翻 openspec 文件。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011LpcY9b7y9x4fusHBTXciQ
a620906209 merged commit 15318d5734 into master 2026-08-02 19:44:04 +00:00
a620906209 deleted branch feat/cloud-ready-s3-storage 2026-08-02 19:44:04 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: a620906209/CFDivePlatform#55