Vanilla WoW in Docker

Mar 26, 2018 00:00 · 519 words · 3 minutes read wowstack development

It has been 13 years since World of Warcraft emulation servers were created.

Ever since the servers were widely adopted from the Open Source release of MaNGOS in 2005, there have been rumors spreading about how difficult it is to run a server.

Today, I’d like to end this rumor and present a new idea.

A different approach

Since we were working on WoWStack anyway, I felt it was a good idea to change a few elements that would make everything much easier to use. For example, I introduced Docker to the system.

With Docker, you will no longer need to install loads of dependencies or be familiar with compilers and manual installations, nor will you need to face the recurring tasks of keeping everything up to date and runing.

OpenWoW, the research effort of WowStack is proud to present Vanilla WoW in Docker. As of today, you can run a fully working Vanilla WoW server environment by just having Docker installed on a server — be it Linux, Windows or Mac OS. You choose!

The entire environment is composed of various images for data extraction from the client and images for authentication and the actual gam world.

Hop to https://github.com/wowstack/docker-classic-server to grab and copy and play around with it.

Running Vanilla WoW in Docker

First, make sure you have Docker and Docker Compose installed and running on your machine. You will also need an installation of Vanilla WoW version 1.12.x. For now it does not really matter if you use 1.12.0, 1.12.1 or 1.12.2 as each of these will work.

Clone the repository locally:

git clone https://github.com/wowstack/docker-classic-server.git

Since the project is still in early stages we now have to make a few changes. Take a look at docker-compose.yml:

version: '3.1'

services:
...
    map_extractors:
        image: wowstack/map-tools:latest
...
        volumes:
            - "./path/to/wow/client:/opt/wowstack/data/"
            - "./data/wowstack:/opt/wowstack/share"

    world_server:
        image: wowstack/world-server:latest
...
        volumes:
            - "./data/wowstack:/opt/wowstack/share"
...

As you can see, the map_extractors service has two volumes getting mounted by Docker:

  • "./path/to/wow/client:/opt/wowstack/data/": this is used to mount a Vanilla WoW installation into the container, allowing the extractors to read from the clients MPQ archives. Specify the full path to the World of Warcraft folder
  • "./data/wowstack:/opt/wowstack/share": this is a local directory which will be used to store extracted data and generated files. For instance, maps will live here

On the world_server service we meet an old friend:

  • "./data/wowstack:/opt/wowstack/share": here we mount generated files for the world server, allowing it to read maps, client databases, etc.

To get your Vanilla WoW environment up and running we start off by pulling the current container images:

docker-compose pull

Note that these images are currently updated daily currently and unversioned for now, so you have to pull these images/tags:

  • wowstack/map-tools:latest
  • wowstack/auth-server:latest
  • wowstack/world-server:latest

For storing game content and characters data we use

  • mariadb:10.1

Starting the environment is just one single command:

docker-compose up -d

You can watch what is going on using docker-compose logs or tools like Kitematic. Be aware that initial startup time can take up to two hours for generating all maps. After this your Vanilla WoW installation will be listening on localhost/127.0.0.1.

To destroy all things execute docker-compose down.

Comments powered by Disqus