initial commit
This commit is contained in:
commit
cf2f45b765
9
Dockerfile
Normal file
9
Dockerfile
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
FROM cm2network/steamcmd:latest
|
||||||
|
|
||||||
|
COPY entrypoint.sh /home/steam/entrypoint.sh
|
||||||
|
|
||||||
|
USER steam
|
||||||
|
VOLUME /home/steam/server
|
||||||
|
WORKDIR /home/steam/
|
||||||
|
|
||||||
|
ENTRYPOINT /home/steam/entrypoint.sh
|
39
README.md
Normal file
39
README.md
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
# Standard enviroment variable
|
||||||
|
|
||||||
|
`GSLT`: Game Server Login Token. Required if you want your server to public. Get your token [here](https://steamcommunity.com/dev/managegameservers).
|
||||||
|
|
||||||
|
`WORKSHOP_AUTHKEY`: Required if you want to play workshop maps. Get your token [here](https://steamcommunity.com/dev/apikey)
|
||||||
|
|
||||||
|
`MAP`: Default map to start.
|
||||||
|
|
||||||
|
`INSECURE`: Set this var to disable VAC.
|
||||||
|
|
||||||
|
`MAX_PLAYERS`: Overide max players.
|
||||||
|
|
||||||
|
`TICKRATE`: Tickrate of the server. Default is 64.
|
||||||
|
|
||||||
|
`NOHLTV`: Disable HLTV.
|
||||||
|
|
||||||
|
`MAPGROUP`: Mapgroup to cycle through. Values: `mg_bomb`, `mg_hostage`, `mg_dust`, `mg_demolition` or `mg_armsrace`.
|
||||||
|
|
||||||
|
`RCONPW`: Sets the RCON password.
|
||||||
|
|
||||||
|
`WORKSHOP_MAP`: Specify with what workshop map to start.
|
||||||
|
|
||||||
|
`WORKSHOP_COLLECTION`: Specify what workshop collection to cycle through.
|
||||||
|
|
||||||
|
`GAMEMODE`: What gamemode to load. Not the same as the `game_mode` cvar. Value gets translated to a gamemode/gametype combination. Available values are: `casual`,`competitive`, `wingman`, `armsrace`, `deathmatch`, `custom`, `coop`, `dangerzone`, `weaponexpert`,`demolition`,`stab_zap`,`ffa`,`flying_scoutsman`,`trigger_discipline`,`headshots`,`hunter_gatherers`,`retakes`,`competitive_short`. For more information see [here](https://developer.valvesoftware.com/wiki/CS:GO_Game_Mode_Commands).
|
||||||
|
|
||||||
|
# Custom conVars
|
||||||
|
|
||||||
|
You can set ANY other variable by just prefixing the conVar with `CVAR_`. So for example if you want to set `mp_disable_autokick 1` just set the enviroment variable `CVAR_MP_DISABLE_AUTOKICK` to `1`. Upper or lower case is ignored.
|
||||||
|
|
||||||
|
# Minimum configuration
|
||||||
|
|
||||||
|
The minimum variables you should set for a somewhat working game is is `GSLT`, `MAP` and maybe `GAMEMODE`. You can also check out the example [docker-compose.yml](docker-compose.yml).
|
||||||
|
|
||||||
|
# Misc
|
||||||
|
|
||||||
|
Because docker-compose recreated the container every time you update a varaible you can mount `/home/steam/server` to a volume so that you dont have to redownload the server every time you change something.
|
||||||
|
|
||||||
|
The game gets updated every time the image restarts.
|
29
docker-compose.yml
Normal file
29
docker-compose.yml
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
version: "3"
|
||||||
|
|
||||||
|
services:
|
||||||
|
csgo:
|
||||||
|
build: .
|
||||||
|
environment:
|
||||||
|
- INSECURE=true
|
||||||
|
- MAX_PLAYERS=16
|
||||||
|
- TICKRATE=128
|
||||||
|
- GSLT=XXXX
|
||||||
|
- WORKSHOP_AUTHKEY=XXXXX
|
||||||
|
- MAP=de_nuke
|
||||||
|
- MAPGROUP=mg_bomb
|
||||||
|
- GAMEMODE=retakes
|
||||||
|
- RCONPW=password123
|
||||||
|
- CVAR_MP_DISABLE_AUTOKICK=1
|
||||||
|
volumes:
|
||||||
|
- csgo_game:/home/steam/server
|
||||||
|
ports:
|
||||||
|
- 0.0.0.0:27015:27015/tcp
|
||||||
|
- 0.0.0.0:27015:27015/udp
|
||||||
|
- 0.0.0.0:27020:27020/tcp
|
||||||
|
- 0.0.0.0:27020:27020/udp
|
||||||
|
stdin_open: true
|
||||||
|
tty: true
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
csgo_game:
|
||||||
|
name: csgo_game
|
137
entrypoint.sh
Executable file
137
entrypoint.sh
Executable file
@ -0,0 +1,137 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -eo pipefail
|
||||||
|
|
||||||
|
/home/steam/steamcmd/steamcmd.sh +login anonymous +force_install_dir /home/steam/server +app_update 740 validate +quit
|
||||||
|
|
||||||
|
SRCDS_ARGS="-usercon"
|
||||||
|
|
||||||
|
if [ -n "$GSLT" ]; then
|
||||||
|
SRCDS_ARGS="${SRCDS_ARGS} +sv_setsteamaccount ${GSLT}"
|
||||||
|
else
|
||||||
|
echo "GSLT not set. Connections will be restricted to LAN only."
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$WORKSHOP_AUTHKEY" ]; then
|
||||||
|
SRCDS_ARGS="${SRCDS_ARGS} -authkey ${WORKSHOP_AUTHKEY}"
|
||||||
|
else
|
||||||
|
echo "WORKSHOP_AUTHKEY not set. Workshop maps will be unsupported."
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$INSECURE" ]; then
|
||||||
|
SRCDS_ARGS="${SRCDS_ARGS} -insecure"
|
||||||
|
echo "Running with VAC disabled."
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$MAX_PLAYERS" ]; then
|
||||||
|
SRCDS_ARGS="${SRCDS_ARGS} -maxplayers $MAX_PLAYERS"
|
||||||
|
echo "Maxplayers set to ${MAX_PLAYERS}."
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$TICKRATE" ]; then
|
||||||
|
SRCDS_ARGS="${SRCDS_ARGS} -tickrate $TICKRATE"
|
||||||
|
echo "Tickrate set to $TICKRATE."
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$NOHLTV" ]; then
|
||||||
|
SRCDS_ARGS="${SRCDS_ARGS} -nohltv"
|
||||||
|
echo "Disableing HLTV."
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$RCONPW" ]; then
|
||||||
|
SRCDS_ARGS="${SRCDS_ARGS} +rcon_password $RCONPW"
|
||||||
|
echo "Setting RCON password to: $RCONPW"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$GAMEMODE" ]; then
|
||||||
|
case "$GAMEMODE" in
|
||||||
|
"casual" | "competitive" | "wingman" | "weaponexpert")
|
||||||
|
SRCDS_ARGS="${SRCDS_ARGS} +game_type 0"
|
||||||
|
;;
|
||||||
|
"armsrace" | "demolition" | "deathmatch")
|
||||||
|
SRCDS_ARGS="${SRCDS_ARGS} +game_type 1"
|
||||||
|
;;
|
||||||
|
"custom" )
|
||||||
|
SRCDS_ARGS="${SRCDS_ARGS} +game_type 3"
|
||||||
|
;;
|
||||||
|
"guardian" | "coop" )
|
||||||
|
SRCDS_ARGS="${SRCDS_ARGS} +game_type 4"
|
||||||
|
;;
|
||||||
|
"dangerzone" )
|
||||||
|
SRCDS_ARGS="${SRCDS_ARGS} +game_type 6"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case "$GAMEMODE" in
|
||||||
|
"casual" | "armsrace" | "custom" | "guardian" | "dangerzone")
|
||||||
|
SRCDS_ARGS="${SRCDS_ARGS} +game_mode 0"
|
||||||
|
;;
|
||||||
|
"competitive" | "demolition" | "coop")
|
||||||
|
SRCDS_ARGS="${SRCDS_ARGS} +game_mode 1"
|
||||||
|
;;
|
||||||
|
"wingman" | "deathmatch")
|
||||||
|
SRCDS_ARGS="${SRCDS_ARGS} +game_mode 2"
|
||||||
|
;;
|
||||||
|
"weaponexpert")
|
||||||
|
SRCDS_ARGS="${SRCDS_ARGS} +game_mode 3"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case "$GAMEMODE" in
|
||||||
|
"stab_zap")
|
||||||
|
SRCDS_ARGS="${SRCDS_ARGS} +game_type 0 +game_mode 0 +sv_skirmish_id 1"
|
||||||
|
;;
|
||||||
|
"ffa")
|
||||||
|
SRCDS_ARGS="${SRCDS_ARGS} +game_type 0 +game_mode 2 +sv_game_mode_flags 32"
|
||||||
|
;;
|
||||||
|
"flying_scoutsman")
|
||||||
|
SRCDS_ARGS="${SRCDS_ARGS} +game_type 0 +game_mode 0 +sv_skirmish_id 3"
|
||||||
|
;;
|
||||||
|
"trigger_discipline")
|
||||||
|
SRCDS_ARGS="${SRCDS_ARGS} +game_type 0 +game_mode 0 +sv_skirmish_id 4"
|
||||||
|
;;
|
||||||
|
"headshots")
|
||||||
|
SRCDS_ARGS="${SRCDS_ARGS} +game_type 0 +game_mode 2 +sv_skirmish_id 6"
|
||||||
|
;;
|
||||||
|
"hunter_gatherers")
|
||||||
|
SRCDS_ARGS="${SRCDS_ARGS} +game_type 0 +game_mode 2 +sv_skirmish_id 7"
|
||||||
|
;;
|
||||||
|
"retakes")
|
||||||
|
SRCDS_ARGS="${SRCDS_ARGS} +game_type 0 +game_mode 0 +sv_skirmish_id 12"
|
||||||
|
;;
|
||||||
|
"competitive_short")
|
||||||
|
SRCDS_ARGS="${SRCDS_ARGS} +game_type 0 +game_mode 1 +sv_game_mode_flags 32"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$MAP" ]; then
|
||||||
|
SRCDS_ARGS="${SRCDS_ARGS} +map ${MAP}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$MAPGROUP" ]; then
|
||||||
|
SRCDS_ARGS="${SRCDS_ARGS} +mapgroup ${MAPGROUP}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$WORKSHOP_MAP" ]; then
|
||||||
|
SRCDS_ARGS="${SRCDS_ARGS} +host_workshop_map ${WORKSHOP_MAP}"
|
||||||
|
|
||||||
|
if [ -z "$WORKSHOP_AUTHKEY" ]; then
|
||||||
|
echo "WORKSHOP_MAP set but no WORKSHOP_AUTHKEY. This may not work."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$WORKSHOP_COLLECTION" ]; then
|
||||||
|
SRCDS_ARGS="${SRCDS_ARGS} +host_workshop_collection ${WORKSHOP_COLLECTION}"
|
||||||
|
|
||||||
|
if [ -z "$WORKSHOP_AUTHKEY" ]; then
|
||||||
|
echo "WORKSHOP_COLLECTION set but no WORKSHOP_AUTHKEY. This may not work."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
CVARS=$(env | awk -F "=" '/^CVAR_/ { sub("CVAR_","",$1); print "+"tolower($1),($2 ~ /^[0-9]+$/)?$2:"\""$2"\""," "}' | tr -d "\n")
|
||||||
|
|
||||||
|
echo "Running command: srcds_run -game csgo $SRCDS_ARGS $CVARS"
|
||||||
|
|
||||||
|
/home/steam/server/srcds_run -game csgo $SRCDS_ARGS $CVARS
|
Loading…
Reference in New Issue
Block a user