diff options
| author | MeiMei <30769358+mei23@users.noreply.github.com> | 2020-03-14 11:33:19 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-03-14 11:33:19 +0900 |
| commit | a2d3d22b6e9e8bdcc8eab295b7d020540bb1e413 (patch) | |
| tree | effe79dc7a8c54ffe8494aa8d713cf33bfb10067 | |
| parent | fix gif badge (#6153) (diff) | |
| download | sharkey-a2d3d22b6e9e8bdcc8eab295b7d020540bb1e413.tar.gz sharkey-a2d3d22b6e9e8bdcc8eab295b7d020540bb1e413.tar.bz2 sharkey-a2d3d22b6e9e8bdcc8eab295b7d020540bb1e413.zip | |
オブジェクトストレージでS3のvirtual-host形式のサポートなど (#6148)
* オブジェクトストレージでS3のvirtual-host形式のサポートなど
* 表記揺れ
* more simply
* S3ならばs3ForcePathStyleしない
| -rw-r--r-- | locales/ja-JP.yml | 12 | ||||
| -rw-r--r-- | src/client/pages/instance/settings.vue | 13 | ||||
| -rw-r--r-- | src/remote/activitypub/request.ts | 4 | ||||
| -rw-r--r-- | src/services/drive/add-file.ts | 3 | ||||
| -rw-r--r-- | src/services/drive/s3.ts | 10 |
5 files changed, 27 insertions, 15 deletions
diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 27609ef527..3f70c8dbbf 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -423,6 +423,18 @@ hideThisNote: "このノートを非表示" showFeaturedNotesInTimeline: "タイムラインにおすすめのノートを表示する" objectStorage: "オブジェクトストレージ" useObjectStorage: "オブジェクトストレージを使用" +objectStorageBaseUrl: "Base URL" +objectStorageBaseUrlDesc: "参照に使用するURL。CDNやProxyを使用している場合はそのURL、S3: 'https://<bucket>.s3.amazonaws.com'、GCS等: 'https://storage.googleapis.com/<bucket>'。" +objectStorageBucket: "Bucket" +objectStorageBucketDesc: "使用サービスのbucket名を指定してください。" +objectStoragePrefix: "Prefix" +objectStoragePrefixDesc: "このprefixのディレクトリ下に格納されます。" +objectStorageEndpoint: "Endpoint" +objectStorageEndpointDesc: "S3の場合は空、それ以外の場合は各サービスのendpointを指定してください。'<host>'または'<host>:<port>'のように指定します。" +objectStorageRegion: "Region" +objectStorageRegionDesc: "'xx-east-1'のようなregionを指定してください。使用サービスにregionの概念がない場合は、空または'us-east-1'にしてください。" +objectStorageUseSSL: "SSLを使用する" +objectStorageUseSSLDesc: "API接続にhttpsを使用しない場合はオフにしてください" serverLogs: "サーバーログ" deleteAll: "全て削除" showFixedPostForm: "タイムライン上部に投稿フォームを表示する" diff --git a/src/client/pages/instance/settings.vue b/src/client/pages/instance/settings.vue index 7572108718..d11f840d8f 100644 --- a/src/client/pages/instance/settings.vue +++ b/src/client/pages/instance/settings.vue @@ -102,21 +102,20 @@ <div class="_content"> <mk-switch v-model="useObjectStorage">{{ $t('useObjectStorage') }}</mk-switch> <template v-if="useObjectStorage"> - <mk-input v-model="objectStorageBaseUrl" :disabled="!useObjectStorage">URL</mk-input> + <mk-input v-model="objectStorageBaseUrl" :disabled="!useObjectStorage">{{ $t('objectStorageBaseUrl') }}<template #desc>{{ $t('objectStorageBaseUrlDesc') }}</template></mk-input> <div class="_inputs"> - <mk-input v-model="objectStorageBucket" :disabled="!useObjectStorage">Bucket</mk-input> - <mk-input v-model="objectStoragePrefix" :disabled="!useObjectStorage">Prefix</mk-input> + <mk-input v-model="objectStorageBucket" :disabled="!useObjectStorage">{{ $t('objectStorageBucket') }}<template #desc>{{ $t('objectStorageBucketDesc') }}</template></mk-input> + <mk-input v-model="objectStoragePrefix" :disabled="!useObjectStorage">{{ $t('objectStoragePrefix') }}<template #desc>{{ $t('objectStoragePrefixDesc') }}</template></mk-input> </div> - <mk-input v-model="objectStorageEndpoint" :disabled="!useObjectStorage">Endpoint</mk-input> + <mk-input v-model="objectStorageEndpoint" :disabled="!useObjectStorage">{{ $t('objectStorageEndpoint') }}<template #desc>{{ $t('objectStorageEndpointDesc') }}</template></mk-input> <div class="_inputs"> - <mk-input v-model="objectStorageRegion" :disabled="!useObjectStorage">Region</mk-input> - <mk-input v-model="objectStoragePort" type="number" :disabled="!useObjectStorage">Port</mk-input> + <mk-input v-model="objectStorageRegion" :disabled="!useObjectStorage">{{ $t('objectStorageRegion') }}<template #desc>{{ $t('objectStorageRegionDesc') }}</template></mk-input> </div> <div class="_inputs"> <mk-input v-model="objectStorageAccessKey" :disabled="!useObjectStorage"><template #icon><fa :icon="faKey"/></template>Access key</mk-input> <mk-input v-model="objectStorageSecretKey" :disabled="!useObjectStorage"><template #icon><fa :icon="faKey"/></template>Secret key</mk-input> </div> - <mk-switch v-model="objectStorageUseSSL" :disabled="!useObjectStorage">SSL</mk-switch> + <mk-switch v-model="objectStorageUseSSL" :disabled="!useObjectStorage">{{ $t('objectStorageUseSSL') }}<template #desc>{{ $t('objectStorageUseSSLDesc') }}</template></mk-switch> </template> </div> <div class="_footer"> diff --git a/src/remote/activitypub/request.ts b/src/remote/activitypub/request.ts index dc777a3c5d..0f87381a44 100644 --- a/src/remote/activitypub/request.ts +++ b/src/remote/activitypub/request.ts @@ -7,10 +7,10 @@ import config from '../../config'; import { ILocalUser } from '../../models/entities/user'; import { UserKeypairs } from '../../models'; import { ensure } from '../../prelude/ensure'; -import * as httpsProxyAgent from 'https-proxy-agent'; +import { HttpsProxyAgent } from 'https-proxy-agent'; const agent = config.proxy - ? new httpsProxyAgent(config.proxy) + ? new HttpsProxyAgent(config.proxy) : new https.Agent({ lookup: cache.lookup, }); diff --git a/src/services/drive/add-file.ts b/src/services/drive/add-file.ts index 2931de6dc0..cf0951ebad 100644 --- a/src/services/drive/add-file.ts +++ b/src/services/drive/add-file.ts @@ -217,7 +217,8 @@ async function upload(key: string, stream: fs.ReadStream | Buffer, type: string, const upload = s3.upload(params); - await upload.promise(); + const result = await upload.promise(); + if (result) logger.debug(`Uploaded: ${result.Bucket}/${result.Key} => ${result.Location}`); } async function deleteOldFile(user: IRemoteUser) { diff --git a/src/services/drive/s3.ts b/src/services/drive/s3.ts index 95243d5901..d136bb2694 100644 --- a/src/services/drive/s3.ts +++ b/src/services/drive/s3.ts @@ -1,23 +1,23 @@ import * as S3 from 'aws-sdk/clients/s3'; import config from '../../config'; import { Meta } from '../../models/entities/meta'; -import * as httpsProxyAgent from 'https-proxy-agent'; +import { HttpsProxyAgent } from 'https-proxy-agent'; import * as agentkeepalive from 'agentkeepalive'; const httpsAgent = config.proxy - ? new httpsProxyAgent(config.proxy) + ? new HttpsProxyAgent(config.proxy) : new agentkeepalive.HttpsAgent({ freeSocketTimeout: 30 * 1000 }); export function getS3(meta: Meta) { const conf = { - endpoint: meta.objectStorageEndpoint, + endpoint: meta.objectStorageEndpoint || undefined, accessKeyId: meta.objectStorageAccessKey, secretAccessKey: meta.objectStorageSecretKey, - region: meta.objectStorageRegion, + region: meta.objectStorageRegion || undefined, sslEnabled: meta.objectStorageUseSSL, - s3ForcePathStyle: true, + s3ForcePathStyle: !!meta.objectStorageEndpoint, httpOptions: { } } as S3.ClientConfiguration; |