Sync the self-hosting stack

This commit is contained in:
2026-08-24 13:31:40 +02:00
parent 0674e550f1
commit 9848d2f8be
3 changed files with 32 additions and 21 deletions
+16 -20
View File
@@ -193,27 +193,25 @@ else has a "later" that costs nothing.
Everything it asks is a setting you can change afterwards from an ordinary screen. Nothing it asks
needs a container restart to change.
### The claim window
### Install it when you deploy it
**A brand-new instance can be claimed for 30 minutes after it starts, and the first account created
owns it.** That is why the install screen shows a countdown.
**Until somebody creates the first account, anyone who reaches this instance can.** There is no
deadline on that and no token to find: the first account created owns the instance, and the claim is
open for as long as nobody has taken it.
This replaces something worse. Jarvis used to accept exactly one registration on an instance with no
users and make that account super-admin — so a freshly deployed instance reachable from the internet
belonged to whoever found it first, on a product that holds SSH keys and opens shells on your
clients' servers. The window closes that.
So the gap that matters is between `docker compose up -d` and you opening a browser. Keep it short.
If you are pointing a public hostname at this, point it after you have installed, or install through
the host's own address first — the setting is editable afterwards.
If you miss it, nothing is lost. Restart the api container to open another:
```sh
docker compose restart api
```
If you would rather it were not open at all until you say so, do not publish the address yet: the
install screen is served by the same web container as everything else, and a Jarvis nobody can reach
is a Jarvis nobody can claim.
**Losing your database does not put your instance up for grabs.** An instance whose database has gone
missing looks exactly like a brand-new one from the outside — no accounts, no completed setup — while
sitting on a hostname the world already knows. On that instance the window still opens, so you can
get back in, but creating the first administrator costs the last characters of your vault master key.
You have it; nobody else does. A genuine first installation is never asked for it.
sitting on a hostname the world already knows. On that one the claim still opens, so you can get back
in, but creating the first administrator costs the last characters of your vault master key. You have
it; nobody else does. A genuine first installation is never asked for it.
### The one thing to do afterwards
@@ -439,7 +437,6 @@ wrong on the screen that asks for it.
| Symptom | Cause |
| --- | --- |
| Every page redirects to an install screen | This instance has not been installed yet. That is the wizard, not an error. |
| The install screen says the claim window has closed | Nobody claimed it within 30 minutes of boot. `docker compose restart api` opens another. |
| The assistant answers "this instance has no model configured" | Exactly that. **Settings → Platform → Model**, where the test button will tell you what the provider thinks. |
| api restarts in a loop, logs `Invalid environment configuration` | A value you set yourself is wrong. Only the database, Redis and the vault key are validated at boot now. |
| The sign-in page loads but cannot sign in | The stored public address is not the one the browser used, scheme included. Change it under **Settings → Platform**. |
@@ -507,10 +504,9 @@ SQL
Enrol a new factor as soon as you are back in, and note that this leaves no audit trail of its own —
the trail is your shell history.
**Re-running the install wizard is not a recovery route.** Its claim window only opens on an instance
with no users and no completed setup, so on a working deployment it will refuse — and making it
refuse less by clearing those columns by hand would hand your live instance to whoever reaches it
first.
**Re-running the install wizard is not a recovery route.** The claim is open only on an instance with
no users and no completed setup, so on a working deployment it refuses — and making it refuse less by
clearing those columns by hand would hand your live instance to whoever reaches it first.
### Moving the instance to a new address