GMOD TTT
Important
If you use the old image, you should check the environment variables. For example arguments after image name aren't used, use instead -e SERVER_ADDITIONAL_PARAMETERS=....
This readme may not be perfect, if you struggle at some point or you see incorrect informations create an issue at git please.
Getting Started
Prepare your server content
Create public workshop collection without maps, dummy ID:=123456. Use -e WORKSHOP_COLLECTION_ID 123456.
Create public workshop collection with maps and add this one to "123456".
Do you want every user to load the content automatically? Yes you are done, no -e WORKSHOP_AUTOLOAD=false. Remember that "false" mean, that every user has to manually subscribe to your collection. If you don't separate maps / others, every connecting user would load all maps on first connecting. This would be a pain for some.
Do your content needs CSS, HL2, HLDM, TF2? Use -e INSTALL_CSS=true and/or -e INSTALL_HL2=true and so on. Most content will need at least CSS.
Server config
Pick your ports -e SERVER_PORT=27015 -p 27015:27015/udp both are always needed. For RCON [...] -e SERVER_RCON_PASSWORD="verySecure" -p 27015:27015/tcp.
Set environment variables like servername -e SERVER_NAME="My Server", password -e SERVER_PASSWORD="securepw" and timezone for cron -e TZ="Europe/Berlin", default short downtime at Sunday 10 o'clock.
Choose startmap (can be from workshop collection, even linked) -e SERVER_DEFAULT_MAP=ttt_rooftops_2016_v1 and max players -e SERVER_MAX_PLAYERS=20
Get a volume name -v TTTDev:/home/steam/serverfiles
run example without rcon
If you need rcon only sometimes, use ulx with this config.
docker run -d \
-p 27015:27015/udp \
-e SERVER_PORT=27015 \
-e INSTALL_CSS=true \
-e WORKSHOP_COLLECTION_ID=123456 \
-e SERVER_NAME="My Server" \
-e SERVER_PASSWORD="securepw" \
-e SERVER_DEFAULT_MAP="ttt_lttp_kakariko_a5" \
-v TTTDev:/home/steam/serverfiles \
--name "MyTTTServer" \
jusito/docker-ttt:gmod_ttt_debian
run example with rcon
docker run -d \
-p 27015:27015/udp \
-e SERVER_PORT=27015 \
-e INSTALL_CSS=true \
-e WORKSHOP_COLLECTION_ID=123456 \
-e SERVER_NAME="My Server" \
-e SERVER_PASSWORD="securepw" \
-e SERVER_DEFAULT_MAP="ttt_lttp_kakariko_a5" \
-v TTTDev:/home/steam/serverfiles \
-p 27015:27015/tcp \
-e SERVER_RCON_PASSWORD="securePW" \
--name "MyTTTServer" \
jusito/docker-ttt:gmod_ttt_debian
Tags
lgsm_debian - Linux Game Server Manager in Debian
gmod_debian - Garrys Mod with Debian and LGSM
gmod_ttt_debian - Gamemode TTT with LGSM/Debian
Environment Variables
Because you will most likely use many environmental variables, I recommend a env list. Instead of -e VARNAME="VALUE 1" write one additional text file:
TTT.env:
VARNAME=Value 1
SERVER_NAME=My Hood
SERVER_PASSWORD=Secure_PW
LGSM Properties
Free to change
Name
Default
Description
CRON_MONITOR
"*/5 * * * *"
Every 5 minutes LGSM checks if the server is running and responding, rebooting if needed.
CRON_UPDATE
"*/30 * * * *"
Every 30 minutes LGSM checks if game server needs an update which will be executed.
CRON_FORCE_UPDATE
"0 10 * * 0"
At Sunday 10:00 force update and restart
CRON_LOG_ROTATE
"0 9 * * 0"
Rotate log at Stunday 9:00
Used for subimage
Name
Default
Description
SERVER_EXECUTABLE
""
Name of the lgsm script after installation
SERVER_GAME
""
LGSM name of installation
LGSM Internal
LGSM Internal Properties (click me)
Name
Default
Description
STEAM_PATH
/home/steam
primary workdir, homedir of user
SERVER_PATH
/home/steam/serverfiles
Path to serverfiles after installation
STEAM_CMD
/home/steam/steamcmd
Path to steamcmd files
GROUP_ID
10000
Group ID of the user
USER_ID
10000
User ID of the user
DOCKER_USER
steam
Name of the user
SUPERCRONIC
supercronic-linux-amd64
CRON name after download
SUPERCRONIC_SHA1SUM
5ddf8ea26b56d4a7ff6faecdd8966610d5cb9d85
CRC for CRON download
DEBIAN_FRONTEND
noninteractive
Don't ask questions during installation
LANG
C.UTF-8
Language set
TERM
xterm
DEBUGGING
false
GMOD Properties
GMOD Content
Name
Default
Description
INSTALL_CSS
false
Should I install and mount CSS?
INSTALL_HL2
false
Should I install and mount HL2?
INSTALL_HLDM
false
Should I install and mount HLDM?
INSTALL_TF2
false
Should I install and mount TF2?
WORKSHOP_COLLECTION_ID
""
Workshop Collection ID for the server. If you use AUTOLOAD you should add maps on a linked collection
WORKSHOP_API_KEY
""
Maybe needed for private content.
WORKSHOP_AUTOLOAD
true
Every item which is on the given collection, will be downloaded by every client. Elements on linked collections not - so use maps in a linked collection.
GMOD Server
Name
Default
Description
SERVER_NAME
LinuxGSM
SERVER_PASSWORD
""
SERVER_RCON_PASSWORD
""
SERVER_VOICE_ENABLE
1
SERVER_IP
0.0.0.0
SERVER_PORT
27015
SERVER_CLIENTPORT
27005
SERVER_SOURCETVPORT
27020
SERVER_DEFAULT_MAP
gm_construct
SERVER_MAX_PLAYERS
16
SERVER_TICKRATE
66
SERVER_GAMEMODE
sandbox
SERVER_LOGIN_TOKEN
""
SERVER_ADDITIONAL_PARAMETERS
-disableluarefresh
GMOD LGSM specific
These variables are untested, but if they dont work report it please too. Documentation
Name
Default
Description
LGSM_DISPLAYIP
""
LGSM_POSTALERT
off
LGSM_POSTDAYS
7
LGSM_DISCORDALERT
off
LGSM_DISCORDWEBHOOK
webhook
LGSM_EMAILALERT
off
LGSM_EMAILFROM
""
LGSM_IFTTTALERT
off
LGSM_IFTTTTOKEN
accesstoken
LGSM_IFTTTEVENT
linuxgsm_alert
LGSM_MAILGUNALERT
off
LGSM_MAILGUNTOKEN
accesstoken
LGSM_MAILGUNDOMAIN
example.com
LGSM_MAILGUNEMAILFROM
LGSM_MAILGUNEMAIL
LGSM_PUSHBULLETALERT
off
LGSM_PUSHBULLETTOKEN
accesstoken
LGSM_CHANNELTAG
""
LGSM_PUSHOVERALERT
off
LGSM_PUSHOVERTOKEN
accesstoken
LGSM_TELEGRAMALERT
off
LGSM_TELEGRAMTOKEN
accesstoken
LGSM_TELEGRAMCHATID
""
LGSM_CURLCUSTOMSTRING
""
LGSM_UPDATEONSTART
off
LGSM_MAXBACKUPS
4
LGSM_MAXBACKUPDAYS
30
LGSM_STOPONBACKUP
on
LGSM_CONSOLELOGGING
on
LGSM_LOGDAYS
7
LGSM_QUERYDELAY
5
LGSM_BRANCH
""
LGSM_STEAMMASTER
true"
GMOD Internal
GMOD Internal Properties (click me)
Name
Default
Description
CSS_PATH
/home/steam/addons/css
HL2_PATH
/home/steam/addons/hl2
HLDM_PATH
/home/steam/addons/hldm
TF2_PATH
/home/steam/addons/tf2
SERVER_EXECUTABLE
gmodserver
SERVER_GAME
gmodserver
TTT Properties
TTT Internal Properties
Name
Default
Description
SERVER_GAMEMODE
"terrortown"
LGSM Usage
The container provides links to LGSM commands:
docker exec -it CONTAINER details // print various informations like passwords, name, players, status aso.
docker exec -it CONTAINER backup
docker exec -it CONTAINER console // let you view the current console, docker logs will not work
docker exec -it CONTAINER debug
docker exec -it CONTAINER force-update
docker exec -it CONTAINER install
docker exec -it CONTAINER monitor
docker exec -it CONTAINER postdetails
docker exec -it CONTAINER restart
docker exec -it CONTAINER start
docker exec -it CONTAINER stop
docker exec -it CONTAINER test-alert
docker exec -it CONTAINER update
docker exec -it CONTAINER update-lgsm
docker exec -it CONTAINER validate
File Locations
Volumes
/home/steam/serverfiles
Other
server.cfg: /home/steam/serverfiles/garrysmod/cfg/gmodserver.cfg
hostname, password, rcon password, voice enabled are managed / will be overwritten
server config
Path in container is:
docker cp "your server.cfg path" CONTAINER:/home/steam/serverfiles/garrysmod/cfg/gmodserver.cfg
Additional
Alpine, steamcmd doesn't like musl
TODO
image improvements
volume for steam workshop
volume for other games
volume for gmod config (data folder)
AppArmor Profile
image config, description needed
scrds doesn't like different internal / external ports (thats why no ports are exposed)
health check -> details
For local usage
navigate to directory with readme.md
bash test/testBuild.sh (sh doesn't like pipefail, escape if you want to use sh)
FTP Server
If your Volume is TTTDev
If you didn't change UserID / GroupID
If you want to connect to ftp://...:123 (ports 122/123 are free on your network)
For FileZilla
docker run -d \
-e MY_NAME="docker" -e MY_PASSWORD="MySecurePW" \
-e MY_USER_ID="10000" -e MY_GROUP_ID="10000" \
-p 122:20 -p 123:21 -p 10090-10100:10090-10100 \
-v TTTDev:/home/docker/ \
jusito/vsftpd-alpine:simple
For Windows Network Mount
IP of the Host (not container) 1.2.3.4
Mount: ftp://1.2.3.4:123
docker run -d \
-e MY_NAME="docker" -e MY_PASSWORD="MySecurePW" \
-e MY_USER_ID="10000" -e MY_GROUP_ID="10000" \
-p 122:20 -p 123:21 -p 10090-10100:10090-10100 \
-v TTTDev:/home/docker/ \
-e pasv_address="1.2.3.4" \
jusito/vsftpd-alpine:simple
Synchronize the voice enabled / disabled state with Teamspeak