Documentation menu

Docs / Operations

Deploy and qualify a bucket

What a deployment is, what the bucket must guarantee, and how nodes are secured.

Available View Markdown

A deployment is one bucket prefix and the gauntlet serve nodes that point at it. The supported shape in pre-beta is gauntlet serve on Linux x86_64 (glibc 2.34 or newer), from a systemd unit or the container image.

One rule comes first: the bucket is the database. Never delete, expire or edit objects under the deployment's prefix, and never set a lifecycle rule on it.

#Qualify the bucket

Gauntlet needs atomic create-if-absent (If-None-Match: *), read-after-write consistency and a strongly consistent, ordered LIST. An S3-compatible endpoint alone is not enough.

Shell
(set -a; . ./secrets.env; gauntlet qualify --store 's3:#qualify-check')

gauntlet qualify exits 0 on a pass, 2 when a check fails and 3 when the result is inconclusive. Every node start runs the same checks. Never run qualify against a live prefix.

Provider Status
Tigris Run by the project
Cloudflare R2 Run by the project. Slower conditional writes in those runs
AWS S3 Unverified. No recorded run
Google Cloud Storage Unverified. Qualification is planned
MinIO Unverified. No recorded run

One strongly consistent, single-region bucket is the only supported shape. A multi-region or eventually consistent bucket is not safe as the only arbiter.

#Bucket settings

Variable Default Meaning
GAUNTLET_S3_ENDPOINT required The service URL
GAUNTLET_S3_BUCKET required The bucket name
GAUNTLET_S3_ACCESS_KEY_ID, GAUNTLET_S3_SECRET_ACCESS_KEY required A key that can read and write this bucket only
GAUNTLET_S3_REGION auto The signing region
GAUNTLET_S3_PATH_STYLE true Set false for virtual-hosted bucket addressing
GAUNTLET_S3_TIMEOUT_MS 10000 Deadline for one control request

#Security

  • TLS on every listener. A listener that is not on loopback must use TLS, or the node refuses to start. The deployment has its own private CA; each node's certificate is both its server certificate and its client certificate to the other nodes.
  • SCRAM-SHA-256 for PostgreSQL clients. One token per database; a separate admin token.
  • Tokens are at least 32 characters and never go in the config file. Each can come from a file named by GAUNTLET_<NAME>_FILE.
  • No SQL roles or table privileges.
  • The bucket is trusted. Objects are not encrypted or signed by Gauntlet.

A node refuses to start, before it binds or writes anything, if TLS is half configured, the key file is readable by others, the certificate does not cover the advertised name, a token is missing or short, or the bucket fails qualification.

#Health endpoints

Endpoint Auth Meaning
GET /health none Liveness. Answers ok while the process runs
GET /ready none Readiness. 200 when the node can serve; 503 when it cannot
GET /db/<name>/ready database token That database's readiness. Does not wake an idle database

Point a load balancer's health check at GET /ready.

#Configuration

The config file's keys are the flag names of gauntlet serve --help. A flag on the command line wins over an option's environment variable, which wins over the file. A misspelt key, a value of the wrong type, or a key that looks like a secret stops the start.

#Coming

Managed Gauntlet Cloud and packaged bring-your-own-cloud installs are designed and not built. Qualification of AWS S3 and Google Cloud Storage is planned.

Search runs in your browser over an index of these pages. No query leaves this site.