Hi everyone!
Is it possible to deploy the MultiUser server as a standalone runtime?
Iβd like to rather run it on a dedicated machine than on an artist workstation for better control and backup.
I can answer this, at least for Linux, because I literally did just a few hours ago for our team.
Iβll have longer documentation once Iβve done some additional testing with our group, but here is a summary of the steps:
-
Prerequisites:
- GitHub account linked to UE organization, per the official docs:
Unreal Engine on GitHub - Unreal Engine - Fork and clone the UE source repo as in the official docs:
https://github.com/EpicGames/UnrealEngine (Linux section) - The UE source code is about 12 GB, but the build prep downloads a very large amount of data into the code tree. Have at least 120 GB of space available on the filesystem that contains the local repository.
- In this setup I ran the compilation as root. My situation was a lab environment with a small, trusted team. You may wish to run from a nonprivileged regular user. The Epic build scripts include sudo commands where needed.
- A virtual machine should work fine as long as itβs on a physical host with enough available resources to achieve good network latency. My prior testing with the MUE running on my workstation suggests that this service daemon is highly latency-sensitive but tolerant of moderate bandwidth. In other words, consider your network topology and where to place this server to minimize router hops etc., and give it enough CPU priority versus other guests so it doesnβt wait long for the host CPU.
- You will need to open a UDP port in your firewall(s), including FirewallD on the server itself, if you enable that. Epic uses port 7000/udp by default, but you can change that if you wish.
- GitHub account linked to UE organization, per the official docs:
-
Create a baseline Linux server. Epicβs docs show Ubuntu 20.04, but I used Debian 11.6 (Bullseye) and it works just fine. You do not need a graphical desktop unless you want to run the UE Editor in its entirety on this server.
-
Install the βsudoβ, βgitβ, βgit-lfsβ, and βbuild-essentialβ packages, i.e.,
# apt-get install sudo git git-lfs build-essential
Git LFS support may not be required right now, but it wonβt hurt to have it ready.
-
Follow the instructions in the detailed Epic page for native Linux compilation, except for the βmakeβ step:
https://github.com/EpicGames/UnrealEngine/blob/release/Engine/Build/BatchFiles/Linux/README.md -
Instead of just βmakeβ, which will build all of Unreal Engine, you can reduce the compilation time by specifying a subset target:
# make UnrealMultiUserServer-Linux-Debug
-
I created symlinks to make it easier to find the logs and executables under regular system directories, although my UE build tree is in /usr/local/src/ hierarchy.
The build process worked perfectly for me with the above steps. Since I literally just did this a few hours ago, I have tested that the server starts and stops gracefully and that the logs look normal, but I havenβt yet tested connecting to it from an interactive Unreal Editor client.
DISCLAIMER As Iβve stated above, this is an early, experimental deployment at our organization. The MUE feature is supported by Epic, but the preceding build instructions are a work-in-progress lab installation and not fully tested for production. Use at your own risk.
Here is another document that wasnβt easy to find (at least for me) but which has been helpful in our teamβs learning of this feature:
Thanks for the directions on Linux!
I succeeded to build it on Windows aswell.
Following the basic Visual Studio setup here:
The only difference is in βBuilding With Visual Studioβ
- In Visual Studio, set your solution configuration to "Development Editor " and your solution platform to βWin64β, then right click the UE* (where * is the engine version) target and select βBuildβ.
Instead of right clicking UE* find βUnrealMultiUserServerβ in the solution explorer on the right side. Right click and select βBuildβ.
I tried to figure out the minimal requirements for running the server and got it to run with only these files and folders:
.
βββ Engine
β βββ Binaries
β β βββ Win64
β β βββ UnrealMultiUserServer-Analytics.dll
β β βββ UnrealMultiUserServer-AnalyticsET.dll
β β βββ UnrealMultiUserServer-AppFramework.dll
β β βββ UnrealMultiUserServer-ApplicationCore.dll
β β βββ UnrealMultiUserServer-AssetRegistry.dll
β β βββ UnrealMultiUserServer-AutomationController.dll
β β βββ UnrealMultiUserServer-AutomationMessages.dll
β β βββ UnrealMultiUserServer-AutomationTest.dll
β β βββ UnrealMultiUserServer-AutomationWindow.dll
β β βββ UnrealMultiUserServer-AutomationWorker.dll
β β βββ UnrealMultiUserServer-BuildSettings.dll
β β βββ UnrealMultiUserServer-Cbor.dll
β β βββ UnrealMultiUserServer-ColorManagement.dll
β β βββ UnrealMultiUserServer-CookOnTheFly.dll
β β βββ UnrealMultiUserServer-Core.dll
β β βββ UnrealMultiUserServer-CoreUObject.dll
β β βββ UnrealMultiUserServer-DesktopPlatform.dll
β β βββ UnrealMultiUserServer-EngineMessages.dll
β β βββ UnrealMultiUserServer-HTTP.dll
β β βββ UnrealMultiUserServer-ImageCore.dll
β β βββ UnrealMultiUserServer-ImageWrapper.dll
β β βββ UnrealMultiUserServer-InputCore.dll
β β βββ UnrealMultiUserServer-Json.dll
β β βββ UnrealMultiUserServer-JsonUtilities.dll
β β βββ UnrealMultiUserServer-MessageLog.dll
β β βββ UnrealMultiUserServer-Messaging.dll
β β βββ UnrealMultiUserServer-MessagingCommon.dll
β β βββ UnrealMultiUserServer-NetCommon.dll
β β βββ UnrealMultiUserServer-Networking.dll
β β βββ UnrealMultiUserServer-Projects.dll
β β βββ UnrealMultiUserServer-RHI.dll
β β βββ UnrealMultiUserServer-RenderCore.dll
β β βββ UnrealMultiUserServer-SSL.dll
β β βββ UnrealMultiUserServer-ScreenShotComparisonTools.dll
β β βββ UnrealMultiUserServer-Serialization.dll
β β βββ UnrealMultiUserServer-SessionMessages.dll
β β βββ UnrealMultiUserServer-SessionServices.dll
β β βββ UnrealMultiUserServer-Settings.dll
β β βββ UnrealMultiUserServer-Slate.dll
β β βββ UnrealMultiUserServer-SlateCore.dll
β β βββ UnrealMultiUserServer-SlateReflector.dll
β β βββ UnrealMultiUserServer-Sockets.dll
β β βββ UnrealMultiUserServer-SourceCodeAccess.dll
β β βββ UnrealMultiUserServer-ToolMenus.dll
β β βββ UnrealMultiUserServer-ToolWidgets.dll
β β βββ UnrealMultiUserServer-TraceAnalysis.dll
β β βββ UnrealMultiUserServer-TraceInsights.dll
β β βββ UnrealMultiUserServer-TraceLog.dll
β β βββ UnrealMultiUserServer-TraceServices.dll
β β βββ UnrealMultiUserServer-UnrealEdMessages.dll
β β βββ UnrealMultiUserServer-WorkspaceMenuStructure.dll
β β βββ UnrealMultiUserServer-XmlParser.dll
β β βββ UnrealMultiUserServer.exe
β β βββ UnrealMultiUserServer.modules
β β βββ UnrealMultiUserServer.target
β β βββ UnrealMultiUserServer.version
β βββ Content
β β βββ Internationalization
β βββ Plugins
β β βββ Developer
β β β βββ Concert
β β βββ Messaging
β β β βββ UdpMessaging
β β βββ Runtime
β β β βββ Database
β βββ Programs
β βββ UnrealMultiUserServer
I havenβt tested all functionalities!
If you find some errors or more dependencies, please let me know.
Thanks for the update. Iβm glad you got it working.
Our team really loves this feature, and we use it quite a bit.
One important βsafety tipβ: Importing small assets, such as a a single model or a couple of textures, is fine when in MUE mode. The change will propagate across the network. That said, this is NOT the right way to propagate a large import, such as adding a package from the Marketplace.
I did that without thinking a week or so ago β fortunately on an experimental branch of our project! β and the results were extremely bad. The team member who did the import had a UE editor crash as the data was propagating across the MUE server. When we restored, it was a complete mess with some of the import journaled on the MUE server, some not.
We recovered by reverting the branch to a previous changeset in SCM, and deleting that MUE session from the server and creating a fresh one.
I donβt blame Unreal for this β if I hadnβt been in a hurry, I knew better than to suggest she import this during MUE mode.
The CORRECT way to do this would be for one person to do the import and push the changeset to source control, outside of MUE, and then have other team members update their workspaces to that changeset before everyone goes into MUE.
Yes you are so right! I had to learn the hard way
We are using MUE in combination with a nDisplay cluster. All of the editors and render nodes are started with the Unreal Switchboard. You can also set the change list and MU session name for all clients.
Maybe that would be a way for you as well to manage MUE and SCM changes.