Accounts and day-to-day operations
Create and administer team accounts, check health, read logs and metrics, and stop services gracefully.
Manage accounts
Accounts are administered with oxysdb-server subcommands, run where the server’s store is reachable
(in compose: docker compose -f FILE exec -T server-1 oxysdb-server …; in Kubernetes:
kubectl exec deploy/<release> -- oxysdb-server …). They use the same store options as serve.
| Command | Does |
|---|---|
add-account --email EMAIL | creates an account; the password is the first line of standard input |
set-password --email EMAIL | sets a new password (standard input); the account is signed out everywhere |
list-accounts | lists the accounts |
verify-account --email EMAIL | confirms a signed-up address, so invitations and Quick Shares reach it |
disable-account --email EMAIL / enable-account | refuses sign-in and ends sessions / allows it again |
delete-account --email EMAIL | deletes it (refused while it is the only manager of a folder others use) |
Open sign-up (--allow-sign-up, OXYSDB_SERVER_ALLOW_SIGN_UP, Helm server.allowSignUp) lets anyone
who reaches the URL create an account. Such accounts receive nothing addressed to them until you run
verify-account, because someone else could have registered the address first. Use --trust-sign-up
only where addresses are controlled elsewhere (single sign-on in front, internal network).
Health checks
| Check | Meaning |
|---|---|
GET /healthz | liveness: the process serves |
GET /readyz | readiness: the store answers and no stop has begun |
oxysdb-server healthcheck, oxysdb-runner healthcheck | the same, for container health checks (there is no curl in the images) |
| pull-only runner | oxysdb-runner healthcheck checks its heartbeat file (stale after 60 s) |
Logs
--log-format json (OXYSDB_SERVER_LOG_FORMAT=json, OXYSDB_RUNNER_LOG_FORMAT; Helm default json)
writes one JSON object per line to standard error (ts, level, msg, fields). Logs never contain
passwords, tokens or connection strings.
Metrics
Off by default and never sent anywhere. --metrics-listen 0.0.0.0:9464 (server) or :9465 (runner)
serves Prometheus text on GET /metrics, on its own plain-HTTP listener: expose it to your scraper
only (the chart’s NetworkPolicy does).
| Metric | Service |
|---|---|
oxysdb_server_requests_total{op,outcome}, oxysdb_server_request_duration_seconds | server |
oxysdb_server_connections_active, oxysdb_server_ready, oxysdb_server_build_info{version,store} | server |
oxysdb_runner_up, oxysdb_runner_build_info{version,mode,pool} | runner |
oxysdb_runner_runs_total{trigger,outcome}, oxysdb_runner_queue_length, oxysdb_runner_leader, oxysdb_runner_running | runner |
Graceful stop
On SIGTERM, readiness fails at once and no new connection is accepted. Requests in flight get
OXYSDB_SERVER_SHUTDOWN_GRACE_SECS (default 20), then store work under way up to 30 s more. The runner
lets the run in progress finish within OXYSDB_RUNNER_SHUTDOWN_GRACE_SECS (default 20), releases its
leader lease and leaves; a run still going is recorded interrupted.
Abuse limits
| Setting | Default | Limits |
|---|---|---|
| sign-in throttling | built in | growing delays per client address and account, per address, per account; no lockout from another address |
OXYSDB_SERVER_MAX_CONNECTIONS_PER_IP | 64 | connections one client holds |
OXYSDB_SERVER_MAX_ACCOUNT_MB | 256 | items an account created plus its pending Quick Shares |
OXYSDB_SERVER_MAX_UNVERIFIED_ACCOUNT_MB | 1 | the same, for a signed-up account until verified |
OXYSDB_SERVER_MAX_FOLDER_MB | 64 | one shared folder |
OXYSDB_SERVER_TRUSTED_PROXIES | none | proxies whose X-Forwarded-For names the client; set it behind any proxy |
Post-quantum TLS
--tls-pq prefer (default) or require, on both programs (OXYSDB_SERVER_TLS_PQ,
OXYSDB_RUNNER_TLS_PQ): require accepts only the post-quantum key exchange X25519MLKEM768, so
switch to it once every desktop is upgraded (TLS). The option needs
--tls-cert and --tls-key: a program serving plain HTTP behind a TLS proxy refuses to start with
it (set the key exchange on the proxy instead).
Runner settings worth knowing
| Flag / variable | Default | Meaning |
|---|---|---|
--allow-task-types / OXYSDB_RUNNER_ALLOW_TASK_TYPES | every type but intellishellScript | task types accepted, or all |
--files-dir / OXYSDB_RUNNER_FILES_DIR | files in the data directory | the only place tasks read and write files |
--credentials-dir / OXYSDB_RUNNER_CREDENTIALS_DIR | none | the only place received connections may name key, certificate and known_hosts files |
--allow-ambient-credentials | off | allow the runner’s own Kerberos, AWS identity and SSH agent |
--pool / OXYSDB_RUNNER_POOL | default | the pool this runner serves |
--pull-only / OXYSDB_RUNNER_PULL_ONLY | off | database mode: no listener, outbound only |
--socks-proxy / OXYSDB_RUNNER_SOCKS_PROXY | – | SOCKS5 proxy for the runner’s database and SQL connections |
--lease-ttl-secs | 30 | leader lease |
OXYSDB_RUNNER_MASTER_PASSWORD_FILE | required | master password of the encrypted key store; prefer the file to the plain variable |
OXYSDB_RUNNER_TOKEN_FILE | – | the access token itself, instead of oxysdb-runner init |
oxysdb-runner init creates a new access token, prints it once and keeps only its SHA-256; running it
again replaces the previous token.
Diagnostics for a bug report
oxysdb-server diagnose and oxysdb-runner diagnose print a redacted bundle on standard output:
the version, the platform, the configuration without secrets (the database URL keeps its hosts, its
user name and password read ****; the master password, token and TLS files appear only as a path
or a variable name), the store read read-only (counts, quotas, locks; for the runner its manifest,
leases and latest runs), the database server’s version and the readiness probe. They take the same
options and variables as serve, plus --format text|json. Nothing is sent: read the output, then
paste what you choose into the issue.
Both services log to standard error only: add the last lines of kubectl logs or docker compose logs yourself.
Troubleshooting
| Symptom | Fix |
|---|---|
| A signed-up user receives nothing | verify-account --email … |
| several accounts normalise to one e-mail address in the log | two accounts differ only by spelling; delete one with delete-account <its spelling> |
| A runner refuses to start with the plain master password variable | with intellishellScript allowed, give OXYSDB_RUNNER_MASTER_PASSWORD_FILE instead |
| A runner refuses to start: wrong master password | the database was created with another one; use the original |
| Replicas answer “busy” | password hashing or the request queue is saturated; add replicas or wait |