Shared installs & user profiles
SRTC installs single-user by default — no sign-in, one workspace. On a machine several people share, switch on accounts: everyone signs in at the same URL and each gets a private profile. This page is for whoever administers that machine.
Two modes, one install
| Single-user (default) | Multi-user | |
|---|---|---|
| Sign-in | none | required |
| Home directory | one shared workspace | /work/users/<uuid> per account |
| Database | none | PostgreSQL (ships in the bundle) |
| Suits | one person, a laptop, evaluation | a shared Linux box, a group |
Both come out of the same download. Multi-user adds a database container that is already inside the bundle, so turning it on needs no network access either.
Install with accounts
tar xzf srtc-<version>-amd64.tar.gz
cd srtc-<version>-amd64
./install.sh --multi-user
./install.sh --add-user alice@lab.gov # prompts twice, not echoed
./install.sh --add-user bob@lab.gov
./install.sh --list-users
Then point people at http://<this-host>:8080. The mode is
remembered, so later --start, --stop and
--status keep addressing the same stack. Passwords must be at least
12 characters; they are hashed with Argon2id and read from stdin, so they never
reach shell history, ps, or the container logs.
There is no self-service signup. Accounts exist only because an administrator created them.
What a profile is
Every request resolves to a signed-in account, and every path the server touches is resolved under that account's home directory. That single rule is the whole isolation model — no subsystem has its own idea of who owns what.
| Private to each account | Shared, read-only |
|---|---|
| Run history — decks, logs, results, particle tracks | Physics cross-section libraries |
| Dose-depth curves they generate | The material compendium |
| Uploaded and converted CAD (STEP) | Shipped reference dose-depth curves |
| Uploaded heavy-ion environments | Shipped heavy-ion environments |
| Custom materials, exports, computed NIEL curves | |
| Saved projects and mission profiles |
A user's own file shadows a shipped one of the same name; writes always land in their own home, never over the shared copy. Nobody can read, list, or overwrite another account's files, and every job id is checked against its owner — otherwise guessing a run id would hand over someone else's results.
Before you expose it
-
Put TLS in front of it. The stack serves plain HTTP, and the
session cookie is deliberately not marked
Secure— over plain HTTP a browser silently drops aSecurecookie, so sign-in appears to succeed and instantly bounces back to the login page. Once TLS terminates in front of the stack, setSRTC_COOKIE_SECURE=1in.env. -
Back up
.envand thesrtc_srtc-dbvolume..envholds the generated database password and cannot be recovered; the volume holds every account. It is the one volume that cannot be rebuilt by re-running something. - Sessions are revocable. They are server-side, not JWTs: 12 hours idle, 30 days absolute, and changing a password evicts that account's other browsers immediately.
-
Concurrency is already bounded.
SRTC_MAX_CONCURRENT_JOBSdefaults to half the cores, so one person cannot bury the box with transport runs. Set it in.envto change it.
Converting an install that is already in use
Switching an existing single-user install to --multi-user keeps the
physics data and the containers, but everything already in the workspace belongs
to no account, so nobody sees it after signing in. Adopt it:
./install.sh --multi-user
./install.sh --add-user you@example.com
docker compose -f docker-compose.yml -f docker-compose.multiuser.yml \
exec backend srtc-viewer admin adopt-work --email you@example.com --dry-run
# review, then run it again without --dry-run
Both paths are inside the same volume, so each move is an instant rename however large the run folder.
Administrator commands
From the unpacked bundle directory:
alias srtcdc='docker compose -f docker-compose.yml -f docker-compose.multiuser.yml'
srtcdc exec backend srtc-viewer admin list-users
srtcdc exec backend srtc-viewer admin add-user --email x@y.com --password-stdin
srtcdc exec backend srtc-viewer admin disable-user --email x@y.com
srtcdc exec backend srtc-viewer admin reset-password --email x@y.com --password-stdin
Disabling an account takes effect on its next request rather than whenever a token would have expired.
Physics data
The cross-section libraries carry a version stamp, and the server refuses transport runs against libraries built by cross-section code it does not recognise — a wrong dose is worse than no dose. The bundle ships matching libraries, so this only arises if you point an install at a data volume from a different release. The viewer says which half is out of date and what to do about it.