Run computers with resources and health checks, add settings for bots, workspaces, computers and users
- Computers get CPUs and memory (default 1 CPU, 2 GB), set at creation and editable; new resources stop, remove and recreate the container, its home dir kept. Every computer container has a docker health check and stays "creating" until it passes; only healthy computers are reached, by hostname, else by their IP on the network (dev outside docker). - Docker is required: the app creates the cobble network on startup and exits without docker. - Production container: deploy/run-app-container.sh mounts .env, the data dir and the docker socket; the database (DB_DIR), media, computers' homes and bun-sqlite's live schema now live on the data volume. - Settings pages for bots, workspaces, computers and users, sharing list components; bots can be deleted; users are created with a password and confirmation, edited and deleted through RBAC-gated APIs. - User types trimmed to super_admin, admin, member, read_only and revoked; admins manage members. UserAvatar shows profile photos from the user row. Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
+38
-5
@@ -27,9 +27,9 @@ export const AppData = {
|
||||
PasswordMaxLength: 128,
|
||||
PasswordAttemptLimit: 10,
|
||||
/**
|
||||
* Docker network shared by the app and every computer. The app creates
|
||||
* it when it sets up its first computer and joins it when it runs in
|
||||
* docker.
|
||||
* Docker network shared by the app and every computer. The app makes
|
||||
* sure it exists on startup and before it creates a container, and
|
||||
* joins it when it runs in docker.
|
||||
*/
|
||||
DockerNetworkName: SiteData["SiteSlug"],
|
||||
/**
|
||||
@@ -51,11 +51,44 @@ export const AppData = {
|
||||
ComputerHomeDir: "/home/gem",
|
||||
ComputerUserUid: 1000,
|
||||
ComputerUserGid: 1000,
|
||||
/**
|
||||
* Resources a new computer's container gets, saved on the computer
|
||||
* (`cpus`, `memory_mb`) when it is created.
|
||||
*/
|
||||
ComputerDefaultCpus: 1,
|
||||
ComputerDefaultMemoryMb: 2048,
|
||||
ComputerMinCpus: 0.25,
|
||||
ComputerMaxCpus: 64,
|
||||
ComputerMinMemoryMb: 512,
|
||||
/**
|
||||
* Docker's health check on every computer container: the sandbox's API
|
||||
* on `ComputerPort` and its browser answer. A new computer stays
|
||||
* `creating` until it passes, for at most `ComputerHealthyTimeoutMs`,
|
||||
* checked every `ComputerHealthPollMs`.
|
||||
*/
|
||||
ComputerHealthcheck: {
|
||||
IntervalSeconds: 5,
|
||||
TimeoutSeconds: 5,
|
||||
StartPeriodSeconds: 120,
|
||||
Retries: 3,
|
||||
},
|
||||
ComputerHealthyTimeoutMs: 5 * 60 * 1000,
|
||||
ComputerHealthPollMs: 2000,
|
||||
/**
|
||||
* How long docker gives a computer's container to stop before it is
|
||||
* killed, when it is removed or recreated.
|
||||
*/
|
||||
ComputerStopTimeoutSeconds: 10,
|
||||
/**
|
||||
* A computer is reached at its hostname, else its IP address. Each
|
||||
* address gets this long to answer, and the one that did is reused
|
||||
* for `ComputerAddressCacheMs`.
|
||||
*/
|
||||
ComputerReachTimeoutMs: 2000,
|
||||
ComputerAddressCacheMs: 60 * 1000,
|
||||
/**
|
||||
* Per computer container.
|
||||
*/
|
||||
ComputerMemoryBytes: 4 * 1024 * 1024 * 1024,
|
||||
ComputerCpus: 2,
|
||||
ComputerShmBytes: 2 * 1024 * 1024 * 1024,
|
||||
/**
|
||||
* The docker engine API, reached over its unix socket.
|
||||
|
||||
Reference in New Issue
Block a user