fix(core,admin_basic): S3 스토리지 드라이버 실동작 결함 수정 및 S3 호환 스토리지 연결 지원
공개 제보 — 파일 스토리지에서 S3 를 선택해 저장해도 실제 파일 저장이 동작하지 않던 결함의 전면 수정. - S3 어댑터(league/flysystem-aws-s3-v3)·predis 를 코어 기본 의존성으로 포함 — 어댑터 부재 즉사, phpredis 확장 없는 서버의 redis 선택 전면 다운 차단 (부트 시 확장 부재 감지 → predis 자동 폴백) - storage_driver=s3 저장 시 코어 첨부 업로드 디스크를 s3 로 전환 (ATTACHMENT_DISK env 명시가 항상 우선, 기존 행은 저장 당시 disk 로 서빙) - 첨부·템플릿 레이아웃 첨부 서빙을 행 disk 를 따르는 스토리지 스트림으로 교체 — 로컬 절대 경로 전제 fileResponse 는 S3 행에서 filemtime stat 500 (streamedFileResponse: 행 메타 기반 ETag/304/Cache-Control) - S3 호환 스토리지(R2/MinIO/NCP) 연결 지원: 엔드포인트 URL·path-style 설정 신설, 리전 목록 선택 → 자유 입력 전환, 연결 테스트를 실제 저장 경로와 동일 설정(endpoint/path-style)으로 정렬 - 사용 불능 드라이버(어댑터·PHP 확장 부재)의 저장/테스트 요청을 사유와 함께 422 로 차단하는 서버 게이트 신설 (DriverRegistryService 능력 판정) - 웹소켓 연결 테스트에 서버(백엔드 발송용) endpoint 검사 추가 — 클라이언트만 검사해 테스트 성공 + 실제 발송 실패가 가능하던 비대칭 해소 - env 빈 값(`KEY=`) 함정 정규화: AWS_URL/AWS_ENDPOINT/ATTACHMENT_DISK 빈 문자열을 미설정으로 취급 (config 정규화 + 예시 파일 주석 처리) - 플러그인 드라이버 폴백의 log 카테고리 죽은 키(logging.default) 정정 및 websocket 유령 설정 키 제거 - 실 AWS S3 종단 검증 완료 (설정 저장 → 업로드 S3 실저장 → 서빙 200/304)
This commit is contained in:
@@ -4,6 +4,22 @@
|
||||
형식은 [Keep a Changelog](https://keepachangelog.com/ko/1.1.0/)를 따르며,
|
||||
[Semantic Versioning](https://semver.org/lang/ko/)을 준수합니다.
|
||||
|
||||
## [1.0.6] - 2026-08-12
|
||||
|
||||
### Added
|
||||
|
||||
- S3 호환 스토리지 설정 신설 항목(엔드포인트 URL·Path-style 주소)과 리전 형식 안내의 검증 메시지 일본어 번역 추가 (`validation.settings.s3_endpoint_*`, `s3_use_path_style_boolean`, `s3_region_*`) — 드라이버 설정 저장 시 오류 안내가 일본어 로케일에서 자연스럽게 표시됩니다. (#99 @lyg-kaban 님께서 제보해주셨습니다.)
|
||||
- 드라이버 사용 불능 안내 문구 일본어 번역 추가 (`validation.settings.driver_unusable`, `settings.driver_unusable_*`, `settings.s3_adapter_missing`) — 필요한 라이브러리·PHP 확장이 없는 드라이버를 저장·테스트할 때의 사유 안내가 일본어 로케일에서 표시됩니다.
|
||||
- 웹소켓 서버(백엔드 발송용) endpoint 연결 실패 안내 일본어 번역 추가 (`settings.websocket_server_test_failed`).
|
||||
|
||||
### Changed
|
||||
|
||||
- S3 리전 검증 메시지를 목록 선택 안내에서 형식 안내(소문자 영숫자·하이픈, R2 는 `auto`)로 개정했습니다.
|
||||
|
||||
### Removed
|
||||
|
||||
- 참조처가 사라진 S3 리전 선택 검증 메시지(`validation.settings.s3_region_required`)를 원본(ko/en)과 함께 정리했습니다.
|
||||
|
||||
## [1.0.5] - 2026-08-10
|
||||
|
||||
### Added
|
||||
|
||||
@@ -71,6 +71,7 @@ return [
|
||||
's3_test_failed' => 'S3バケットへの接続に失敗しました。',
|
||||
's3_missing_config' => 'S3設定が不足しています。(バケット、リージョン、アクセスキー、シークレットキー)',
|
||||
's3_sdk_missing' => 'AWS SDKがインストールされていません。',
|
||||
's3_adapter_missing' => 'S3ストレージアダプター(league/flysystem-aws-s3-v3)がインストールされていません。',
|
||||
's3_bucket_not_found' => 'S3バケットが見つかりません。',
|
||||
's3_access_denied' => 'S3バケットへのアクセスが拒否されました。',
|
||||
's3_invalid_credentials' => 'S3認証情報が正しくありません。',
|
||||
@@ -86,6 +87,10 @@ return [
|
||||
'memcached_connection_failed' => 'Memcachedサーバーに接続できません。',
|
||||
'websocket_test_success' => 'Websocketサーバーに正常に接続されました。',
|
||||
'websocket_test_failed' => 'Websocketサーバーへの接続に失敗しました。',
|
||||
'websocket_server_test_failed' => 'Websocketサーバー(バックエンド送信用)エンドポイントへの接続に失敗しました。クライアントエンドポイントは正常です。',
|
||||
'driver_unusable_s3_adapter' => 'S3ストレージアダプター(league/flysystem-aws-s3-v3)がインストールされていません。',
|
||||
'driver_unusable_redis_client' => 'phpredis拡張とpredisライブラリのどちらも利用できません。',
|
||||
'driver_unusable_memcached_extension' => 'memcached PHP拡張がインストールされていません。',
|
||||
'websocket_invalid_host' => 'Websocketホスト設定が正しくありません。ホストにはアドレスのみを入力し、アカウント情報(@)またはhttp/https以外のプロトコルは使用できません。',
|
||||
'websocket_connection_refused' => 'Websocketサーバーに接続できません。サーバーが実行中であるか確認してください。',
|
||||
'invalid_email' => '無効なメールアドレスです。',
|
||||
|
||||
@@ -897,11 +897,16 @@ return [
|
||||
'storage_driver_required' => 'ストレージドライバーを選択してください。',
|
||||
'storage_driver_invalid' => '正しいストレージドライバーを選択してください。',
|
||||
's3_bucket_max' => 'S3バケット名は255字を超えることはできません。',
|
||||
's3_region_invalid' => '正しいS3リージョンを選択してください。',
|
||||
's3_region_invalid' => 'S3リージョンには小文字の英数字とハイフンのみ使用できます。(例: ap-northeast-2、Cloudflare R2 は auto)',
|
||||
's3_region_max' => 'S3リージョンは64字を超えることはできません。',
|
||||
's3_access_key_max' => 'S3 Access Keyは255字を超えることはできません。',
|
||||
's3_secret_key_max' => 'S3 Secret Keyは255字を超えることはできません。',
|
||||
's3_url_invalid' => '正しいS3 URL形式ではありません。',
|
||||
's3_url_max' => 'S3 URLは500字を超えることはできません。',
|
||||
's3_endpoint_invalid' => '正しいS3エンドポイントURL形式ではありません。',
|
||||
's3_endpoint_max' => 'S3エンドポイントURLは500字を超えることはできません。',
|
||||
's3_use_path_style_boolean' => 'Path-styleアドレス使用の設定はtrueまたはfalseである必要があります。',
|
||||
'driver_unusable' => "':driver' ドライバーはこのサーバーでは使用できません。:reason",
|
||||
'cache_driver_required' => 'キャッシュドライバーを選択してください。',
|
||||
'cache_driver_invalid' => '正しいキャッシュドライバーを選択してください。',
|
||||
'redis_host_max' => 'Redisホストは255字を超えることはできません。',
|
||||
@@ -950,7 +955,6 @@ return [
|
||||
'log_days_min' => 'ログ保持日数は1以上である必要があります。',
|
||||
'log_days_max' => 'ログ保持日数は365を超えることはできません。',
|
||||
's3_bucket_required' => 'S3バケット名は必須です。',
|
||||
's3_region_required' => 'S3リージョンを選択してください。',
|
||||
's3_access_key_required' => 'S3 Access Keyは必須です。',
|
||||
's3_secret_key_required' => 'S3 Secret Keyは必須です。',
|
||||
's3_url_url' => 'S3 URLは有効なURLである必要があります。',
|
||||
@@ -1073,6 +1077,8 @@ return [
|
||||
's3_access_key' => 'S3 Access Key',
|
||||
's3_secret_key' => 'S3 Secret Key',
|
||||
's3_url' => 'S3 URL',
|
||||
's3_endpoint' => 'S3 エンドポイントURL',
|
||||
's3_use_path_style' => 'Path-styleアドレス使用',
|
||||
'cache_driver' => 'キャッシュ ドライバー',
|
||||
'redis_host' => 'Redis ホスト',
|
||||
'redis_port' => 'Redis ポート',
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
"en": "G7 core Japanese language pack (bundled)",
|
||||
"ja": "G7 コア 日本語 言語パック(バンドル)"
|
||||
},
|
||||
"version": "1.0.5",
|
||||
"version": "1.0.6",
|
||||
"license": "MIT",
|
||||
"scope": "core",
|
||||
"target_identifier": null,
|
||||
|
||||
@@ -4,6 +4,20 @@
|
||||
형식은 [Keep a Changelog](https://keepachangelog.com/ko/1.1.0/)를 따르며,
|
||||
[Semantic Versioning](https://semver.org/lang/ko/)을 준수합니다.
|
||||
|
||||
## [1.0.5] - 2026-08-12
|
||||
|
||||
### Added
|
||||
|
||||
- 환경설정 > 드라이버 > 파일 스토리지의 S3 신설 항목 일본어 번역 추가 (`settings.drivers.storage.s3_endpoint*`, `s3_use_path_style*`, `s3_region_desc`) — 엔드포인트 URL·Path-style 토글·리전 입력 도움말이 일본어 로케일에서 자연스럽게 표시됩니다. (#99 @lyg-kaban 님께서 제보해주셨습니다.)
|
||||
|
||||
### Changed
|
||||
|
||||
- S3 URL 항목의 이름·설명을 공개 URL(CDN) 용도로 명확히 한 문구 개정을 반영했습니다.
|
||||
|
||||
### Removed
|
||||
|
||||
- 리전 목록 선택 라벨(`settings.drivers.storage.regions.*`) 5종 제거 — 리전이 자유 입력으로 바뀌어 더 이상 사용되지 않습니다.
|
||||
|
||||
## [1.0.4] - 2026-08-10
|
||||
|
||||
### Added
|
||||
|
||||
@@ -1631,17 +1631,15 @@
|
||||
},
|
||||
"s3_bucket": "S3バケット",
|
||||
"s3_region": "S3リージョン",
|
||||
"regions": {
|
||||
"ap_northeast_2": "アジアパシフィック(ソウル)",
|
||||
"ap_northeast_1": "アジアパシフィック(東京)",
|
||||
"us_east_1": "米国東部(バージニア)",
|
||||
"us_west_2": "米国西部(オレゴン)",
|
||||
"eu_west_1": "ヨーロッパ(アイルランド)"
|
||||
},
|
||||
"s3_region_desc": "AWSリージョンコードまたはS3互換ストレージのリージョン値を入力してください。(例: ap-northeast-2、Cloudflare R2 は auto)",
|
||||
"s3_access_key": "Access Key",
|
||||
"s3_secret_key": "Secret Key",
|
||||
"s3_url": "S3 URL",
|
||||
"s3_url_desc": "カスタムエンドポイントまたはCDN URLを使用する場合のみ入力してください。"
|
||||
"s3_endpoint": "エンドポイントURL",
|
||||
"s3_endpoint_desc": "S3互換ストレージ(Cloudflare R2、MinIOなど)のAPIアドレスです。AWS S3の場合は空欄にしてください。",
|
||||
"s3_use_path_style": "Path-styleアドレスを使用",
|
||||
"s3_use_path_style_desc": "MinIOなどpath-styleアドレス専用ストレージで有効にします。",
|
||||
"s3_url": "S3 URL (公開URL)",
|
||||
"s3_url_desc": "ファイルの公開URL生成に使うCDN/カスタムドメインです。APIリクエストアドレスはエンドポイントURLに入力してください。"
|
||||
},
|
||||
"cache": {
|
||||
"title": "キャッシュ",
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
"en": "G7 template (sirsoft-admin_basic) Japanese language pack (bundled)",
|
||||
"ja": "G7 テンプレート (sirsoft-admin_basic) 日本語 言語パック(バンドル)"
|
||||
},
|
||||
"version": "1.0.4",
|
||||
"version": "1.0.5",
|
||||
"license": "MIT",
|
||||
"scope": "template",
|
||||
"target_identifier": "sirsoft-admin_basic",
|
||||
|
||||
Reference in New Issue
Block a user