Skip to content

Repository files navigation

GSAD — GPU Server Access Dashboard

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
Loading

Prerequisites

  • 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)

Deploy

  1. Clone with submodules:
    git clone --recursive git@github.com:zeroDtree/server-manager.git
  2. Copy .env.example to .env.
    cp .env.example .env
    Edit GSAD_PUBLIC_HOST, ACME_EMAIL, and BACKEND_AGENT_BIND.
  3. Deploy the stack:
    ADMIN_EMAIL=admin@example.com ./utils/deploy-prod.sh
    
  4. Log in with the admin email from step 3 (ADMIN_EMAIL).
  5. Admin → Server management — add hosts or import CSV (server_id, agent_psk); see agent PSK.
  6. Deploy server-agent on each GPU host with the same AGENT_SERVER_ID=server_id, AGENT_PSK=agent_psk.
  7. Admin → User management — import users.

Upgrade

Upgrade Frontend and Backend:

git pull && git submodule update --init --recursive && \
  ./utils/deploy-prod.sh --no-admin

Upgrade Agents on each GPU host — see server-agent.

Stop

Stop the stack (containers only; data volumes kept):

./utils/gsad-compose.sh down

Deploy modes

The 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.

Development

Local UI plus mock GPU hosts (no Traefik):

./utils/dev-up.sh -d
cd gsad-frontend && npm install && npm run dev

Open http://localhost:5173. Seeded admin: admin@gsad.local / Admin@123456. See Development.

Docs

Releases

Packages

Contributors

Languages