Conan Exiles... Is Exiled.
Angry woof woof! Today I'm going to rag on Conan Exiles. This game itself actually isn't too bad. But, I'm not here to talk about playing the game. I'm here to talk about hosting the game.
I started this project to offer friends and others an easy method to host their own game servers. That means I intend to accept a level of responsibility for making the hard parts, easy. That is fine and fair, it all makes sense. But Conan, all I have to say: what the fuck?!
Being provided second-class server software
I've never ran game servers professionally until this project. But I've ran game servers ever since I was 12. I wouldn't call myself an expert, but these lessons helped drive me into my professional career as a Linux Systems Engineer.
Each piece of software I interact with, I've learned I should just expect there to be differences in how you manage them. For example, one piece of software might expect a config file in /etc to be populated to determine how its ran. Another may just expect cli flags be attached.
I also realize not all software can be build for all OSes. Something built for Linux might not have a Windows alternative. And that is okay. But, overall there is a pretty steady constant. Most game servers choose Linux for their server software.
Why Choose Linux?
Linux traditionally is very light weight. Out of the box it generally comes headless (without a GUI) and allows you really run it without a lot of bloat. Sure, you can reduce your bloat on Windows, but Linux seems to have won this place in the market.
Along with running lightweight, I would argue the ecosystem for Linux is better suited for running servers. There are far more tools, and a lot more support for running Linux as a server. Again Windows offers support, but often for a price. What you find online is hit or miss with quality.
But Conan Exiles did NOT choose Linux.
Windows Only Server.
You read that right. A Windows-only server.
Call me a fan-boy, but no thank you. Its like I was setup for failure the second I decided to make Conan my 2nd attempt at a server. Which to be honest, of all the servers I've selected to start with. Conan is the only one I've not ran before. So its not all the Conan Exiles's dev's fault. And while I'm at it, I'll say, if it works for their needs, who am I to call them wrong? But, I still don't like it :P
While I never attempted to run the server on Windows, it looked like there we 2 ways to run the server on Windows.
- Run the server via steam / cli
- Download their server manager [screenshot below]
Take me back to my younger days, I would have loved this and thought it was so cool. But this is so difficult for me to work with when it comes to running a game server in Kubernetes. I was about to give up. But, then I found someone someone has already done the work to get the server working with wine & docker.
This project I thought was a lifesaver! So I loaded it up into Agones.
Actually Running a Conan Exiles Server...Sorta.
apiVersion: "agones.dev/v1"
kind: GameServer
metadata:
generateName: "conan-"
spec:
container: conan
ports:
- name: conan-default
container: conan-gameserver
portPolicy: Static
containerPort: 7777
hostPort: 7003
protocol: TCP
health:
initialDelaySeconds: 60
template:
spec:
spec:
containers:
- name: conan-gameserver
image: alinmear/docker-conanexiles:latest
env:
# Env Vars borrowed from docker-conanexiles readme
- name: CONANEXILES_ServerSettings_ServerSettings_AdminPassword
value: "ThanksForThisSmartSolution"
- name: CONANEXILES_Engine_OnlineSubSystemSteam_ServerName
value: "My Cool Server"
- name: CONANEXILES_Engine_OnlineSubSystemSteam_ServerPassword
value: "MySecret"
- name: CONANEXILES_INSTANCENAME
value: "exiles0"
- name: CONANEXILES_Game_RconPlugin_RconEnabled
value: "1"
- name: CONANEXILES_Game_RconPlugin_RconPassword
value: "REDACTED"
- name: CONANEXILES_Game_RconPlugin_RconPort
value: "25575"
- name: CONANEXILES_Game_RconPlugin_RconMaxKarma
value: "60"
- name: CONANEXILES_MODS
value: "880454836,1159180273,1389908968,1369743238,2050780234,2356146223,1701136207"
- name: CONANEXILES_Engine_/script/onlinesubsystemutils.ipnetdriver_NetServerMaxTickRate
value: "30" #INSERT A VALUE OF 30 OR HIGHER
- name: CONANEXILES_Engine_/script/onlinesubsystemutils.ipnetdriver_MaxClientRate
value: "600000"
- name: CONANEXILES_Engine_/script/onlinesubsystemutils.ipnetdriver_MaxInternetClientRate
value: "600000"
- name: CONANEXILES_Engine_SystemSettings_dw.NetClientFloatsDuringNavWalking
value: "0"
- name: CONANEXILES_Engine_/script/conansandbox.systemsettings_dw.EnableAISpawning
value: "1"
- name: CONANEXILES_Engine_/script/conansandbox.systemsettings_dw.EnableInitialAISpawningPass
value: "1"
- name: CONANEXILES_Engine_/script/conansandbox.systemsettings_dw.NPCsTargetBuildings
value: "1"
- name: CONANEXILES_Engine_/script/conansandbox.systemsettings_dw.nav.AvoidNonPawns
value: "1"
... many more env vars
volumeMounts:
- mountPath: /conanexiles
name: conan-game-data
volumes:
- name: conan-game-data
persistentVolumeClaim:
claimName: conan-7003
I could then create the gameserver.
kubectl create -f conan/conan-gameserver.yml
But sadly it failed. Turns out, k8s doesn't like environment variables with special characters like /
and @
in them. Go figure.
Luckily, using the following I got a working server...sorta.
apiVersion: "agones.dev/v1"
kind: GameServer
metadata:
generateName: "conan-"
spec:
container: conan
ports:
- name: conan-default
container: conan-gameserver
portPolicy: Static
containerPort: 7777
hostPort: 7003
protocol: TCP
health:
initialDelaySeconds: 60
template:
spec:
spec:
containers:
- name: conan-gameserver
image: alinmear/docker-conanexiles:latest
env:
# Env Vars borrowed from docker-conanexiles readme
- name: CONANEXILES_ServerSettings_ServerSettings_AdminPassword
value: "ThanksForThisSmartSolution"
- name: CONANEXILES_Engine_OnlineSubSystemSteam_ServerName
value: "My Cool Server"
- name: CONANEXILES_Engine_OnlineSubSystemSteam_ServerPassword
value: "MySecret"
- name: CONANEXILES_INSTANCENAME
value: "exiles0"
- name: CONANEXILES_Game_RconPlugin_RconEnabled
value: "1"
- name: CONANEXILES_Game_RconPlugin_RconPassword
value: "REDACTED"
- name: CONANEXILES_Game_RconPlugin_RconPort
value: "25575"
- name: CONANEXILES_Game_RconPlugin_RconMaxKarma
value: "60"
- name: CONANEXILES_MODS
value: "880454836,1159180273,1389908968,1369743238,2050780234,2356146223,1701136207"
volumeMounts:
- mountPath: /conanexiles
name: conan-game-data
volumes:
- name: conan-game-data
persistentVolumeClaim:
claimName: conan-7003
I say sorta, because I ran into one more problem that eventually just lead me to taking a break from Conan.
Ephemeral Storage. Every time I would spin up the server, my entire node would get evicted due to exceeding the amount of requested ephemeral-storage. My disk space still had enough room, but I couldn't figure out what was causing it.
Overall, I decided I would stop with Conan Exiles. Take a break and work on a server type that I knew how to manage: Factorio. Which I actually got up and running in no time! But that is for another article.
Conclusion
So unfortunately, I don't have a working Conan Exiles server that I can offer. But that is okay, I'm going to try and make progress in other areas. I'll use my time away from working on the Conan server to instead learn more things. That way, when I come back to it, it'll be easy as pie.
Additionally, I want to thank the Conan Exiles team. I really do enjoy the game. I'm bummed out about their server software, but that doesn't mean they suck or anything. Maybe they'll take some time and improve this situation in the near future. At least, I can hope.
Until next time! Bork Bork