Serve multiple R2 buckets from the same Worker, with different settings
37
stars
18
commits
TypeScript
primary language
Mar 26, 2025
updated
A Cloudflare Workers project showcasing how to have multiple kotx/render instances in a single Worker, allowing R2 buckets and settings to vary by domain within the same Worker.
npm installwrangler.toml to change default settings and specify domains and buckets. This repository is setup for my usage so remove my buckets you won't use.index.ts, add the buckets to the Env type following the example, and add config for them below.E.g.
wrangler.toml
routes = [
{ pattern = "mybucket.example.com", custom_domain = true },
]
[[r2_buckets]]
binding = "MY_BUCKET"
bucket_name = "mybucket"
preview_bucket_name = "mybucket"
index.ts
interface Env {
R2_BUCKET: R2Bucket,
ALLOWED_ORIGINS?: string,
CACHE_CONTROL?: string,
PATH_PREFIX?: string
INDEX_FILE?: string
NOTFOUND_FILE?: string
DIRECTORY_LISTING?: boolean
HIDE_HIDDEN_FILES?: boolean
DIRECTORY_CACHE_CONTROL?: string
// put extra buckets here
MY_BUCKET: R2Bucket
}
const config: { [id: string]: RenderEnv; } = {
"mybucket.example.com": {
R2_BUCKET: env.MY_BUCKET,
DIRECTORY_LISTING: true,
INDEX_FILE: 'index_alt.html',
ALLOWED_ORIGINS: "my-other-cool-site.example.com"
},
Once done, npm run deploy and enjoy.
17 commits
1 commits
TypeScript
100.0%
Serve multiple R2 buckets from the same Worker, with different settings
37
stars
18
commits
TypeScript
primary language
Mar 26, 2025
updated
A Cloudflare Workers project showcasing how to have multiple kotx/render instances in a single Worker, allowing R2 buckets and settings to vary by domain within the same Worker.
npm installwrangler.toml to change default settings and specify domains and buckets. This repository is setup for my usage so remove my buckets you won't use.index.ts, add the buckets to the Env type following the example, and add config for them below.E.g.
wrangler.toml
routes = [
{ pattern = "mybucket.example.com", custom_domain = true },
]
[[r2_buckets]]
binding = "MY_BUCKET"
bucket_name = "mybucket"
preview_bucket_name = "mybucket"
index.ts
interface Env {
R2_BUCKET: R2Bucket,
ALLOWED_ORIGINS?: string,
CACHE_CONTROL?: string,
PATH_PREFIX?: string
INDEX_FILE?: string
NOTFOUND_FILE?: string
DIRECTORY_LISTING?: boolean
HIDE_HIDDEN_FILES?: boolean
DIRECTORY_CACHE_CONTROL?: string
// put extra buckets here
MY_BUCKET: R2Bucket
}
const config: { [id: string]: RenderEnv; } = {
"mybucket.example.com": {
R2_BUCKET: env.MY_BUCKET,
DIRECTORY_LISTING: true,
INDEX_FILE: 'index_alt.html',
ALLOWED_ORIGINS: "my-other-cool-site.example.com"
},
Once done, npm run deploy and enjoy.
17 commits
1 commits
TypeScript
100.0%