GMOD TTT server image, https://hub.docker.com/r/jusito/
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.
- 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=trueand/or-e INSTALL_HL2=trueand so on. Most content will need at least CSS.
- Pick your ports
-e SERVER_PORT=27015 -p 27015:27015/udpboth 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_v1and max players-e SERVER_MAX_PLAYERS=20 - Get a volume name
-v TTTDev:/home/steam/serverfiles
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
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
- lgsm_debian - Linux Game Server Manager in Debian
- gmod_debian - Garrys Mod with Debian and LGSM
- gmod_ttt_debian - Gamemode TTT with LGSM/Debian
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
| 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 |
| TZ | Europe/Berlin | Set timezone for CRON / log |
| Name | Default | Description |
|---|---|---|
| SERVER_EXECUTABLE | "" | Name of the lgsm script after installation |
| SERVER_GAME | "" | LGSM name of installation |
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_URL | https://github.com/aptible/supercronic/releases/download/v0.1.9/supercronic-linux-amd64 | CRON version |
| 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 |
| 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. |
| 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 |
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_POSTTARGET | https://hastebin.com | |
| LGSM_DISCORDALERT | off | |
| LGSM_DISCORDWEBHOOK | webhook | |
| LGSM_EMAILALERT | off | |
| LGSM_EMAIL | email@example.com | |
| LGSM_EMAILFROM | "" | |
| LGSM_IFTTTALERT | off | |
| LGSM_IFTTTTOKEN | accesstoken | |
| LGSM_IFTTTEVENT | linuxgsm_alert | |
| LGSM_MAILGUNALERT | off | |
| LGSM_MAILGUNTOKEN | accesstoken | |
| LGSM_MAILGUNDOMAIN | example.com | |
| LGSM_MAILGUNEMAILFROM | alert@example.com | |
| LGSM_MAILGUNEMAIL | email@myemail.com | |
| 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 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 |
| Name | Default | Description |
|---|---|---|
| SERVER_GAMEMODE | "terrortown" |
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
/home/steam/serverfiles
server.cfg: /home/steam/serverfiles/garrysmod/cfg/gmodserver.cfg
hostname, password, rcon password, voice enabled are managed / will be overwritten
http://ttt.badking.net/config-and-commands/convars https://wiki.garrysmod.de/server.cfg
Path in container is: docker cp "your server.cfg path" CONTAINER:/home/steam/serverfiles/garrysmod/cfg/gmodserver.cfg
- Debian Buster, one dependency is missing: https://packages.debian.org/search?keywords=lib32tinfo5
- Alpine, steamcmd doesn't like musl
- volume for steam workshop
- volume for other games
- volume for gmod config (data folder)
- AppArmor Profile
- scrds doesn't like different internal / external ports (thats why no ports are exposed)
- health check -> details
navigate to directory with readme.md bash test/testBuild.sh (sh doesn't like pipefail, escape if you want to use sh)
- 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)
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
- 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