English | 中文
GSAD lets you manage SSH access to GPU servers through a web UI. Team members apply for access, backend agents provision Linux accounts on GPU hosts, and lightweight reporters send GPU metrics back to the dashboard. Everything runs in Docker on a single central host, with agents deployed on each GPU machine.
Documentation: https://zerodtree.github.io/server-manager/
flowchart TB
Browser(["Users / Browser"])
subgraph central ["Central Host (Docker)"]
Traefik["Traefik :443"]
UI["Vue UI"]
Backend["Backend (Spring Boot)"]
Traefik --> UI
Traefik -->|"HTTPS /api JWT"| Backend
end
subgraph data ["Data Layers"]
PG[("PostgreSQL")]
RD[("Redis")]
end
subgraph agents ["GPU Hosts (Agents)"]
Prov["account-provisioner"]
Rep["gpu-server-report"]
end
Browser -->|"HTTPS :443"| Traefik
Backend --> PG
Backend --> RD
Prov -->|"HTTP BACKEND_AGENT_PORT /api/internal"| Backend
Rep -->|"HTTP BACKEND_AGENT_PORT /api/internal"| Backend
- Docker and Docker Compose
- Production HTTPS: a public IP, DNS A/AAAA for
GSAD_PUBLIC_HOST, inbound TCP 80 and 443 (Traefik terminates TLS via Let's Encrypt)
- Clone with submodules:
git clone --recursive git@github.com:zeroDtree/server-manager.git
- Copy
.env.exampleto.env.Editcp .env.example .env
GSAD_PUBLIC_HOST,ACME_EMAIL, andBACKEND_AGENT_BIND. - Deploy the stack:
ADMIN_EMAIL=admin@example.com ./utils/deploy-prod.sh - Log in with the admin email from step 3 (
ADMIN_EMAIL). - Admin → Server management — add hosts or import CSV (
server_id,agent_psk); see agent PSK. - Deploy server-agent on each GPU host with the same
AGENT_SERVER_ID=server_id,AGENT_PSK=agent_psk. - Admin → User management — import users.
Upgrade Frontend and Backend:
git pull && git submodule update --init --recursive && \
./utils/deploy-prod.sh --no-adminUpgrade Agents on each GPU host — see server-agent.
Stop the stack (containers only; data volumes kept):
./utils/gsad-compose.sh downThe steps above use the default prod stack: bundled Traefik on 80/443 with Let's Encrypt.
Pass a flag on the first deploy for a different stack; later upgrades reuse the mode stored in .gsad-compose-mode.
--external— reuse an existing edge Traefik. See external Traefik.--local— HTTP on localhost for a prod-like tryout. Conflicts with an edge Traefik on the same host. See local prod.
Override a stored mode with --prod, --external, or --local.
Local UI plus mock GPU hosts (no Traefik):
./utils/dev-up.sh -d
cd gsad-frontend && npm install && npm run devOpen http://localhost:5173. Seeded admin: admin@gsad.local / Admin@123456. See Development.