Skip to content

Latest commit

 

History

1,357 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

QLSM logo Quake Live Server Management

Discord Version License

📚 User Guide → · Issues

QLSM demo — Servers page, editing an instance's config, plugins, factories, and hooks

Features:

  • Three deployment modes:
    • QLSM self-deployment: run QLDS instances on the same machine as QLSM
    • Standalone remote server
    • VULTR cloud provisioning via Terraform
  • Automatic CPU affinity assignment for QLDS instances on multi-vCPU hosts
  • Redis DB selection when deploying an instance: give each QLDS instance its own DB, or share one DB across instances that need to share plugin state
  • Optional 99k LAN rate mode.
  • LD_PRELOAD hooks manager: upload, enable/disable, reorder, and delete custom native .so libraries loaded into each QLDS process at launch. System hooks (like force_rate.so for 99k LAN rate) are managed automatically.
  • Optional QLFilter deployment (anti-DDOS protection)
  • Per-instance RCON console with command line and live feed of all server events
  • Global RCON console to send one command to many instances at once and shows each instance's reply separately.
  • Live server status with current map, gametype, mode/factory, match timer, player list, and scores
  • Syntax-aware editors (CodeMirror) for server.cfg, mappool.txt, access.txt, and workshop.txt, featuring a Python linter for minqlx plugin's code validation. The editor includes search and replace functionality for easy editing
  • Upload common config files, factories, and custom minqlx plugins.
  • QLSM's bundled minqlx build includes the damage event/dispatcher for custom plugins to hook.
  • Preset manager to load/save/update/delete QLDS presets, including export/import as ZIP archives to back up presets or move them between QLSM installs. Each preset includes custom server.cfg, access.txt, mappool.txt, workshop.txt, LD_PRELOAD user hooks, set of minqlx-plugins, *.factories files, and the 99k LAN Rate toggle state
    • Minqlx plugins can be enabled in the UI by selecting checkboxes. This eliminates the need to manually edit the qlx_plugins cvar, as QLSM handles it automatically.
    • Factories can be enabled in the UI by selecting checkboxes.
  • Logs retrieval with Last N Lines, Time Range, and All filters:
  • Daily/weekly/monthly host auto-restart scheduling; scheduled restarts trigger Steam workshop refresh across all deployed instances
  • Manual workshop item update by Steam Workshop ID, with optional restart of selected instances
  • ZMQ RCON Port, ZMQ RCON Password, ZMQ Stats Port, ZMQ Stats Password - all these cvars are auto-generated and shown in the UI
  • User management: create users, delete users, and reset passwords
  • External API key management for service-to-service access
  • External REST API for authenticated instance inventory lookups
  • Responsive server management UI optimized for desktop, tablet, and mobile layouts
  • Per-user host/instance ordering and expanded-state preferences stored in browser local storage

Everything runs over SSH via Ansible.

Stack

Flask + React + SQLite + Redis + Ansible. Background jobs run through RQ workers. The frontend is a Vite/Tailwind SPA served behind Caddy.

Requirements

  • Dockerinstall guide
  • Docker Compose (usually included with Docker)
  • A user with sudo access

Redis, Caddy, the app itself run inside Docker.

To install Docker on a fresh Debian server:

curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker

Quick start

Option 1 — Vultr (no terminal required)

The easiest option. Register a Vultr account, go to Manage → Startup Scripts, and add the vultr-startup.sh script. Then deploy a shared CPU VPS (Debian 12, vc2-1c-1gb at $5/month works fine) selecting that startup script under the Configure Software tab — QLSM will be up and running in about 10 minutes with no terminal interaction needed. After deployment, open http://[vultr-provided-ip] in your browser to access the web interface.

Option 2 — one-liner

curl -fsSL https://raw.githubusercontent.com/dngrtech/qlsm/main/qlsm-install.sh | bash

With a custom domain (enables HTTPS via Caddy):

SITE_ADDRESS=qlds.example.com bash <(curl -fsSL https://raw.githubusercontent.com/dngrtech/qlsm/main/qlsm-install.sh)

With a custom HTTPS port:

SITE_ADDRESS=qlds.example.com:444 bash <(curl -fsSL https://raw.githubusercontent.com/dngrtech/qlsm/main/qlsm-install.sh)
# or, if SITE_ADDRESS is a bare domain, let the installer append the port:
SITE_ADDRESS=qlds.example.com PUBLIC_HTTPS_PORT=444 bash <(curl -fsSL https://raw.githubusercontent.com/dngrtech/qlsm/main/qlsm-install.sh)

Option 3 — git clone

git clone https://github.com/dngrtech/qlsm.git && cd qlsm
cp .env.example .env
# edit .env: set SITE_ADDRESS, REDIS_PASSWORD, and VULTR_API_KEY if using Vultr
docker compose up -d

Default login is admin / admin. A password change is enforced on first login.

Updating

Manual update

Default install (~/qlsm)

curl -fsSL https://raw.githubusercontent.com/dngrtech/qlsm/main/qlsm-install.sh | bash -s -- --update

Vultr / system install (/opt/qlsm)

curl -fsSL https://raw.githubusercontent.com/dngrtech/qlsm/main/qlsm-install.sh | INSTALL_DIR=/opt/qlsm bash -s -- --update

Automatic daily updates (cron)

Default install (~/qlsm)

(crontab -l 2>/dev/null | grep -v "qlsm-install.sh"; echo "0 9 * * * curl -fsSL https://raw.githubusercontent.com/dngrtech/qlsm/main/qlsm-install.sh | bash -s -- --update >> \$HOME/qlsm-update.log 2>&1") | crontab -

Vultr / system install (/opt/qlsm)

sudo bash -c '(crontab -l 2>/dev/null | grep -v "qlsm-install.sh"; echo "0 9 * * * curl -fsSL https://raw.githubusercontent.com/dngrtech/qlsm/main/qlsm-install.sh | INSTALL_DIR=/opt/qlsm bash -s -- --update >> /var/log/qlsm-update.log 2>&1") | crontab -'

Uninstall

curl -fsSL https://raw.githubusercontent.com/dngrtech/qlsm/main/qlsm-uninstall.sh | bash

Full uninstall guide (Vultr installs, purge options, what gets removed): docs/user/getting-started/uninstall.md


Full installation guide: docs/user/getting-started/installation.md

Development

cp .env.example .env
./run-dev.sh

That starts Flask, Vite, an RQ worker, the RCON service, and a status poller together. Flask ends up on :5001, frontend on :5173.

Redis needs to be running locally for dev (it's included automatically in the Docker stack for production):

# Ubuntu/Debian
sudo apt install redis-server && sudo systemctl enable --now redis
pytest tests/

Docs

Acknowledgements

Huge thanks to Doomsday — his deep knowledge of Quake Live dedicated server administration has directly shaped a large portion of QLSM's features. Years of running servers for the NA Thunderdome community gave him insights that no documentation could replace. He also maintains an excellent collection of minqlx plugins worth checking out.

Kudos to mb for his help configuring and troubleshooting the 99k LAN rate feature.

License

GPL-3.0

About

Quake Live Server Management - Web dashboard for Quake Live dedicated server management

Topics

Resources

Stars

12 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages