OpenSourceLAN / gameservers-docker

A bunch of game servers I use, dockerised
Other
510 stars 68 forks source link
csgo docker game game-server lan minecraft mumble quake3 server tf2 unreal

Putting game servers in Docker containers. Because it makes life easier.

A set of game servers that have been wrapped with Docker. All images are composed of other images in this repository, except for base. Most images will auto-download any dependencies they have (eg, factorio server files or sourcemod for srcds), making it almost one command to install a server. No binaries are stored in this repo, so make sure you have internet to download them with.

Includes a utility script start_server.sh which mounts save data to an external volume and sorts out networking for you.

Quick start

Assuming you are on a blank server with Git and docker installed:

git clone https://github.com/OpenSourceLAN/gameservers-docker.git .
./build.sh factorio

./start_server.sh factorio
# Or
docker run -it --net=host -e "SERVER_NAME=Some really cool server"\
-v `pwd`/save:`cat factorio/mounts` --name factorio factorio

Most servers have environment variables that can be used to configure them. Read the README.md file in each directory to see what is available.

Tutorial

There is a tutorial on the Open Source LAN website which will step you through building and using the images.

Contributions

Contributions are welcome. Submit a pull request or open an issue.

All additions should follow these suggestions:

Advanced networking stuff

We want to expose all game servers directly to our LAN, and the --host option means we will get port conflicts. There is an alternative approach which uses the ipvlan or macvlan docker network driver.

# Creates a docker network that's bridge with your layer 2 network
# Subnet should match the IP range and subnet of your network.
# ip-range is the CIDR block of IP addresses to assign to containers
# parent is the name of the interface you'd like to bridge containers to

docker network create --driver ipvlan --subnet=10.0.0.0/24 -o parent=eth0 --ip-range 10.0.0.16/28 --gateway 10.0.0.1  gameservers

# If the above command doesn't work, try using macvlan instead of ipvlan

# Starts your game server inside the layer 2 network
docker run -it --rm --net=gameservers csgo /steam/csgo/srcds_run -game csgo +sv_lan 1 +map cs_office

You can now see the CSGO server from another server on your network.

Running game servers on Docker Swarm

These are the instructions for building a swarm.

In addition to the swarm, one also needs a docker registry (I think).

These are the following gotchas that you need to be aware of:

Setting up multiple consul hosts

Run the master like this:

docker run -d  -v /mnt:/data --name consul \
    -p 8300:8300 \
    -p 8301:8301 \
    -p 8301:8301/udp \
    -p 8302:8302 \
    -p 8302:8302/udp \
    -p 8400:8400 \
    -p 8500:8500 \
    -p 53:53/udp \
    progrium/consul -server -advertise 10.0.0.167 -bootstrap-expect 3

and the other two like this:

    docker run -d -v /mnt:/data --name consul \
    -p 8300:8300 \
    -p 8301:8301 \
    -p 8301:8301/udp \
    -p 8302:8302 \
    -p 8302:8302/udp \
    -p 8400:8400 \
    -p 8500:8500 \
    -p 53:53/udp \
    progrium/consul -server -advertise 10.0.0.197 -join 10.0.0.167

Double check all 3 are present in cluster by doing curl http://localhost:8500/v1/status/peers.

TODO

Ensure every instance has:

Make the easy start script support passing environment variables to the container

Make an easy way to import config files in to the servers (eg mounting cfg directories)

Add more games

LICENSE

This project is licensed under GPL 3.0. See LICENSE for more information.