Hello everybody,

after a long research and looking for a forum that has experience with Ultima Online servers, I came across this one. I've never set up a Docker server and don't know how it works. Unfortunately, the installation guides didn't help me, as they are probably aimed at users who know a little more about it.

I have a Synology NAS and was able to load a ServUO image there via the installed Docker. However, it still needs various settings before the server can run and that's where it hangs for me. Does anyone have any experience and happen to have a step-by-step guide handy? I would love to have my own private Ultima Online server running :)

I hope someone can help me.

kind regards
 
I'm one step further. But unfortunately I'm stuck at the point where I run the "dotnet build" command and get the following errors. I don't know how to solve this. Can someone help me with this? At first it looks fine, but then the error messages come.
 

Attachments

  • B136C576-36C8-4A36-82E0-ACB58545F1CB.jpeg
    B136C576-36C8-4A36-82E0-ACB58545F1CB.jpeg
    375.9 KB · Views: 30
  • 62D08727-A03B-4531-8124-63E7845EFB52.jpeg
    62D08727-A03B-4531-8124-63E7845EFB52.jpeg
    1.9 MB · Views: 28
Hello, thank you for your answers. After a longer session, I got the server running to the extent that the error no longer occurs and the server seems to start. It starts a few processes until it finally asks for the Ultima Online directory. What am I specifying here? The server runs on the NAS with a Docker container and the client is installed on a Windows PC (local). How do I set up the connection between client and server would then be the next construction site.
 

Attachments

  • D50E7E99-8989-40BF-B5CF-D0676BFE2CEC.jpeg
    D50E7E99-8989-40BF-B5CF-D0676BFE2CEC.jpeg
    394.2 KB · Views: 15
Can't the official (enhanced) client be used for this? I think that I have to change a corresponding file on the client to tell it that it needs to connect to a different server.
 
So the files it is looking for doesn't have to be a full install of the client, though you can just copy the client over and that would also resolve the issue. The folder you point it to must contain the following files:
1672621595630.png
These would likely need to be copied to a folder on the server computer, or docker container, I wouldn't recommend pointing it to your computer as the server needs to lock those files and can cause issues if your using the client and the server is trying to access the same files also you'd probably have to map a network drive which wouldn't be a good solution.
 
Hey, thanks for the feedback. Do I understand correctly that I should also copy the client files to the server? Should they be copied into a separate folder in the main server directory or directly?

Will I still start the game locally from the PC?

Sorry for all these newbie questions
 
Hey, thanks for the feedback. Do I understand correctly that I should also copy the client files to the server? Should they be copied into a separate folder in the main server directory or directly?

Will I still start the game locally from the PC?

Sorry for all these newbie questions
Hello, these files are used by server mainly to get info about the map. For example, to calculate movement, resources (ore, logs), etc.

You need to point the ServUO to the files location. In general, it doesn't matter where they are saved. But usually, they are saved on the same machine as the server is running.

I would copy the files in a separate directory on the server. Then I would save the path in ServUO configuration. You can always run the game locally. It should work as long, as you have same map files on both sides.
 
OK, thanks for the explanation. This helps me to understand the whole thing better. I'll test that later right away.

When I get it fully up and running I'll make a guide for dummies (like me ;) ).
 
Today I tried to integrate the game directory. I created a subdirectory around the server folder and put the files there. Where can I tell the server now that it can/should retrieve the data there?
 

Attachments

  • Screenshot 2023-01-03 035047.png
    Screenshot 2023-01-03 035047.png
    129.2 KB · Views: 7
In your config folder you should see DataPath.cfg, add the path to that.
For example on Windows I use:
C#:
# Uncomment this line and set it to the path of the client files to set a
# custom data path. Otherwise ServUO will look for the client in the default
# Windows installation directories. Note that this is *required* when running
# on non-Windows systems.
CustomPath=C:\Users\Jonathan\Desktop\Test Server\Data Files
 
I entered the path into the DataPatch file (hopefully spelled correctly). It still asks for a path when starting the server, is this normal? If I manually enter the path there again, it loads 0 items/files. I feel like I'm too stupid for this ;(
 

