How To Self Host Dockerized Pavlov VR PC Server

My buddies and I have been planning a VR night where we will be playing Pavlov VR, which is a first person shooter. Looking forward to the event, I’ve spent the time setting up our own person server running on my Unraid home server, so that we can pick the maps and game types that we’ll play. Since it took a few days, I figured I’d document the process so others could leverage what I’ve learned.

We’re going to be leveraging the Docker image ich777/steamcmd:pavlovvr, which is a tag of the wonderful ich777/steamcmd series, which the author has setup and optimized for Unraid.

If you’re doing this outside of Unraid, it should still work, but the remaining steps will primarily assume you’re using Unraid. There’s nothing stopping you from using this image and guide for a non-unraid approach though… Navigate to your Docker tab and find this image and get to the screen where you fill out the template. We’re going to add a few ports and a volume. The ports are so we can get the master game server to discover our server, have access to the admin panel called rcon, and so we have a directory for our community maps to be saved so we don’t inflate our docker.img file.

My template looks like this:

Pavlov VR Unraid Docker Template
Pavlov VR Unraid Docker Template

The important take aways are the three ports defined and the mount path.

At this point the container should be startable, but not reachable by the master game server due to our router. We’ll want to open the following ports on our router and forward them onto our network

  • external port 7777 -> [internal unraid ip]:7777 protocol UDP
  • external port 8177 -> [internal unraid ip]:8177 protocol UDP
  • external port 9100 -> [internal unraid ip]:9100 protocol TCP

Now at this point our server will be accessible, but we haven’t customized it at all. To set the name of our server, maps we’ll play, number of players we’ll support will all be done by the file /serverdata/serverfiles/Pavlov/Saved/Config/LinuxServer/Game.ini. Additionally, we’ll create a file at /serverdata/serverfiles/Pavlov/Saved/Config/RconSettings.txt to select a port to allow rcon to run on.

Lets remote into the container. Run these commands on your unraid machine.

  1. find the container id: $ docker ps | grep pav and record the output
  2. start a bash shell in the pavlov container: $ docker exec -it [container id] /bin/bash
  3. Install convenient tools: $ apt-get update -y && apt-get install vim zsh tmux tree less -y
  4. Modify Game.ini: $ vim /serverdata/serverfiles/Pavlov/Saved/Config/LinuxServer/Game.ini (content to put in this file is below)
  5. Modify $ /serverdata/serverfiles/Pavlov/Saved/Config/RconSettings.txt (content to put in this file is below)

Example Game.ini

[/Script/Pavlov.DedicatedServer]
bEnabled=true
ServerName=[replace this with your server name]
MaxPlayers=25
bSecured=true
; NukeTown 2025
MapRotation=(MapId="UGC1758245796", GameMode="GUN")
; Rust
MapRotation=(MapId="UGC1739104662", GameMode="GUN")
; Mcdonalds
MapRotation=(MapId="UGC1984149656", GameMode="GUN")
; Dunder Mifflin
MapRotation=(MapId="UGC1411741987", GameMode="GUN")
; Bank
MapRotation=(MapId="UGC1702603140", GameMode="GUN")
; Hang Em High
MapRotation=(MapId="UGC1273954876", GameMode="GUN")
; Bloodgulch
MapRotation=(MapId="UGC2506544217", GameMode="GUN")
; Bam Storm
MapRotation=(MapId="UGC1261416496", GameMode="GUN")
; Tarkov Factory
MapRotation=(MapId="UGC2516632781", GameMode="GUN")
; Bastogne
MapRotation=(MapId="UGC1772010752", GameMode="GUN")
; Office HQ
MapRotation=(MapId="UGC1080743206", GameMode="GUN")
; Dust II
MapRotation=(MapId="UGC1664873782", GameMode="GUN")
; Halo 2: Zanzibar
MapRotation=(MapId="UGC2115917746", GameMode="GUN")
; KillHouse
MapRotation=(MapId="UGC1745146933", GameMode="GUN")
; ttt_town
MapRotation=(MapId="UGC1773275497", GameMode="TTT")
; ttt minecraft TTT
MapRotation=(MapId="UGC1820450414", GameMode="TTT")
; new MC city TTT
MapRotation=(MapId="UGC1729478375", GameMode="TTT")
; Village TTT
MapRotation=(MapId="UGC1092908074", GameMode="TTT")
; TTT New Town
MapRotation=(MapId="UGC2104243503", GameMode="TTT")
; Dolls TTT
MapRotation=(MapId="UGC1678374482", GameMode="TTT")
; TTT Yahct
MapRotation=(MapId="UGC1907445387", GameMode="TTT")
; TTT Old West
MapRotation=(MapId="UGC2267134313", GameMode="TTT")
; New Villaeg TTT
MapRotation=(MapId="UGC1816316893", GameMode="TTT")
; Forest Night
MapRotation=(MapId="UGC1161533058", GameMode="ZWV")
; Halo Zombies
MapRotation=(MapId="UGC2432298572", GameMode="ZWV")

Example RconSettings.txt

Password=[replace this with a password]
Port=9100

At this point, you should be able to join your server with your customized maps in game. Additionally, you should be able to access an admin panel by finding your server on pavlov horde. Be sure to have the PC servers tab selected.

A shout out to the wonderful people that helped me debug this setup:

  • ich777, on the unraid forums
  • invicta_nz, on the Pavlov VR discord
  • MessiahPenguin, on the Pavlov VR discord