Self-Hosted S3 for High Availability
Reference architecture for running your own S3-compatible object storage endpoint and pointing NetBox Enterprise at it, so a highly available cluster does not depend on a cloud provider.
Most Embedded Cluster deployments no longer need this page
From NetBox Enterprise 2.3.0, NetBox Enterprise can provision and manage an object store inside the cluster for you. Set the File Storage Backend to In-Cluster Object Storage in the Admin Console and the HA object-storage requirement is satisfied with no external endpoint to run — see In-Cluster Object Storage for the requirements and how to enable it.
This page covers the external option: running your own S3-compatible endpoint outside the cluster. Choose it when you want media stored off-cluster, when you already operate object storage you would rather reuse, or when the in-cluster store does not apply — it needs three or more nodes and the multi-node entitlement, so it is not an option for a single-node install that needs shared storage.
High availability in NetBox Enterprise requires shared object storage for NetBox media: the media volume cannot be shared across nodes, so without shared object storage NetBox is pinned to the node holding that volume and does not survive its loss (see High Availability).
An external endpoint does not have to be a cloud provider. NetBox Enterprise works with any S3-compatible endpoint — including one you run yourself. This page is a reference architecture for a customer-run S3 endpoint: self-hosted S3-compatible software (such as MinIO, Ceph with RadosGW, or Garage) that you operate outside the NetBox Enterprise cluster.
If you already have a managed cloud bucket, you do not need this page — go straight to Storage Options for provider setup.
Already running on node-local storage? Migrate your media first
This page assumes a fresh install, or an existing install with no media worth keeping. Pointing an existing install at a new endpoint does not copy anything: NetBox starts reading and writing at the new bucket, and media already on the node-local volume — image attachments, device-type images, custom-script files — stops being served.
Before you cut over, migrate the existing objects using Storage Migration.
When to self-host
Both paths satisfy the external-S3 requirement equally. The choice is operational.
| Consideration | Cloud S3 (AWS, GCS, Azure, Spaces) | Self-hosted S3 (MinIO, Ceph, Garage) |
|---|---|---|
| Operational ownership | Provider-managed | You run, patch, and monitor it |
| Data residency | Provider regions | Full control; on-premises or isolated networks |
| HA responsibility | Provider SLA | Your endpoint must itself be multi-node and HA |
| Best fit | You already use a cloud provider | No cloud S3 available, or on-premises / regulated environments |
Self-hosting is the path that unblocks customers who have no cloud object storage but can provision a few extra hosts.
Reference topology
Run the S3 endpoint on hosts independent of the NetBox Enterprise nodes. Co-locating the object store on the same machines that run NetBox reunites the failure domains you separated them to avoid: losing a node would then take down both a NetBox replica and part of the storage tier at once.
PostgreSQL and Redis are also external in an HA deployment; they are omitted here to keep the focus on object storage. See High Availability for the full data-tier picture.
Endpoint requirements
A customer-run endpoint must meet the same bar NetBox Enterprise expects of any external dependency:
- Highly available in its own right. NetBox Enterprise depends on the endpoint; it does not make it HA. Run the S3 software as a multi-node, replicated cluster so the object store survives the loss of one of its hosts. A single-node MinIO (or equivalent) reintroduces the single point of failure you are removing.
- Reachable from every NetBox node at one stable address. Front the S3 nodes with a load balancer or virtual IP and give NetBox that single
endpointUrl. NAT between NetBox nodes and the endpoint is not required, but the address must resolve and route identically from all nodes. - TLS. Serve the endpoint over HTTPS. A certificate from a public CA is simplest; for a private CA or mTLS, NetBox Enterprise references the certificates through its keychain rather than disabling verification. See SSL Certificate Errors.
- CORS. NetBox's web UI makes direct browser requests to the endpoint, so CORS is mandatory — without it, media and static files fail to load. See CORS Configuration.
- AWS Signature Version 4. The endpoint must implement the S3 API with SigV4 authentication, which the supported self-hosted options all do.
Software options
Any S3-compatible service that implements the S3 API with Signature Version 4 works. Common self-hostable choices are MinIO, Ceph (RadosGW), SeaweedFS, and Garage. Storage Options lists the tested providers along with bucket, IAM, and CORS setup for each; follow your chosen software's own clustering and sizing guidance to build the endpoint itself.
Sizing and placement
- Dedicated hosts. Provision the S3 endpoint on separate hosts (or a separate cluster) from the NetBox Enterprise nodes, per the topology above.
- Capacity. Size the endpoint for media growth, not for the NetBox database — uploaded images, attachments, and custom-script files land here. Enable versioning to guard against accidental deletion.
- Locality. Keep the endpoint on the same low-latency network as the NetBox cluster. Media reads and writes are in the request path for parts of the UI, so a distant or high-latency endpoint shows up as slow page loads.
Configure NetBox Enterprise
Once the endpoint is running, point NetBox Enterprise at it. The connection fields are the same as for any external S3; only the endpointUrl differs.
- Embedded Cluster: configure S3 in the Admin Console — see Storage Installation.
- Helm: set
netbox.config.storage.s3in your values file — see S3 Media Storage.
netbox:
config:
storage:
s3:
enabled: true
bucketName: netbox-media
endpointUrl: https://s3.internal.example.com # your self-hosted endpoint
accessKeyId:
name: netbox-s3-creds
key: access_key
secretAccessKey:
name: netbox-s3-creds
key: secret_keyFor a private CA or mTLS, add a tlsConfig block referencing keychain certificates instead of skipping verification — see S3 TLS Configuration.
On an existing install, migrate the media already on node-local storage before this cutover takes effect — see Storage Migration.
Proxy environments
If your cluster reaches the internet through a corporate egress proxy, NetBox's S3 client honors the standard proxy environment variables. NetBox Enterprise sets nothing that overrides them, so HTTP_PROXY, HTTPS_PROXY, and NO_PROXY apply to media traffic as they do to any other outbound request.
Two behaviors matter for a self-hosted endpoint:
NO_PROXYalways includes the private address ranges. NetBox Enterprise prepends the cluster-internal suffixes plus10.0.0.0/8,172.16.0.0/12,192.168.0.0/16, and169.254.0.0/16to whatever you configure. A self-hosted endpoint on a private address is therefore reached directly, bypassing the proxy — which is usually what you want for an endpoint on your own network, but it also means you cannot force that traffic through the proxy. An endpoint reached by a public hostname goes through the proxy normally.- The variables are only present if a proxy is configured. They are stamped onto NetBox and the other workloads only when proxy settings exist; a direct-connection install is unaffected.
On Embedded Cluster, proxy settings are install-time only
Embedded Cluster takes its proxy configuration from the installer flags (--http-proxy, --https-proxy, --no-proxy) and shows it read-only in the Admin Console. It is not inherited from shell environment variables, and it is not editable after installation — to change it, re-run the installer with the new flags. Decide your proxy configuration before you install. See Proxy Environments.
Availability is not backup
A shared, highly available S3 endpoint keeps NetBox media reachable through a node failure — that is what unblocks HA. It is not a backup. A bucket that is deleted, corrupted, or lost with its hosts still needs an independent backup target on separate storage.
Keep backups off the live endpoint
Do not treat the self-hosted endpoint as its own backup. Back NetBox up to storage that does not share fate with the live media endpoint. See Backups.
Next steps
- Storage Migration — move existing media off node-local storage before cutting over
- Storage Options — provider tables, bucket, IAM, and CORS setup
- Storage Installation — configure S3 during NetBox Enterprise setup
- High Availability — full HA topology, network budget, and prerequisites
- Multi-Node Deployment — install the HA cluster
Accessing the In-Cluster Object Store
Credentials, endpoint, and layout for the in-cluster Garage bucket, plus uploading migrated media and plugin wheelhouses.
Migrating to S3-Compatible Storage
Migrate NetBox Enterprise media off node-local storage onto an S3-compatible bucket, in preparation for multi-node or as a durability improvement.