Skip to content

Repository files navigation

Maryl logo

Maryl

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.

CI MIT License Node 20+

Quick start · Deployment · API · Architecture · Contributing


Maryl dashboard — fleet overview, node health, and capacity

Dashboard — fleet status, cluster capacity, node health, and recent activity at a glance.


Why Maryl?

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.


Features

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


Screenshots

Sign-in screen
Sign in
Servers fleet view
Servers
Nodes infrastructure view
Nodes
Settings and configuration
Settings

Quick start

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 dev

Open http://localhost:3000 and sign in:

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


Documentation

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

Stack

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]
Loading

Development

npm run lint
npx tsc --noEmit
npm run build
npm run db:studio   # Prisma GUI at localhost:5555

CI runs the same checks on every push to main.


Limitations

  • 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

License

MIT — Copyright (c) 2026 Maryl

About

Self-hosted control plane for LinuxGSM game servers in Docker — provision, console, backups, multi-node fleet management.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages