VPS Tutorials
Set Up a V Rising Dedicated Server on a VPS (2026): 1.1, Wine, SteamCMD, Ports, Backups and Updates
V Rising 1.1 currently only offers a Windows dedicated server. This guide shows you how to download the Windows depot with SteamCMD on an Ubuntu 24.04 VPS, run it with Wine, configure ports, systemd, admins, backups, restore and updates, and troubleshoot connection failures and version mismatches.

If you want to play V Rising with friends long-term, the host opening a "private game" usually only solves tonight's problem: when the host goes offline, the world stops too; after a version update, whoever upgrades first may be temporarily locked out. Putting a dedicated server on a VPS keeps the world running continuously, and lets you manage admins, saves, update windows and backups separately.
This article uses Ubuntu 24.04 LTS, SteamCMD, Wine and systemd as an example to deploy the current PC 1.1.x dedicated server. Let's state the limitation up front: Stunlock Studios' official dedicated server documentation explicitly says that currently only a Windows server is available. So the Linux approach below relies on the Wine compatibility layer and is not an official native Linux release. If you want the least hassle, choose a Windows VPS or a game hosting panel; if you want to control costs, backups and operational details, use the approach in this article.
As of August 2026, the official repository lists the current PC version as 1.1.x, and the default branch is the current server. SteamCMD downloads the dedicated server using App ID 1829350, while the running game uses the game client's App ID; do not mix the two in update commands.
The official 1.1.x documentation currently gives these port examples:
| Port | Protocol | Purpose | Open to the public internet |
|---|---|---|---|
| 27015 | UDP | Game traffic Port | Yes |
| 27016 | UDP | Steam list queries QueryPort | Open if you want to appear in the list |
| 25575 | TCP | RCON | Not opened directly, disabled by default |
Many older tutorials still use 9876/9877. The ports themselves can be changed, but ServerHostSettings.json, UFW and the cloud provider's security group must all stay consistent. This article uses the official current example 27015/27016 UDP throughout.
The V Rising server is not forgiving on single-core performance or memory, and Wine adds another layer of resource usage. Below are safer starting values when buying a VPS, not official performance guarantees:
| Scenario | Suggested starting point | Disk | Notes |
|---|---|---|---|
| 2–4 players vanilla PvE | 4 high-performance vCPUs, 8GB RAM | 50GB NVMe | Suitable for a fixed small group |
| 5–10 players long-term world | 4–6 high-performance vCPUs, 12–16GB RAM | 80GB NVMe | Leaves headroom for Wine, saves and backups |
| 10+ players or high-rate PvP | 6–8 high-performance cores, 16GB+ RAM | 100GB+ NVMe | Stress test before deciding the player cap |
Don't just look at the "8 cores" label. Game servers are more sensitive to poor single-core performance, CPU steal and disk latency jitter. The data center should be as close as possible to the main players; if your friends are all in mainland China, first read VPS specs and network route selection for game servers, then decide whether to buy in the US West Coast, Japan or another region.
| Approach | Pros | Cost | Who it suits |
|---|---|---|---|
| Windows VPS | Matches the official server environment | Licensing and memory costs are usually higher | Those who don't want to deal with Wine compatibility |
| Ubuntu + Wine | Controllable system overhead, transparent scripts and backups | Must verify Wine compatibility after game updates | Single-server admins familiar with SSH |
| Pterodactyl | Web panel, multiple instances, convenient permissions and quotas | Still need to maintain Panel, Wings and Eggs | Multiple games, multiple admins |
If the same machine will also run Minecraft, Rust or Valheim, you can refer directly to Pterodactyl game server panel deployment. If you only run one V Rising server, SteamCMD + systemd makes it easier to see logs, configuration and save locations.
First update the system and install the components needed by SteamCMD and the Wine runtime:
sudo apt update
sudo apt upgrade -y
sudo apt install -y curl ca-certificates tar lib32gcc-s1 lib32stdc++6 \
wine xvfb ufw jq
command -v wine
wine --version
Create a service account that cannot log in directly with a password, and a fixed directory:
sudo adduser --system --group --home /home/vrising --shell /bin/bash vrising
sudo install -d -o vrising -g vrising /opt/steamcmd
sudo install -d -o vrising -g vrising /opt/vrising-server
sudo install -d -o vrising -g vrising /srv/vrising/wine
sudo install -d -o vrising -g vrising /srv/vrising/persistent/Settings
sudo install -d -o vrising -g vrising /srv/vrising/persistent/logs
sudo install -d -m 750 -o root -g vrising /var/backups/vrising
Do not run the game as root. A dedicated user prevents the Wine prefix, server files and saves from being taken over by root, and also narrows the privilege scope if the service is exploited.
Initialize a dedicated Wine prefix:
sudo -u vrising env WINEPREFIX=/srv/vrising/wine \
xvfb-run -a wineboot -u
xvfb-run provides a virtual display environment, avoiding the Wine error of being unable to connect to a display on a headless VPS. Wine's first initialization is slower than daily startups, so wait for the command to exit before continuing.
Switch to the service account and download Valve's Linux version of SteamCMD:
sudo -iu vrising
cd /opt/steamcmd
curl -fsSL https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz \
-o steamcmd_linux.tar.gz
tar -xzf steamcmd_linux.tar.gz
./steamcmd.sh +quit
SteamCMD itself uses the Linux version; only when actually downloading the server do you force the Windows platform. This way you don't need to run a separate Windows SteamCMD inside Wine.
Run the following command:
/opt/steamcmd/steamcmd.sh \
+@sSteamCmdForcePlatformType windows \
+force_install_dir /opt/vrising-server \
+login anonymous \
+app_update 1829350 validate \
+quit
After installation, check the key files and build record:
test -f /opt/vrising-server/VRisingServer.exe
grep -n 'buildid' /opt/vrising-server/steamapps/appmanifest_1829350.acf
du -sh /opt/vrising-server
exit
If app_update reports that the platform is not supported, first confirm that @sSteamCmdForcePlatformType windows is placed before the login and update commands. Do not switch to an integration pack of unknown origin, and do not copy an old installation directory from someone else's server.
The official recommendation is not to modify the default configuration in the installation directory directly, because SteamCMD updates may overwrite it. Put the custom file in the directory specified by -persistentDataPath:
sudo -u vrising nano /srv/vrising/persistent/Settings/ServerHostSettings.json
First write an easy-to-verify PvE configuration:
{
"Name": "My V Rising 1.1 Server",
"Description": "Private PvE server on VPS",
"Port": 27015,
"QueryPort": 27016,
"MaxConnectedUsers": 10,
"MaxConnectedAdmins": 2,
"ServerFps": 30,
"LowerFPSWhenEmpty": true,
"LowerFPSWhenEmptyValue": 5,
"Password": "REPLACE_WITH_A_LONG_PLAYER_PASSWORD",
"Secure": true,
"ListOnEOS": true,
"ListOnSteam": true,
"GameSettingsPreset": "StandardPvE",
"GameDifficultyPreset": "Difficulty_Normal",
"SaveName": "world1",
"AutoSaveCount": 50,
"AutoSaveInterval": 120,
"ResetDaysInterval": 0,
"Rcon": {
"Enabled": false,
"Port": 25575,
"BindAddress": "127.0.0.1"
}
}
Validate the JSON first, then start the service:
jq empty /srv/vrising/persistent/Settings/ServerHostSettings.json
sudo chown vrising:vrising /srv/vrising/persistent/Settings/ServerHostSettings.json
sudo chmod 640 /srv/vrising/persistent/Settings/ServerHostSettings.json
Do not reuse the player password for SSH, the panel or RCON. You can generate one with openssl rand -base64 24. Public servers should keep Secure: true; even if you only play with fixed friends, setting a player password is recommended.
ServerGameSettings.json controls resource multipliers, day/night length, castle limits, PvP and difficulty. For a new server, first get it running with the StandardPvE or StandardPvP preset, and don't paste a complete JSON from two years ago right away.
When you need fine-tuning, copy the default file from the current installation package to the persistent directory:
sudo -u vrising cp \
/opt/vrising-server/VRisingServer_Data/StreamingAssets/Settings/ServerGameSettings.json \
/srv/vrising/persistent/Settings/ServerGameSettings.json
sudo -u vrising nano /srv/vrising/persistent/Settings/ServerGameSettings.json
jq empty /srv/vrising/persistent/Settings/ServerGameSettings.json
Change only a few fields at a time, and check the logs after starting. If you want to use fully custom game rules, confirm that GameSettingsPreset will not overwrite it; especially when migrating old saves, do not mix new presets with old world configurations.
Run it once in the foreground first; missing Wine libraries, JSON errors and save path issues will all show up directly:
sudo -u vrising env \
WINEPREFIX=/srv/vrising/wine \
WINEDEBUG=-all \
xvfb-run -a wine /opt/vrising-server/VRisingServer.exe \
-persistentDataPath 'Z:\srv\vrising\persistent' \
-logFile 'Z:\srv\vrising\persistent\logs\VRisingServer.log'
The first world creation may take several minutes. Open another SSH window to observe the logs and ports:
tail -f /srv/vrising/persistent/logs/VRisingServer.log
sudo ss -lunp | grep -E ':27015|:27016'
After you see the server successfully connect to the platform, the world finish loading and the ports listening, stop it normally with Ctrl+C. Confirm the data has appeared:
sudo -u vrising find /srv/vrising/persistent -maxdepth 4 -type f | sort | head -n 120
sudo du -sh /srv/vrising/persistent
If Wine exits immediately after starting, first remove WINEDEBUG=-all and run it again; don't just stare at systemd's brief status.
Create the service unit:
sudo nano /etc/systemd/system/vrising.service
Write:
[Unit]
Description=V Rising Dedicated Server via Wine
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=vrising
Group=vrising
WorkingDirectory=/opt/vrising-server
Environment=WINEPREFIX=/srv/vrising/wine
Environment=WINEDEBUG=-all
ExecStart=/usr/bin/xvfb-run -a /usr/bin/wine /opt/vrising-server/VRisingServer.exe -persistentDataPath Z:\\srv\\vrising\\persistent -logFile Z:\\srv\\vrising\\persistent\\logs\\VRisingServer.log
Restart=on-failure
RestartSec=20
KillSignal=SIGINT
TimeoutStopSec=180
LimitNOFILE=65535
NoNewPrivileges=true
PrivateTmp=true
[Install]
WantedBy=multi-user.target
Load and start:
sudo systemctl daemon-reload
sudo systemctl enable --now vrising
sudo systemctl status vrising --no-pager
sudo journalctl -u vrising -n 200 --no-pager
tail -n 200 /srv/vrising/persistent/logs/VRisingServer.log
The official recommendation is to restart the server regularly; in daily operation you can schedule restarts during the maintenance window with the fewest players. If systemd shows active (running) but the logs have not finished loading the world, it still doesn't count as a successful launch.
First allow the current SSH port, then open the game ports:
sudo ufw allow OpenSSH
sudo ufw allow 27015/udp comment 'V Rising game'
sudo ufw allow 27016/udp comment 'V Rising query'
sudo ufw enable
sudo ufw status numbered
The cloud provider's security group must also add the same UDP inbound rules. Only allowing in UFW while forgetting the security group, or writing UDP as TCP by mistake, are common causes of "the service is running but the outside world can't get in". You can check layer by layer with the ports, firewall and security group troubleshooting checklist.
RCON uses TCP. It is disabled by default in this article; if you really need it, set a strong password and keep BindAddress: 127.0.0.1, and access it through an SSH tunnel:
ssh -L 25575:127.0.0.1:25575 your-user@VPS_IP
Do not run ufw allow 25575/tcp to expose RCON to the whole internet.
Write the admins' Steam IDs one per line into the persistent directory:
sudo -u vrising nano /srv/vrising/persistent/Settings/adminlist.txt
No restart is needed after the change. Admins enable the console in the game settings, press ~ to open it, then run:
adminauth
The admin commands currently listed officially include kick, banuser, bancharacter, banned and unban. Ban operations update banlist.txt in the same Settings directory. Do not write nicknames or in-game character names for Steam IDs.
Autosave is not an off-site backup. The official documentation explicitly recommends backing up frequently and backing up saves before patching. The safest approach is to stop the server first so the last disk write finishes, then archive the persistent directory:
sudo systemctl stop vrising
sudo tar -C /srv/vrising -czf \
/var/backups/vrising/vrising-$(date +%F-%H%M%S).tar.gz \
persistent
sudo systemctl start vrising
sudo find /var/backups/vrising -type f -name 'vrising-*.tar.gz' \
-mtime +14 -delete
At minimum, sync the backup to another machine or object storage. If the VPS is accidentally deleted, the /var/backups on the same disk disappears with it.
When restoring, do not overwrite a running world:
sudo systemctl stop vrising
sudo mv /srv/vrising/persistent /srv/vrising/persistent.before-restore
sudo tar -C /srv/vrising -xzf /var/backups/vrising/vrising-YYYY-MM-DD-HHMMSS.tar.gz
sudo chown -R vrising:vrising /srv/vrising/persistent
sudo systemctl start vrising
The persistent version directory for current 1.1.x PC saves is Saves/v4. When migrating from a local private world, copy the entire corresponding world directory and keep the original copy first, then point SaveName to the migrated directory name.
Create an update script:
sudo nano /usr/local/sbin/update-vrising
Write:
#!/usr/bin/env bash
set -euo pipefail
systemctl stop vrising
tar -C /srv/vrising -czf \
/var/backups/vrising/vrising-preupdate-$(date +%F-%H%M%S).tar.gz \
persistent
sudo -u vrising /opt/steamcmd/steamcmd.sh \
+@sSteamCmdForcePlatformType windows \
+force_install_dir /opt/vrising-server \
+login anonymous \
+app_update 1829350 validate \
+quit
systemctl start vrising
systemctl --no-pager --full status vrising
Grant permissions and run it manually:
sudo chmod 750 /usr/local/sbin/update-vrising
sudo /usr/local/sbin/update-vrising
Do not update directly while players are online, and do not judge only by the script's exit code. After updating, confirm the logs finish loading the world and have a client actually join once. Wine is an extra compatibility layer, so after major game version updates you should keep the old server directory and pre-update saves, so you have room to roll back if compatibility issues appear.
Confirm that ListOnEOS or ListOnSteam is enabled, that both 27015 and 27016 are UDP, and that UFW and the cloud security group both allow them. A new server may take a few minutes to appear in the list; when troubleshooting, first test VPS_IP:27015 with the in-game direct connect feature.
First run on the server:
sudo systemctl status vrising --no-pager
sudo ss -lunp | grep -E ':27015|:27016'
sudo ufw status numbered
tail -n 250 /srv/vrising/persistent/logs/VRisingServer.log
If no port is listening, the problem is in the service or configuration; if local listening is normal but the external network times out, focus on the security group, protocol and public IP; if you can see the handshake but it disconnects quickly, then check the client and server versions.
The server and all clients must be on compatible versions. Stop the service, run app_update 1829350 validate again, check the build ID of appmanifest_1829350.acf, and confirm the client is not stuck on an old branch. Do not delete your only save to "fix the version".
First run:
jq empty /srv/vrising/persistent/Settings/ServerHostSettings.json
jq empty /srv/vrising/persistent/Settings/ServerGameSettings.json
sudo journalctl -u vrising -n 250 --no-pager
If the second file has not been created yet, only check the Host configuration. An extra comma in the JSON, full-width Chinese quotation marks, or fields copied wholesale from an old version can all cause startup failure.
First look at the full logs, then run it manually in the foreground. If you see display or Wine prefix permission errors, check whether xvfb-run is installed and whether WINEPREFIX belongs to the vrising user:
sudo chown -R vrising:vrising /srv/vrising/wine /srv/vrising/persistent
sudo systemctl reset-failed vrising
sudo systemctl restart vrising
For general Unit file issues, continue with systemd service startup failure troubleshooting.
- The server comes from SteamCMD App ID
1829350, not a third-party integration pack. - You have explicitly accepted the maintenance cost of "the official release only provides a Windows server, and Linux relies on Wine".
ServerHostSettings.json, UFW and the security group use the same UDP ports.- RCON is disabled by default; when enabled, bind only to localhost and use a separate strong password.
adminlist.txtcontains Steam IDs, one per line.- The backup includes the entire persistent directory, with a copy kept on another machine or object storage.
- Stop the server and back up before updating; after updating, check the logs and actually join the server.
If your group only has 2–4 players, 4 high-performance vCPUs and 8GB RAM can serve as a testing starting point; for a long-term server or as the player count grows, scale up based on Wine process peaks, save growth and actual latency. Get vanilla, default multipliers, ports and backups working first, then add mods or high-multiplier configurations; troubleshooting will save you a lot of time.