Self-hosted control plane for LinuxGSM game servers running in Docker.
Provision servers, manage a multi-node fleet, delegate access, and automate backups — without building a billing platform or multi-tenant SaaS.
Quick start · Deployment · API · Architecture · Contributing
Dashboard — fleet status, cluster capacity, node health, and recent activity at a glance.
You run game servers (CS2, CS:GO, Valheim, Rust, Minecraft, …) via LinuxGSM inside Docker on one or more Linux hosts. Maryl replaces SSH-and-scripts with a single panel:
- Provision from templates with port and capacity validation
- Operate start/stop/restart, live console, RCON, and config editors
- Delegate per-server permissions so teammates get console-only on server A without admin on the whole fleet
- Automate backups, cron schedules, and cross-node migration
Maryl is not Pterodactyl, not a customer-facing game panel, and not a cloud product. It assumes you trust everyone with panel login, or you scope them per-server.
| Area | What you get |
|---|---|
| Provisioning | Wizard: template → node → resources → ports → env → async Docker job |
| Lifecycle | Start, stop, restart with state machine + one active job per server |
| Console | Live log stream (SSE), snapshot logs, interactive shell via WebSocket |
| RCON | Source RCON to running servers (CS2/CS:GO profiles) |
| Files | Browse, edit, upload, mkdir, rename, delete under each server's data directory |
| Config | Structured editor for LGSM/game cfg fields; secrets masked in API responses |
| Backups | Tar per-server data dir; download, restore (with optional safety backup) |
| Schedules | Cron tasks: backup, start, stop, restart (per-server timezone) |
| Nodes | Register Docker hosts, capacity tracking, drain/maintenance, port ranges |
| Migration | Move a server to another node (stop → relocate data → recreate container) |
| Team access | Per-server ServerMember permissions + global ADMIN/OPERATOR/VIEWER roles |
| Panel DB backup | pg_dump / restore for the PostgreSQL metadata database |
| API keys | Authorization: Bearer maryl_… for automation |
| Audit | Activity log of panel actions |
Seeded templates: CS2, CS:GO, Valheim, Rust, Minecraft (LinuxGSM gameserver images).
![]() Sign in |
![]() Servers |
![]() Nodes |
![]() Settings |
Requirements: Node.js 20+, PostgreSQL 14+, Docker Engine 20+.
git clone https://github.com/Daziusm/maryl.git
cd maryl
cp .env.example .env
npm install
npm run db:push
npm run db:seed
npm run devOpen http://localhost:3000 and sign in:
admin@panel.local |
|
| Password | admin |
Change this password immediately under Settings → Users.
Then: Nodes → register a Docker host → Servers → create from a template → wait for the PROVISION job → start playing.
For PostgreSQL setup, production hardening, reverse proxy, and systemd: docs/DEPLOYMENT.md.
| Guide | Contents |
|---|---|
| docs/DEPLOYMENT.md | Production install, .env, TLS reverse proxy, systemd |
| docs/ARCHITECTURE.md | Process model, jobs, Docker layout, auth flow |
| docs/API.md | Full REST API reference |
| config/README.md | Operator config files and LGSM paths |
| CONTRIBUTING.md | Dev setup, PR guidelines |
| SECURITY.md | Vulnerability reporting |
| Layer | Technology |
|---|---|
| UI + API | Next.js 15, React 19 |
| Database | PostgreSQL, Prisma |
| Containers | Dockerode, LinuxGSM gameserver images |
| Auth | Session cookies + API keys (SHA-256) |
| Jobs | In-process (no Redis/worker) |
flowchart LR
Browser --> Next[Next.js panel]
Browser --> WS[Console WS]
Next --> PG[(PostgreSQL)]
Next --> Docker[Docker API]
WS --> Docker
Docker --> GS[Game servers]
npm run lint
npx tsc --noEmit
npm run build
npm run db:studio # Prisma GUI at localhost:5555CI runs the same checks on every push to main.
- Single-panel-process job execution (no distributed worker)
- No billing, customer portal, or email alerts (webhook only)
- No built-in SFTP server — Access tab shows SSH hints for the host
- Full server backups only (tar), not incremental
- Horizontal scaling of the panel itself is not supported out of the box
MIT — Copyright (c) 2026 Maryl




