Run a modded DST server in 5 minutes.
No Lua config. No manual setup.
- Web admin panel (mods, snapshots, commands, logs)
- One-click install (Windows + Linux)
- Docker-based, multi-instance ready
- Snapshot and restore anytime
Docker is required. git is not required for the one-line commands below.
curl -fsSL https://raw.githubusercontent.com/c01-in/dst-server-kit/master/scripts/install-qg-dst.sh | bashpowershell -NoProfile -ExecutionPolicy Bypass -Command "& ([scriptblock]::Create((irm 'https://raw.githubusercontent.com/c01-in/dst-server-kit/master/scripts/install-qg-dst.ps1'))) -Mode image"Both commands default to the prebuilt-image install flow:
- pull prebuilt GHCR images
- download only the compose/env/template files needed for image deployment
- auto-pick a default install directory
- detect an existing install in that directory and refresh it in place
- keep the current port group for the same instance unless you explicitly override it
For stable installs, use the one-line commands on the GitHub Releases page. Those release-pinned commands install the matching v* image tags instead of latest.
Managing a DST server is painful:
- Editing Lua files
- Manually installing mods
- No easy backup / restore
- Debugging via logs only
This project fixes that with a modern web UI.
First login:
- Username:
admin - Password:
change-me
After login, the UI will immediately prompt you to set a new password.
- Docker installed
- Docker daemon running
gitonly needed for repository-clone workflows outside the default image-mode one-line install path- Linux server needs
bash - Windows server can use PowerShell 5.1+ or PowerShell 7
curl -fsSL https://raw.githubusercontent.com/c01-in/dst-server-kit/master/scripts/install-qg-dst.sh | bashLinux installer behavior:
- Uses
.env.exampleas default seed for target.env(or--env-fileif provided) - Checks occupied ports and auto-picks a non-conflicting full port group
- If reinstalling the same
Instance, reuses that instance's previous ports by default - Auto-selects
~/qg-dst-serverformain, or~/qg-dst-<instance>for other instances - In
--mode image, a GitHub repo URL can install withoutgitby downloading only the image-mode compose file and required templates - When run directly from the GitHub raw URL, image mode is the default
Download the repository, then double-click:
scripts\install-qg-dst.cmd
The Windows launcher will:
- Ask for the instance name and admin port
- Pre-fill the install directory from that instance name
- Ask whether the server should be LAN-only or public
- If you choose public, ask for the Klei server token
- Try to start Docker Desktop if needed
- Use the local installer script
- Open the admin page after install
- If an existing install is detected, ask whether to force reinstall
- Auto-assign a non-conflicting port set for new instances by default
- Work from a downloaded ZIP without requiring
git, as long as the installer is running from that local extracted folder - In image mode, work from the default GitHub repo URL without requiring
gitby downloading only the compose/template files needed for prebuilt-image deployment
powershell -NoProfile -ExecutionPolicy Bypass -Command "& ([scriptblock]::Create((irm 'https://raw.githubusercontent.com/c01-in/dst-server-kit/master/scripts/install-qg-dst.ps1'))) -Mode image"One-line remote execution behavior:
- Defaults to image mode for remote repo URLs
- Uses
%USERPROFILE%\qg-dst-serverformain, or%USERPROFILE%\qg-dst-<instance>for other instances - Does not require
git - Downloads only the compose/template files needed for prebuilt-image deployment
When you launch from this repository's scripts folder, the default install directory is %USERPROFILE%\qg-dst-server for main, or %USERPROFILE%\qg-dst-<instance> for other instances, so the source checkout stays untouched.
If you launch the PowerShell installer from an existing deployed instance's scripts folder, the default is that instance folder.
Otherwise, the default is the current folder plus qg-dst-server or qg-dst-<instance>.
Force reinstall resets the install-time passwords and settings stored in the install directory.
Docker volumes are not removed by reinstall, so world data usually stays intact unless you remove volumes separately.
For an existing instance with the same Instance value, overwrite install reuses that instance's previous ports by default.
If you want the server to be public, create a Klei server token here:
Paste that token into the Windows installer prompt, or pass it to the PowerShell installer with -Token.
The installer writes it to DST_SERVER_TOKEN, and the server startup script saves it into cluster_token.txt.
By default, the installer seeds .env from .env.example.
If you want to use your own env file, you must specify one:
./scripts/install-qg-dst.sh --env-file /path/to/my.envpowershell -NoProfile -ExecutionPolicy Bypass -File scripts\install-qg-dst.ps1 -EnvFile C:\path\to\my.envYou can also set:
ENV_FILE_SOURCEfor the bash installerQG_ENV_FILEfor the PowerShell installer
Notes:
- The repository root
.envis not used by the installer by default - Remote helper scripts such as
validate-ssh.ps1andremote-compose.ps1requireREMOTE_PROJECT_DIRto be set explicitly in.env
Good for NAS / dashboard / Portainer setups.
docker compose -f docker-compose.images.yml up -dDefault images:
ghcr.io/c01-in/qg-dst-server:latestghcr.io/c01-in/qg-dst-admin:latest
Published platform targets:
qg-dst-server:linux/amd64qg-dst-admin:linux/amd64,linux/arm64
Notes:
- The DST runtime image currently targets
linux/amd64only. - The admin image is published for both
linux/amd64andlinux/arm64. - On
master, GitHub Actions publishes thelatesttags automatically. - On release tags such as
v0.2.3, GitHub Actions also publishes the matching version tags. - On release tags, GitHub Actions also creates a GitHub Release page with one-line install commands pinned to that exact version.
You can override them in .env:
QG_DST_IMAGEQG_ADMIN_IMAGE
Image-mode installer inputs downloaded automatically:
docker-compose.images.yml.env.exampleconfig/mods.listruntime/admin_control/modinfo.luaruntime/admin_control/modmain.luaruntime/admin_control/README.mdruntime/admin_control/state.jsoninitialized locally when missing
The local build compose uses fixed image tags:
qg-dst-server-dst:latestqg-dst-server-admin:latest
This keeps docker images easier to read across reinstall cycles.
By default, game files and world data are stored under the install directory (bind mounts), not Docker named volumes:
runtime/dst-install->/opt/dst/serverruntime/dst-data->/data
This applies to both Linux and Windows installs.
If the admin login is still using the default password, the UI sends you to the settings page right away.
You can also change the admin password later from the web UI without restarting.
Server startup now uses this order:
- Render mod config from
mods.list - Check whether each configured mod is already installed on disk
- Run HTTP legacy fallback download/install only for missing mods
- Enforce
DST_FAIL_ON_MISSING_MODSpolicy - Launch shards
Default launch includes -skip_update_server_mods (DST_SKIP_UPDATE_SERVER_MODS_ON_LAUNCH=true) so shard startup does not block on runtime workshop update.
If fallback download fails, the default HTTP retry count is 2 (DST_LEGACY_RETRIES=2).
Double-click scripts\uninstall-qg-dst.cmd and choose what to remove.
The default install directory follows the launcher location:
- From this repository's
scriptsfolder:%USERPROFILE%\qg-dst-serverformain, or%USERPROFILE%\qg-dst-<instance>for other instances - From a deployed instance's
scriptsfolder: that instance folder - Otherwise: the current folder plus
qg-dst-serverorqg-dst-<instance>
The uninstall launcher will ask:
- Which install directory to target
- Remove the containers too?
- Remove the deployed install directory too?
- Remove data directories (runtime) and legacy named volumes too?
- Remove images too?
The uninstall launcher refuses to target the repository source tree. The install directory is the deployed instance folder created by the installer, not your source checkout.
To clean everything, answer Y to containers, install directory, volumes, and images.
If you keep the containers, install directory, volume, and image cleanup will be skipped. If you remove images, the script will skip any image that is still used by another container.
You can run multiple separate DST servers on the same machine by giving each instance its own install folder and unique runtime values.
InstallDirInstanceQG_DST_CONTAINER_NAMEQG_ADMIN_CONTAINER_NAMEADMIN_WEB_PORTDST_CLUSTER_DIR- Server port groups used by the cluster config
By default, the installer auto-assigns a unique full port group (ADMIN_WEB_PORT + DST game/shard/auth/query ports) for new instances, so users can usually press Enter all the way through.
- The repository source files
- The default admin login
- The install method
Create one install folder per instance and launch each one with a different instance name. The installer now auto-selects the folder from Instance, so you usually do not need -InstallDir:
powershell -NoProfile -ExecutionPolicy Bypass -File scripts\install-qg-dst.ps1 -Instance main -AdminPort 8080powershell -NoProfile -ExecutionPolicy Bypass -File scripts\install-qg-dst.ps1 -Instance test -AdminPort 8081If you use the Windows cmd launcher, it will prompt for the same values interactively, so you can just double-click and fill in the answers.
- Main server:
Instance=mainInstallDiris auto-selected as%USERPROFILE%\qg-dst-serveron Windows or~/qg-dst-serveron LinuxADMIN_WEB_PORT=8080DST_CLUSTER_DIR=QG_Cluster_mainQG_DST_CONTAINER_NAME=qg-main-dst-serverQG_ADMIN_CONTAINER_NAME=qg-main-dst-admin
- Test server:
Instance=testInstallDiris auto-selected as%USERPROFILE%\qg-dst-teston Windows or~/qg-dst-teston LinuxADMIN_WEB_PORT=8081DST_CLUSTER_DIR=QG_Cluster_testQG_DST_CONTAINER_NAME=qg-test-dst-serverQG_ADMIN_CONTAINER_NAME=qg-test-dst-admin
The installer does not remove Docker volumes during a reinstall by default, so world data is usually kept unless you explicitly remove volumes. If you want a truly fresh world, remove volumes during uninstall or create a brand-new instance folder and volume set.
- Linux installer
- Windows installer
- Windows CMD launcher
- Windows shortcut creator
- Windows uninstall script
- Windows uninstall launcher
This project is licensed under GNU AGPLv3 or later. See LICENSE.



