Skip to content

Latest commit

 

History

History
182 lines (119 loc) · 4.78 KB

README.md

File metadata and controls

182 lines (119 loc) · 4.78 KB

LinuxGSM Docker

A docker container distribution of https://github.com/GameServerManagers/LinuxGSM

Dockerhub https://hub.docker.com/r/akshmakov/linuxgsm/

Run Game Servers in Docker, multiplex multiple LinuxGSM deployments easily by taking advantage of Dockers port mapping.

Image Tags

  • latest base - base image with linuxgsm.sh script and user setup base image can be used to install any server
  • servername - convenience images with preinstalled game servers

Usage Docker

The base image is just a dockerized environment to run linuxgsm.sh. As such it can be used as though its on a local install that is, to list the available servers

docker run --rm akshmakov/linuxgsm:base linuxgsm list

in general any command can be executed.

If no command is passed, the container will not exit allowing docker exec to be used to execute commands

Base Image

Lets build up a local server using just the base image

We will mount the host directory /srv/lgsm/server1 to the container folder /home/lgsm , this will persist all GSM data on the host.

User ID mapping with containers is not-trivial, so this tutorial will use chmod workaround for quick host mounted volumes, but this is not ideal.

# create the host folder
$ mkdir -p /srv/lgsm/server1 && chmod 777 /srv/lgsm/server1
# start the server environment into a shell
$ docker run --rm -it -v "/srv/lgsm/server1:/home/lgsm" akshmakov/linuxgsm:base bash
# install quake 3 arena server
$ linuxgsm q3server
$ q3server install
# exit the shell
$ exit 

The server is now built up, you can edit the config files from the host or within a shell in the container.

All that is left is to start the server, in this case, q3server uses port 27960 so we will publish it.

# start the server with port publishing and docker logging
$ docker run --name quake3  -t -d -p "27960:27960" -v "/srv/lgsm/server1:/home/lgsm" akshmakov/linuxgsm:base q3server start

Note: the -t is required due to the way linuxgsm works

# check the logs
$ docker logs quake3
# open a shell on the container to inspect or modify
$ docker exec -it quake3 bash

You can repeat the process to install another gameserver on the same host, make sure to change the published port if you are installing multiple copies of the same gameserver.

Specific Image

These images are predownloaded versions of the LinuxGSM server library in docker containers.

These images are taged on dockerhub as akshmakov/linuxgsm:SERVERNAME

The images can be run without a command, which by default will start a server

These images are best to be extended, as the server data will be overwritten by any mounted volume

FROM akshmakov/linuxgsm:$SERVERNAME

COPY myserverconfig.cfg /home/lgsm/lgsm/config-lgsm/$SERVERNAME/$SERVERNAME.cfg

then any extended image may be run as such

# build the custom image
$ docker build -tag local/linuxgsm:$SERVERNAME .
# start the server
$ docker run -d --name my-custom-server local/linuxgsm:$SERVERNAME 

NOTE: -t tag not necessary for the specific images

Usage Docker-Compose

Docker-compose can be used to manage multiple installations.

version: '2'

services:

  # Pre-setup "base image" (see above)
  # Or an installation copied from an existing server
  q3server-1:
    image: akshmakov/linuxgsm:base
    volumes:
      - '/srv/lgsm/q3server-1:/home/lgsm'
    ports:
      - '27960:27960
    tty: true

  ## specific image - no customization
  ## Running on alt port
  q3server-2:
    image: akshmakov/linuxgsm:q3server
    ports:
      - '27961:27960'
    tty: true 

  ## custom specific image
  ## assume Dockerfile for this server exists
  ## in local dir
  q2server:
    build:
      dockerfile: Dockerfile.q2server
    image: local/linuxgsm:q2server
    ports:
      - '27910:27910'
    tty: true

You can start the whole cluster

$ docker-compose up -d

Examine specific logs

$ docker-compose logs q2server

Take one down and leave the others running

$ docker-compose stop q2server

Container Overview

linuxgsm.sh script is particularly picky about paths and does things a little different from a typical daemon.

In particular this docker images seeks to encapsulate LinuxGSM exactly as it is, to allow for easy transition from non-docker based deployments

These quirks are

  • Script downloads a whole bunch of other script components (hard to track docker cache)
  • Script installs game servers in script install dir (hard to relocate)
  • Script refuses to run as root (Requires image have users added and permissions granted)
  • Script runs server in a tmux session (Difficult to attach to output)

This Container runs linuxgsm.sh under a generic user lgsm and script and server data installed under the home directory /home/lgsm