Attachments

  • Directory_2.PNG
    Directory_2.PNG
    37.5 KB · Views: 9
  • Directory.PNG
    Directory.PNG
    164.3 KB · Views: 11
Did you remove the # from in front of your custom path line?

Also correct it will start with 0 items because you haven't created your world yet.
 
Oh man, that was the solution. Thank you.

Do I also have to edit a file on the client in which I enter an IP address to which the client should connect? Does external access also work via DynDNS? The public IP address usually changes as far as I know.
 
Do you use a 3rd party program to connect? Razor, ClassicUO, UO Steam, etc? If so you just need to know your internal IP usually a 192.168 address and enter that to connect. If you want to connect externally using your IP you would need to set up port forwarding on your router and if your IP is not static yes something like DynDNS would be needed.
 
I intended to use the official Enhanced Client, is that possible? Where can I specify which IP address the client should use to connect? Is there also a Config or DataPath file?
 
The reason why you need to specify an IP address for ServUO is that the Login server and Shard server are actually separated (even if they have same IP and port). Simply said:

1. Client connects to the IP and Port in Login.conf.
2. Login server respond with IP and Port for the Shard.
3. Client connects to the responded Shard IP and Port.

If you don't specify the Shard IP and Port in ServUO, the client is unable to connect in the third step.

To make it harder, NAT comes in the play:

1. You need to know the public IP of the server (which is in 90% cases different than the internal IP, where the server is listening).
2. You need to have port forwarding (so that internal IP is reachable by public ip).
3. Also the public IP can be dynamic (to make it even more complicated).

Setting the correct DNS is probably the best solution. ServUO should translate the domain name to IP every time in step 2.

You can set the Shard IP and port in Server.cfg.
 
Hello and sorry for the late reply. I made the changes to the server config and entered the IP addresses. The Docker has the special feature that the Docker internal IP and the host IP must be entered. I think I found the internal Docker IP correctly. However, I noticed two things. Once a message after the account creation and that the client does not connect. I can't find a Login.conf in the client directory.
 

Attachments

  • Account Create.PNG
    Account Create.PNG
    177.2 KB · Views: 24
Hello,

to be able to help, we need to distinguish 3 different IPs:
  1. External (public) IP address.
  2. Internal LAN address of your NAS.
  3. Docker container internal address.
You need 2 port forwarding:
  1. On your ISP router from (1) to (2).
  2. On your Docker from (2) to (3).
I made the changes to the server config and entered the IP addresses.
Are you sure you have entered only an external (public) IP address (1) in the server config?

Once a message after the account creation and that the client does not connect.
Are you connecting (using the client) to the external (public) IP address (1)?

1. If yes, then this is an indication that you have correct port forwarding (both 1 and 2). But you may entered an invalid public IP address (probably 3) in the server config.

2. If no, then you are probably connecting to internal LAN address (2). You may have either wrong port forwarding (1), or invalid IP address (probably 3) in the server config.

3. Maybe you have correct IP and port forwarding, but the problem is elsewhere:
TileData: not found
The attachment shows, that the ServUO is unable to locate map files. You have probably wrong client data path.

I can't find a Login.conf in the client directory.
If you are using Razor, it doesn't matter. You can specify the IP directly in Razor.
 
The Port 2593 is forwarded in the router and nas.

external IP: i will use an DynDNS Adress, if possible
internal IP: easy to locate and it is static
docker IP: not sure how to find out which is the docker using. Should be something like 127.0.0.x.

In order to test the server first if it works, I first stored the local IP 192.168.x.x in the config.

I think I copied all the files into the server folder. In the server folder there is a "Gamefiles" folder, in which I copied the local game files and saved the path in the config.

For the locally launched client I wanted to use the official Ultima Online Enhanced Client.
 
external IP: i will use an DynDNS Adress, if possible
Should be possible.

internal IP: easy to locate and it is static
Ok, I guess that this is your local IP 192.168.x.x

