fix: force HTTPS S3 endpoint to avoid Coolify 307 on uploads
http://s3 hosts redirect to https; AWS SDK cannot follow PUT redirects, which caused XML parse errors.
This commit is contained in:
+30
-9
@@ -31,11 +31,25 @@ const config = {
|
||||
|
||||
// S3-compatible storage (MinIO locally, SeaweedFS in production)
|
||||
// Accepts S3_* directly, or SeaweedFS/AWS service env aliases from the host platform.
|
||||
S3_ENDPOINT:
|
||||
process.env.S3_ENDPOINT
|
||||
|| process.env.SERVICE_URL_S3
|
||||
|| process.env.SERVICE_URL_S3_8333
|
||||
|| 'http://localhost:9000',
|
||||
// IMPORTANT: use https:// for public SeaweedFS — http:// gets a 307 that AWS SDK cannot follow on PUT.
|
||||
S3_ENDPOINT: (() => {
|
||||
const raw = (
|
||||
process.env.S3_ENDPOINT
|
||||
|| process.env.SERVICE_URL_S3
|
||||
|| process.env.SERVICE_URL_S3_8333
|
||||
|| 'http://localhost:9000'
|
||||
).trim().replace(/\/$/, '');
|
||||
|
||||
// Upgrade plain http → https for non-local endpoints (Coolify/proxy 307 breaks PutObject)
|
||||
const isLocal = /^(http:\/\/)?(localhost|127\.0\.0\.1|minio)(:|\/|$)/i.test(raw)
|
||||
|| raw.startsWith('http://localhost')
|
||||
|| raw.startsWith('http://127.0.0.1')
|
||||
|| raw.startsWith('http://minio');
|
||||
if (raw.startsWith('http://') && !isLocal) {
|
||||
return `https://${raw.slice('http://'.length)}`;
|
||||
}
|
||||
return raw;
|
||||
})(),
|
||||
S3_REGION: process.env.S3_REGION || process.env.AWS_REGION || 'us-east-1',
|
||||
S3_ACCESS_KEY:
|
||||
process.env.S3_ACCESS_KEY
|
||||
@@ -59,10 +73,17 @@ const config = {
|
||||
),
|
||||
SIGNED_URL_EXPIRES_IN: parseInt(process.env.SIGNED_URL_EXPIRES_IN, 10) || 900, // 15 minutes default
|
||||
// Public base URL for public buckets only (private buckets leave fileUrl empty)
|
||||
S3_PUBLIC_BASE_URL:
|
||||
process.env.S3_PUBLIC_BASE_URL
|
||||
|| process.env.SERVICE_URL_S3
|
||||
|| '',
|
||||
S3_PUBLIC_BASE_URL: (() => {
|
||||
const raw = (
|
||||
process.env.S3_PUBLIC_BASE_URL
|
||||
|| process.env.SERVICE_URL_S3
|
||||
|| ''
|
||||
).trim().replace(/\/$/, '');
|
||||
if (raw.startsWith('http://') && !/localhost|127\.0\.0\.1/i.test(raw)) {
|
||||
return `https://${raw.slice('http://'.length)}`;
|
||||
}
|
||||
return raw;
|
||||
})(),
|
||||
S3_CERTIFICATES_PUBLIC: parseBool(process.env.S3_CERTIFICATES_PUBLIC, false),
|
||||
S3_DOCUMENTS_PUBLIC: parseBool(process.env.S3_DOCUMENTS_PUBLIC, false),
|
||||
// SeaweedFS admin console (optional; not used by the S3 SDK client)
|
||||
|
||||
Reference in New Issue
Block a user