Screeps is a game that comes and goes out of my life, it is some of the most fun I have while also driving me insane more than any hobby has a right to do.
You surely remember Age of Empires, Rise of Nations, Galactic Battleground. The classics of RTS, but sometimes the units were just incredibly stupid. Opting to take the long way around the lake instead of the obvious shortcut between trees!
Turns out the developers of Screeps felt the same way. Screeps at it’s core is an RTS with you in control of the units actions. It relies on Javascript code to control small entities called Creeps. They are your units, a harvester, a miner, a fighter… really whatever you can cobble together in code, it can do.
My gripe with Screeps is the high cost of entry for an educational purpose. A classroom would need to buy a copy for each computer but they would also need to pay for a subscription to the online multiplayer aspect. The multiplayer aspect while filtered isn’t guaranteed to be friendly either.
The developers have provided a way to run a private server, but unsurprisingly it’s difficult to do. The documentation is outdated, old and a lot of the dependencies are “at risk”. It’s a technical gate keeper for those attempting to learn or perhaps teach others.
I’ve produced a docker image that enables you to quickly run a Screeps server from any machine you can install Docker Desktop on. It’s easy enough to do at scale as well, it will start to falter past 60-70 users but at that point whoever is operating the server should be capable of load balancing multiple processes.
You can download the docker image manually or using the docker-compose.yml
file in the GitHub repository. The syntax is pretty straight forward and the README.md
file in the repo has the associated steps to running a server.
Great post and thank you for making the setup so easy, this is ideal, thank you. I hunted around for some time finding old deprecated private server solutions. Finding your blog resulted in my own private server running inside of a few minutes.
Please note against commit id da4ba62471a6e19f391fbb2a743da187f1cbd4a2 there is a small problem that might hinder some users. The script copy step in the dockerfile puts the files in the root and creates them without the extension while the readme.md indicates `/world/resetData.sh`, these don’t gel and so the `docker exec` command fails to find the script. (Apologies I couldn’t submit a PR against your repo.)
Regards, Aaron.
I’ve pushed an update to the readme.md correcting this information, thanks for bringing it to my attention and I’m glad you found this useful!