Solo mode¶
A personal, standalone copy of the gateway for a machine that has no access to the live ModernWMS/ Part-DB docker containers — a second Arch box at home, say, rather than the server those containers actually run on. It is not a lighter version of the test instance; it is for a genuinely different situation:
| Test instance | Solo mode | |
|---|---|---|
| Where it runs | The same box as live, or one with access to the same containers | Any machine, no containers needed at all |
| Sign-in | Your real ModernWMS/Part-DB account | A local password, set just for this copy |
| Reachable from | 127.0.0.1 only (SSH tunnel to reach it from elsewhere) |
Its own IP and port, like live |
| LEGO collection | Fresh public catalog, empty collection | Same: fresh public catalog, empty collection |
| Part-DB parts / ModernWMS-only screens | Work normally (same containers) | Not available — see below |
If you do have access to the ModernWMS/Part-DB containers (you're setting up a second copy on the same server, or one that can reach them), use the test instance instead — it's simpler and reuses your real login.
What's different¶
ModernWMS is only ever reachable via docker exec into its container — there is no network path to
it. Part-DB's own reads are a local SQLite file; only its writes have a real HTTP API. Neither of
those is available on a machine with no access to the containers, so solo mode:
- Signs in against a password stored in
access.jsoninstead of either backend (internal/access'sPasswordHashfield, bcrypt, same scheme as the remote-bot PIN). Set one with:(omitwms access user set-password <name> --source local wms access user set-groups "local:<name>" admin--passwordto get one generated and printed once). This account is governed by the same permission groups, 2FA policy, channels and persisted login lockout as any other — it just isn't ModernWMS or Part-DB underneath. - Starts even when there's no Part-DB SQLite file to open, rather than aborting — every Part-DB screen/API call then returns a clear "Part-DB not available (solo mode)" error instead of working, so a Part-DB parts lookup fails cleanly rather than taking the whole app down.
- ModernWMS-only screens (warehouse ops, stock, orders, user management) behave the same as they
would with an unreachable container today: a normal "docker exec failed" error, not a crash. The
LEGO side of this app (sets, parts, checks, bagging —
internal/lego, its own SQLite file) was always independent of both backends and works exactly as it does live.
Setting it up¶
bash scripts/solo-instance.sh kc # first run: builds, creates account "kc", seeds the public
# catalog, starts the gateway
bash scripts/solo-instance.sh status
bash scripts/solo-instance.sh stop
No root, no systemd, no containers — it builds into and runs entirely out of
~/.local/share/wms-solo (override with WMS_SOLO_DATA_DIR), never touching /usr/local/bin/wms-go,
/root/docker-server/wms, or any systemd unit. Telnet defaults to port 2325 and the web terminal to
7696 (both overridable — WMS_SOLO_TELNET_PORT, WMS_SOLO_WEB_PORT), bound to 0.0.0.0 by default
(WMS_SOLO_HOST) rather than the test instance's hardcoded loopback — the point of this one is being
reachable from elsewhere on your own network.
The sign-on screen's message-of-the-day says *** PERSONAL SOLO COPY ***, so it's never mistaken for
the real one.