Example container for the mangos zero

What you need to know: - How docker works (docker.io - https://www.docker.com/) - linux commandline standards - sql statments This example works only on local(host) machine. For the cloud the database must be changed. Not here documented.

We use a build container? Because realm and world should be small as possible and shippes only we the nessery binaries.

1) Create the build container on ubuntu:focal


``` git clone git clone https://github.com/mangoszero/server.git mangos --recursive docker build mangos/contrib/docker/ -t mangos-zero-build ```

2) Build the source and create directory structur


Create a build script ``` echo "docker run -v$(pwd)/app:/app -v $(pwd):/work " \ "--rm -it --entrypoint ./mangos/contrib/docker/build.sh \ mangos-zero-build" > build.sh chmod +x build.sh ``` For a rebuild next time we only need ``` ./build.sh (&& docker-compose build && docker-compose restart) ``` (Optional) Create an extractor container script for the maps ``` echo "docker run -v$(pwd)/app:/app -v $(pwd):/work " \ "--rm -it mangos-zero-build bash" > extract.sh ```

3) (Optional) Extract needed data from client


Copy the full client into you work directory like (here from linux lutris) ``` cp -r /home/XXX/Games/WorldOfWarcraft/drive_c/WoW1.12.1 . ``` Join into the extractor container (build) ``` ./extract.sh (container) cd WoW1.12.1 (container) cp -r ../app/bin/tools/* . (container) chmod +x Extractor.sh (container) ./Extractor.sh (container) exit ``` This may take a while.
Now wee need a data directory. ``` mkdir data cd WoW1.12.1 cp -r Buildings dbc maps mmaps vmaps ../data ```

4) If everything went fine we create our container by


``` docker-compose build ```

5) Intialize the database


We need the right database for the server. ``` git clone https://github.com/mangoszero/database zero-database --recursive ``` Now we can start the database container. ``` docker-compose up -d mangos-db docker exec -it mangos-db bash (container) cd zero-database (container) ./InstallDatabases.sh Database (root for now) - host: localhost - user: "root" - password: "mangos" (container) exit ```

6) Configure container


``` cd app/etc sudo cp realmd.conf.dist realmd.conf sudo cp mangosd.conf.dist mangosd.conf sudo cp ahbot.conf.dist ahbot.conf ``` For realmd change follow lines in realmd.conf (wee need to root)
-> sudo nano realmd.conf ``` LoginDatabaseInfo = "localhost;3306;root;mangos;realmd" LogsDir = "" ``` into ``` LoginDatabaseInfo = "mangos-db;3306;root;mangos;realmd" LogsDir = "/app/logs" ``` For mangosd we update mangosd.conf (wee need to root)
-> sudo nano mangosd.conf ``` DataDir = "" LogsDir = "" LoginDatabaseInfo = "127.0.0.1;3306;root;mangos;realmd" WorldDatabaseInfo = "127.0.0.1;3306;root;mangos;mangos0" CharacterDatabaseInfo = "127.0.0.1;3306;root;mangos;character0" ``` into ``` DataDir = "/app/data" LogsDir = "/app/logs" LoginDatabaseInfo = "mangos-db;3306;root;mangos;realmd" WorldDatabaseInfo = "mangos-db;3306;root;mangos;mangos0" CharacterDatabaseInfo = "mangos-db;3306;root;mangos;character0" ``` Back to the workspace ``` cd ../.. ```

7) Start the realmd & mangos-one container detached


``` docker-compose up -d mangos-realm mangos-one ``` take a look with "docker stats". Hopefully all container stay and not reloaded all the time.

8) Join the world container to create an admin user


``` docker exec -it mangos-zero bash (container) screen -r (go into screen) (container - screen) account create testuser mypassword (container - screen) strg + a + d (detache from screen) (container) exit ```

9) Don't forget to change the realmlist.wtf from WoW client to localhost.

``` set realmlist localhost ```