English
Remote storage (S3)
Use object storage for large packages or CDN. For a single disk, see local storage.
Compatible with MinIO, Cloudflare R2, and AWS S3. Set storage.driver: s3.
Public bucket storage.s3
| Key | Type | Default | Meaning | When to change |
|---|---|---|---|---|
endpoint | string | "" | API endpoint | Required for MinIO/R2; AWS may use the default |
region | string | auto | Region | Real AWS region; R2 can keep auto |
bucket | string | "" | Public artifact bucket | Required when driver=s3 |
access_key / secret_key | string | "" | Credentials | Minimum: Put/Get public objects; inject via env |
use_path_style | bool | true | Path-style URLs | Virtual-hosted AWS can set false |
public_base_url | string | "" | External download root; empty builds anonymous GET from endpoint+bucket | Point at the CDN origin |
Env: KIRIVERS_STORAGE_S3_*, KIRIVERS_STORAGE_S3_PUBLIC_BASE_URL.
Private bucket storage.private
GeoIP MMDB and similar. If driver=s3 and the private bucket is empty, GeoIP upload fails and must not write the public bucket. Env: KIRIVERS_STORAGE_PRIVATE_*.
Do not mix installers and GeoIP in one bucket.
Multi-node downloads
Requires storage.driver=s3 and cache.driver=redis. See cluster.
cluster.download: s3: check returns public object URLs (CDN-capable).cluster.download: local: app nodes proxy bytes; check usesprivate, no-store.
On failure, read process storage logs (mod=storage).
Project PATCH currently rejects storage_visibility=private. Signed URLs still apply on local-proxy paths. See CDN and downloads.