⚠ PRE-RELEASE WARNING ⚠
RustFS upstream is currently pre-release (1.0.0-beta.3 as of 2026-05). The distributed/cluster mode is marked "Under Testing" upstream. Use this BOSH release for evaluation and non-production workloads only. Pin to a specific upstream binary version; do not assume API stability.
WARNING: RustFS Distributed Mode — Under Testing
RustFS 1.0.0-beta.3 explicitly marks "Distributed Mode: Under Testing" in its feature matrix. This BOSH release enables cluster mode when instances > 1, but cluster stability, data durability, and node rejoin behavior have NOT been validated by the FiveTwenty team or the RustFS project for production use.
Risk profile:
Data loss is possible on cluster restart or partial failure
Erasure coding parameters (k, m) are not user-configurable
Node rejoin semantics after crash are undocumented
Minimum viable cluster size is unspecified (4 nodes × 4 drives assumed from Docker examples)
Recommended safe usage until RustFS reaches GA:
Single-node mode with
manifests/ops/standalone.ymlops fileExternal backup via SHIELD or equivalent
Monitor https://github.com/rustfs/rustfs for GA release announcement
A BOSH release for RustFS, an S3-compatible object storage server written in Rust.
This release deploys RustFS 1.0.0-beta.3 with BOSH-link-driven peer discovery for
cluster mode. It packages the pre-built musl-linked Linux binary from the official
RustFS GitHub releases. Deployments scale from a single evaluation node (using
manifests/ops/standalone.yml) up to a multi-node distributed cluster. BPM manages
the process lifecycle. The release targets Ubuntu Noble (24.04) stemcells, which
provide the kernel 6.x required for IO-Uring support.
-
S3-compatible API — port 9000, compatible with AWS SDK, mc, boto3, and s3cmd
-
Web console — port 9001, optional (enabled by default)
-
BOSH-link peer discovery — cluster scales from 1 to N nodes without manual config
-
BPM process management — persistent disk, ephemeral tmp dir, vcap user isolation
-
KMS integration — local key or HashiCorp Vault / OpenBao backend (optional)
-
Health endpoints —
/healthand/health/readyfor load balancer integration -
Smoke-tests errand — validates S3 put/get/delete cycle post-deploy
| Requirement | Minimum |
|---|---|
| Stemcell | ubuntu-noble (24.04, kernel 6.x) |
| BOSH director | v271 or later |
| Kernel (IO-Uring) | 5.1 or later |
| Persistent disk per node | 50 GiB (recommended) |
| Ports open between nodes | 9000 (S3 API + gRPC internode) |
If you use Genesis, the
rustfs-genesis-kit wraps
this release with environment-aware defaults, credential generation, and
genesis do addon support.
- BOSH director with bpm release available
- Ubuntu Noble stemcell uploaded
- Persistent disk plan configured in cloud-config
- Ports 9000 and 9001 open between cluster nodes
Before creating a dev release, download and register the RustFS binary blob:
curl -Lo /tmp/rustfs-linux-x86_64-musl-1.0.0-beta.3.zip \
https://github.com/rustfs/rustfs/releases/download/1.0.0-beta.3/rustfs-linux-x86_64-musl-v1.0.0-beta.3.zip
bosh add-blob /tmp/rustfs-linux-x86_64-musl-1.0.0-beta.3.zip \
rustfs/rustfs-linux-x86_64-musl-1.0.0-beta.3.zipbosh create-release --force
bosh upload-releasebosh deploy -d rustfs manifests/rustfs.yml \
-v rustfs_access_key=myaccesskey \
-v rustfs_secret_key=mysecretkey8charsbosh deploy -d rustfs manifests/rustfs.yml \
-o manifests/ops/standalone.yml \
-v rustfs_access_key=myaccesskey \
-v rustfs_secret_key=mysecretkey8charsbosh -d rustfs run-errand smoke-testsThe following table covers the most commonly set properties. See
jobs/rustfs-server/spec for the full property list with descriptions.
| Property | Default | Description |
|---|---|---|
rustfs.access_key |
required | Admin access key (RUSTFS_ACCESS_KEY). Min 3 chars. |
rustfs.secret_key |
required | Admin secret key (RUSTFS_SECRET_KEY). Min 8 chars. |
rustfs.port |
9000 |
S3 API and internode gRPC port |
rustfs.console_port |
9001 |
Web console port |
rustfs.console_enable |
true |
Enable web console |
rustfs.log_level |
info |
Log level: trace, debug, info, warn, error |
rustfs.persistent_disk_path |
/var/vcap/store/rustfs |
Base path for data volumes |
rustfs.volumes_per_node |
4 |
Sub-directories per node for erasure coding |
rustfs.region |
us-east-1 |
S3 region string |
rustfs.server_domains |
"" |
Comma-separated virtual-hosted-style domains |
rustfs.health_enable |
true |
Enable /health and /health/ready endpoints |
rustfs.kms.enable |
false |
Enable server-side encryption |
rustfs.kms.backend |
local |
KMS backend: local, vault, vault-kv2, vault-transit |
When instances > 1, the rustfs-server job uses the BOSH rustfs-peers link to
collect all peer IP addresses and constructs the RUSTFS_VOLUMES environment variable
with one URL per peer per data sub-directory. The manifest sets update.serial: true
and max_in_flight: 1 to ensure nodes start sequentially, which is required for
initial cluster formation.
Minimum recommended cluster size is 3 nodes with volumes_per_node: 4 (matching
the upstream Docker Compose examples). Fewer nodes or volumes may produce unexpected
erasure-coding behavior.
Single-node mode (manifests/ops/standalone.yml) sets instances: 1 and
volumes_per_node: 1. In this mode there is no erasure coding and no data
redundancy — use external backup.
graph TD
LB[Load Balancer / route_registrar] --> N1
LB --> N2
LB --> N3
subgraph BOSH Instance Group: rustfs
N1[rustfs/0\n10.0.1.1:9000]
N2[rustfs/1\n10.0.1.2:9000]
N3[rustfs/2\n10.0.1.3:9000]
end
N1 -- BOSH link peer discovery --- N2
N2 -- BOSH link peer discovery --- N3
N3 -- BOSH link peer discovery --- N1
N1 --> D1[(Persistent Disk\n/var/vcap/store/rustfs)]
N2 --> D2[(Persistent Disk\n/var/vcap/store/rustfs)]
N3 --> D3[(Persistent Disk\n/var/vcap/store/rustfs)]
E[smoke-tests errand] -- consumes rustfs-peers link --> N1
| Package | Contents |
|---|---|
rustfs |
Pre-built RustFS binary (linux-x86_64-musl, 1.0.0-beta.3) |
The smoke-tests errand performs:
- HTTP GET
/healthon every cluster peer — all must return 200 - S3
CreateBucketon the primary peer - S3
PutObject— writes a test payload - S3
GetObject— reads and verifies content matches - S3
DeleteObject— removes the object - S3
HeadObjectconfirms 404 — verifies deletion
The errand uses Python 3 + boto3. Ubuntu Noble includes Python 3.12; boto3 must be
available either via a python-packages blob or pre-installed on the stemcell. If
boto3 is unavailable, install it or switch to the mc binary approach (bundle as a
separate blob).
Run the errand after every deploy:
bosh -d rustfs run-errand smoke-tests- Update the blob in
config/blobs.ymlwhen a new RustFS upstream version is available - Update
packages/rustfs/specandpackages/rustfs/packagingto reference the new blob name - Update
README.mdversion references - Run
bosh create-release --final --version X.Y.Z - Commit the generated
releases/rustfs/rustfs-X.Y.Z.ymland updatedconfig/blobs.yml - Tag the commit
vX.Y.Z— the GitHub Actions release workflow handles the rest
See CONTRIBUTING.md for blob upload and development release workflow.
See CONTRIBUTING.md for development workflow and code-of-conduct.md for community standards.
Apache 2.0. See LICENSE.
RustFS itself is also licensed under the Apache 2.0 License.