docker IP: not sure how to find out which is the docker using. Should be something like 127.0.0.x.
127.0.0.x is intended for loopback. I would guess 172.16.0.0/12 block.

In order to test the server first if it works, I first stored the local IP 192.168.x.x in the config.
Ok, then please use Razor with this address. It should work.

I think I copied all the files into the server folder.
What files have you copied? You need to copy Classic Client files here.

(As far as I know, ServUO cannot process Enhanced Client files. Although you can connect with Enhanced Client.)
 
To better track what I did, I briefly summarized the steps:

I downloaded the docker hub container (davelens). On the NAS I created a folder called "servuo" and in this folder a subfolder called "gamefiles". I copied the (master) files from this page into the main folder:


I copied the Ultima Online Classic files from the official client into the game file folder. Then I enabled/forwarded port 2593 in the router and in the NAS.

Then I started the Docker container and executed the following commands in the terminal:

1.) dotnet build
2.) mono /servuo/ServUO.exe

After the command in 2.) has been executed, the system has done and created a few things, until it finally asks whether I want to create an account (because no account exists yet). If I assign an account name and password, I will then receive the messages in Post #20. An account was created, but with the following messages. I'm not 100% sure yet if the server is 100% up, but I seem to be getting close.

If I currently try to log in with the client in the login screen, then I get the message that the connection was lost.
 
Last edited:
Have you mounted the folder into the docker container?
Bash:
docker run -v /host/path:/container/path ...

To clarify my question, docker isolates container storage. You can add files to it using:
  1. Dockerfile COPY command
  2. docker run -v parameter
First variant requires you to rebuild the Docker image. The second variant is just adding a parameter to docker run command.

The point is, you need to get Client files into the docker container using one of these methods.

Other methods exist, that I don't mention.
 
Last edited:
I mapped the folders here (see picture). Is this possible too?
 

Attachments

  • Volume_Map.PNG
    Volume_Map.PNG
    35.4 KB · Views: 12
ServUO is looking for a file named "tiledata.mul".

Please check, if it is in your gamefiles directory.

Edit: I'm not sure about that, but File.Exists in Linux could possibly be case sensitive.
 
Last edited:
The file exists in the Gamefiles folder. Is he looking for another Server.tiledata?
 

Attachments

  • 448083AA-CEF0-4382-A253-F6ECFA56E4FA.jpeg
    448083AA-CEF0-4382-A253-F6ECFA56E4FA.jpeg
    592.5 KB · Views: 6
I want to use the Enhanced Client and have downloaded the installer. I ran the installer and then started the UOPatcher. Then followed a longer download and installation session. After that was all done, I copied the files into the Gamefiles subfolder of the servuo folder.
 
You need the 2D Client files in the server for it to work, it will not recognize the Enhanced files, you can still connect with the Enhanced client later but you do have to use the 2D files for the server.
 
After post #23 I have already replaced and tested the enhanced client files in the server game file folder. The same result.
 
Hmm interesting.. I don't think it would be looking for "TileData" but you could try that, Linux is case sensitive.. that's my last guess on this.. I'll do some more digging but I can't think of what else could be causing this.
 
Often I have a problem with permissions in Docker. ServUO is running with some user account in the docker container. This user account should also own the files in the Gamefiles directory. Otherwise it won't be able to handle them.
 
Hello and sorry for my late reply. The servuo folder and the subfolder Gamefile folder it contains is inside the docker directory. I think docker should access it with no problems. Am I perhaps using the wrong files for the server and the client?
 
It's hard to say, where is the problem, but we know for sure (from the printscreen) that:

ServUO is unable to locate tiledata.mul file.

There are possible reasons:
  1. ServUO don't have permissions to access this file.
  2. You have wrong path in DataPath.cfg
  3. The file is not there.
Please run a following command inside the docker container:

Code:
ls -l "put here the path from DataPath.cfg"

Please upload output from this command and printscreen of your DataPath.cfg.
 
In your previous posts, we can see that you mounted the gamefiles directory in "/gamefiles" path.

Why you have "/servuo/config" path in DataPath.cfg? I think you should have "/gamefiles" here.
 
Back