This tool aims to simplify the process of setting up a DayZ Standalone Server on a Windows Server.
The goal was to break down the initial effort to a minimum while providing configuration to nearly all aspects of the server administration process.
Also supports linux server (See Linux Server Usage)
- Features
- Requirements
- Usage
- Updating
- Configuration
- Linux Server
- Steam CMD
- TODOs
- Default folder layout
- Technical details
- Security
- Known Issues and Limitations
- Development
- Disclaimer
- Automatically downloads and installs SteamCMD
- Automatically downloads and installs DayZServer
- Experimental Server can be installed too!
- Automatically downloads and links configured Steam workshop mods
- Automatically updates server and mods
- Ability to add custom non-workshop and server mods
- Set commandline params
- Starts and observes your server
- Restarts the server in case of crashes
- Detects VCRedist and DirectX installation and shows instructions on how to install it if absent
- Detect enabled WindowsErrorReporting and show instructions to disable it (avoids server from getting stuck with error popup)
- Shows the correct firewall configuration
- just one command to be executed as admin/elevated user
- Simple role-based user system (admin, manager, moderator, viewer)
- define who is able to do certain things
- Discord gamer tags can be used
- RCon integration
- scans active players and bans
- Discord bot (Requires Discord Bot Token)
- Fetch server/system status
- Fetch active players
- Show active bans
- kick/ban players
- Send/Receive global messages
- REST API
- Secured by basic auth
- Fetch various infos, metrics
- Execute RCon commands and other actions
- everything you can do with the Web UI
- Event Scheduler
- CRON-Like event schedule
- execute:
- global messages
- kicks
- server restarts
- Hooks (WIP)
- beforeStart Hook - run custom programs scripts to prepare server starts or whatever
- more hooks planned
- Backups
- scheduled via events
- Implicit multi server support
- The manager looks for the server config where (PWD/CWD) it is executed
- To support multiple instances, copy the config to different folders and adapt the configuration (Server port etc.)
- Web UI
- Secured by basic auth
- Manage your server remotely, even on your phone
- No need to use RDP for common tasks
- Displays various metrics (player count, CPU/RAM usage)
- Read Server Logs (RPT, ADM, Script Log)
- Shows player and vehicle position on a map
- allows you to edit your types.xml in the browser
- A Windows or linux (Root) Server with RDP/Shell access
- hosted instances (like nitrado) cannot use this EXCEPT they can run arbitrary programs
- To download mods: A steam account that owns DayZ and has SteamGuard set to EMAIL or DEACTIVATED!
- That's it!
- Download the latest version of the manager
- Extract the manager in the directory where you want your serverfiles to be
- Start the manager once to create a new config with default values
- Edit the
server-manager.json
config to fit your needs- Fill the required fields (everything is described in the file)
!IMPORTANT! Change the admin and rcon password
- Other than that the defaults will probably fit your needs
- You can also checkout the configuration guides
- Fill the required fields (everything is described in the file)
- Start the manager and it will use the updated config
* It is recommended to create a separate Steam account which owns DayZ. You need to set SteamGuard to EMAIL or DEACTIVATED! Do not use Mobile authenticator because those codes will not be saved on the server and need to be entered on every download/update.
* Optionally you can add it as Windows/Linux Service instead of launching it manually
* Make sure the "Execution Location" is the folder, where the config is located (this is not necessarily the folder where the manager executable is located)
This app was written with backwards compatibility in mind.
Sometimes, however, some breaking changes to the server manager config will occur.
The best strategy to update, is to take the config template of the new version and modify it to match your old values.
This way you can not miss out on new properties which might be required.
The configuration of the manager is all done in a single config file.
When installing the manager the first time, you will find a configuration template which needs to be renamed to server-manager.json
.
You can then go ahead and change the settings inside of this file.
If you do not need anything special (you would probably know by now), then the default values will work out well.
You can also configure serverDZ.cfg manually, but you will have to set the serverCfg to null
:
{
...
"serverCfg": null
...
}
Otherwise it will be overriden by the settings inside the server-manager.json
.
Some important values you probably want to change:
instanceId | some unique name of this server instance |
admins | the admins / moderators who can access the web ui and the discord commands |
discordBotToken | the token the server manager will use to send messages to your discord server |
discordChannels | the channels of your discord server to send messages to (make sure the bot has access to them) |
rconPassword | the server's rcon password !IMPORTANT! change this or others might be able to take control over your server |
localMods | list of manually install mods which are not auto updated via steam cmd |
steamUsername / steamPassword | the credentials to use to download the server files and workshop mods |
steamWsMods | the steam workshop mods to download |
events | scheduled events for stuff like server restarts, global messages and so on |
serverCfg.hostname | the name of the server in the server browser |
serverCfg.password | the password of the game server |
serverCfg.passwordAdmin | the admin password of the game server !IMPORTANT! change this or others might be able to take control over your server |
Below you will find a list of guides on how to edit these values.
For later compatibility between multiple installations and identification of different configs a instance id was introduced (currently it is not used)
Set this to some id you like :)
Example:
"instanceId": "main-server"
To add/remove admins or moderators, edit the admins list in the config.
Read the description in the template to find out more about the roles.
The example snippet shows how to add an admin, a manager and a moderator.
...
"admins": [
{
"userId": "FunkyDude",
"userLevel": "admin",
"password": "admin"
},
{
"userId": "the-discord-dude",
"userLevel": "manage",
"password": "somecoolpassword"
},
{
"userId": "InternDude",
"userLevel": "moderate",
"password": "somoderatormuchwow"
}
],
...
To obtain a discord bot token, follow the steps at: https://www.writebots.com/discord-bot-token/#Generating_Your_Token_Step-by-Step
In a nutshell:
- login to the discord dev console: https://discordapp.com/developers/applications/
- Click on "New Application"
- Enter a application/bot name
- (Optional) Select an icon and enter a short description for your bot
- In the left menu, select "Bot"
- Click "Add Bot" and confirm
- Scroll down and enable the "MESSAGE CONTENT INTENT" (allows the bot to parse the messages)
- Under "Token" copy the token by clicking on "Copy" or reveal value and copy the text
- paste the token inside the config file like so:
"discordBotToken": "your-token.goes.here",
To add/remove discord channels, edit the discordChannels list in the config.
Read the description in the template to find out more about the channel types.
The following example adds a channel for commands and one for rcon messages
...
"discordChannels": [
{
"channel": "main-server-commands",
"mode": "admin"
},
{
"channel": "main-server-rcon",
"mode": "rcon"
}
],
...
Local mods are mods which you manually install and update. The server manager will only add them to the server startup parameters.
Example:
"localMods": [
"@MyAwesomeMod",
"path/to/my/@OtherAwesomeMod",
],
Workshop mods will be downloaded and updated everytime the server restarts (if not configured otherwise).
The steamWsMods property specifies a list of workshop mods to download.
There are two possible syntaxes:
"steamWsMods": [
"1559212036",
"1565871491"
],
or
"steamWsMods": [
{
"workshopId": "1559212036",
"name": "CF"
},
{
"workshopId": "1565871491",
"name": "BuilderItems"
}
],
Hint: The name of the mod is only there to make the config more readable. You can enter whatever you want.
Hint: You can mix the syntaxes
- Open the
server-manager.json
- find the
serverCfg
entry - within this entry:
- change the
hostname
property to change the server name - change the
password
property to change the server's password - change the
passwordAdmin
property to change the server's admin password
- change the
You might need to host your server on another port, because you want to host multiple servers on the same machine
or whatever the reason might be.
HowTo:
- Open the
server-manager.json
- find the
serverPort
property and change it to the desired port - if you want to run multiple servers
- find the
serverCfg
entry - in the this entry change the
steamQueryPort
property to the value of:serverPort
+ 3
- find the
Events are used to do tasks that are occurring at specific points in time.
Typical examples would be regular server restarts and global messages to promote the server's discord.
The following example shows exactly this.
It is scheduling:
- a restart every 4 hours
- global messages every 15 minutes
The scheduling pattern is the CRON pattern.
There are free websites to generate these peatterns pretty easily:
For more details see the description in the server-manager.json
itself.
Example:
...
"events": [
{
"name": "Restart every 4 hours",
"type": "restart",
"cron": "0 0/4 * * *"
},
{
"name": "Some Message",
"type": "message",
"cron": "0/15 * * * *",
"params": [
"Hello world"
]
}
],
...
Hooks can be used to trigger external scripts or programs on certain events.
This can be useful to so manual configuration or other custom stuff.
Possible hook types are:
- beforeStart - triggered right before server start
- missionChanged - triggered after the mission files were changed (i.e. types editor save)
In the server manager config add a hook object to the hooks array like so:
...
"hooks": [
{
"type": "beforeStart",
"program": "path/to/your/script.bat"
}
],
...
The manager was tested on Ubuntu 22 (latest).
Other up2date debian variants should work as well.
The DayZServer only works on x86 platforms, ARM is NOT supported!
The manager can be run via the binary (recommended) or docker.
The main downside when run with docker:
If the manager crashes or shuts down, your dayz server will also be shut down.
(the commands below might be needed to be run as root/with sudo)
- Install the required libs for dayz and steamcmd
apt-get install libcap-dev lib32gcc-s1 libcurl4 libcurl4-openssl-dev
- Create a user for the server (highly recommended for security reasons)
The user should have the home directory set to where the server files will reside
Replace
/dayz
with the directory you want your server to be in, but make sure its already created
useradd --system -m -d /dayz -s /bin/bash dayz
chown dayz:dayz /dayz
-
Download and extract the latest linux release from the releases page
-
Setup the manager files 4.1. Copy the
dayz-server-manager
binary to your/dayz
directory 4.2. Copy theserver-manager-template.json
to the/dayz
4.3. Rename theserver-manager-template.json
to theserver-manager.json
4.4. Edit theserver-manager.json
with a text editor to fit your needs (Make sure its valid json. Its recommended to use VSCode for editing and set the file type to jsonc / json with comments) -
Switch to the
/dayz
dircd /dayz
-
Make the binary executable and owned by the dayz user
chown dayz:dayz dayz-server-manager chmod +x dayz-server-manager
-
Switch to the dayz user
su dayz
-
Run the manager
./dayz-server-manager
- Create the service file
/etc/systemd/system/dayz-server-manager.service
[Unit] Description=DayZ Server Manager Wants=network-online.target After=syslog.target network.target nss-lookup.target network-online.target [Service] ExecStart=/dayz/dayz-server-manager WorkingDirectory=/dayz/ LimitNOFILE=100000 KillMode=process ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s INT $MAINPID User=dayz Group=users Restart=on-failure RestartSec=5s [Install] WantedBy=multi-user.target
- Daemon realod and enable the service
systemctl daemon-reload service dayz-server-manager enable
- Start the service
service dayz-server-manager start
- Check the service status
service dayz-server-manager status
The manager is also published as a docker image:
ghcr.io/mr-guard/dayz-server-manager:latest
If you run the manager inside docker, the dayz server will also start in the same container.
If you stop the manager, the dayz server will stop as well.
How-To:
-
Create a directory for your server and make sure its accessible
mkdir /dayz chmod 777 /dayz
-
Copy your
server-manager.json
inside that dir -
Copy the
docker-compose.yml
from the repository to that dir. -
Start the server manager:
docker compose up -d
You can run the image without compose, but you will need to figure that out on your own...
The server manager tries to automate every required installation step of the server.
However, the DayZ Server and the DayZ Workshop Mods cannot be installed without an account which owns (only for workshop mods) DayZ (the full game).
In order to login to your account, you have to provide your steam credentials in the configuration file.
This is only needed ONCE, since SteamCMD caches your session. (If the cache is invalidated, you will need to provide it again)
Your password will not be used for anything else. In fact, it is even hidden in the logs.
Still, it is recommended that you create an account which owns only DayZ.
If you are really paranoid about pasting your password somewhere, or you use steam guard:
- You can start the manager once and wait until the login failed.
- At this point you can manually login to the SteamCMD once, so the session gets cached.
- You still need to provide the account name, otherwise a new session will be started.
- Provide self generated/signed certificates for HTTPS
- More script hooks
- Custom discord commands
- Examples and integration scripts for Workbench (for mod Development)
-- server-manager.json
-- DayZServer // contains the server installation
----- profiles // contains the server logs (rpt, ADM, ...) and battleye folder
----- serverDZ.cfg // server name, password, player count, ...
----- .. // other files, workshop mods will also be linked to this folder
-- SteamCMD
----- steamcmd.exe
----- ..
-- Workshop // contains the actual workshop mods
-- STEAM_GUARD_CODE // Optional text file. Containing only your steam guard code. will be deleted after usage. See Known Issues / Limitations for more details.
-- SERVER_LOCK // Optional file. If exists server restarts will be skipped
You can, however, change these paths to fit your needs
The server manager is a self contained NodeJS-App written in TypeScript and packaged with pkg.
You DON'T need to install NodeJS or anything else.
Everything you need is contained in the single executable (exe).
However, due to that the exe is around 90MB in size.
This tool makes use of the windows commandline tools (namely netsh and wmic) or the linux cli tools and procfs to determine installation requirements and the state of the server.
It is recommended NOT to use an elevated user for running it.
The security model of the discord bot is based on the fact that discord gamer tags (name#number) ARE unique.
We do not need to know/check actual account ids.
If a user is able to post messages with a authorized gamer tag,
it means that the user is actually logged in to the authorized account.
The UI and API are secured by basic auth.
This should be "good enough" for this use case.
However, be advised that if the UI or API are served to the (public) internet,
the login info is not encrypted because the manager is served via HTTP.
To protect the UI and API from being intercepted/tampered with,
you should consider using a reverse proxy (such as nginx) with a valid SSL Certificate on the same server
(this might already be the case if you host a website).
This way the traffic is handled securely until terminated at the reverse proxy.
- SteamCMD asks for code every time:
- The integration with SteamCMD requires SteamGuard to be set to email code or deactivated in order for the code to be cached.
- Steam Mobile Authenticator cannot be cached by SteamCMD.
- SteamCMD Timeouts:
- SteamCMD sometimes fails to download large mods (usually > 1GB)
- this depends on your hardware and the network
- steamcmd CANNOT be configured to use a timeout greater than 300 seconds
- the server-manager expects failures like that and retries mod downloads respectively
- SteamCMD Rate-Limit:
- The SteamCMD rate limit might occur if you download many mods at once (i.e. first setup)
- You will see an error that includes status code = 5 or rate limit
- this is nothing bad.. you are not banned.. you just need to wait some time and retry
- the manager already tries to downloads mods in batches to prevent this by default, but sometimes thats not enough
- Apparently the steam cmd reverts changes to the default mission
dayzOffline.ChernarusPlus
when validating the isntallation.. - to prevent this simply add your own mission
- simply copy
dayzOffline.chernarusplus
and rename it todayz.chernarusplus
(or something else) - change the
server-manager.json
-serverCfg
-Missions
-DayZ
-template
todayz.chernarusplus
- simply copy
- Copied mods / More Disk Usage
- By default the manager copies mods to the server directory instead of linking them (can be configured)
- Otherwise the SteamCMD could not update mods while the server is running (disables manual mod updates)
- Mods are only copied if their content has been changed which further improves server startup time
- By default the manager copies mods to the server directory instead of linking them (can be configured)
- Process State:
-
since the dayz server is immediately detached after starting, we cannot determine the processid (PID) of it
-
because of this the manager queries all running processes via wmic and determines the server process by executable path
-
wmic can be a very CPU demanding tool and because of this the check interval should be a bit longer
-
a small sidenote: if server crashes with a popup, it is still detected as running. To prevent this windows error reporting must be disabled
-
- AntiVirus:
- some antiviruses may block certain functions of this app (probably the calls to wmic or netsh)
- this is just a guess and I personally haven't had any issues yet
- This app has been tested but is very complex
- if you have any issues please report them to get them fixed
To work on the server manager, the nodejs runtime (v14) must be installed and the node extensions must be compiled locally.
To do this, you will need a C++ compiler:
Windows:
choco install python python2 -y
choco install visualstudio2019buildtools -y
choco install visualstudio2019-workload-vctools -y
Linux:
apt-get install -y make python3 python2 build-essential
When the tools are installed, clone the repository and run npm ci
.
When everything is installed, you can start the manager by running:
CLI mode:
npm run start
Packed mode:
npm run startPacked
By using the software and/or thw source code you agree that the authors CAN NOT be held responsible for any damages caused by the software and/or the source code.