Compare commits
33 Commits
theforest
...
subsistenc
Author | SHA1 | Date | |
---|---|---|---|
fc07f25169 | |||
13aaa04312 | |||
23e17fec2f | |||
2bb938a2b4 | |||
1c1bd04181 | |||
f73fb4a290 | |||
b4862f0a14 | |||
c59417e8aa | |||
d142a452ec | |||
7523f0c102 | |||
75e7b53377 | |||
07bfc75c4e | |||
da4cb0651f | |||
a296a8c61a | |||
557e3ba3d9 | |||
41c7677e8c | |||
fde402da83 | |||
ed117f8d35 | |||
841e6a0a1c | |||
223188f06e | |||
3d30acbc1e | |||
e03219a936 | |||
5c371e6e2e | |||
8d26d2a8d3 | |||
1a5ff66373 | |||
f71d0579ac | |||
f4677a9a01 | |||
e6a855484e | |||
a79dd225be | |||
57b5304696 | |||
8962c5df2d | |||
ebe0ee01ea | |||
5bcdc21483 |
@@ -4,15 +4,16 @@ LABEL org.opencontainers.image.authors="admin@minenet.at"
|
||||
LABEL org.opencontainers.image.source="https://github.com/ich777/docker-steamcmd-server"
|
||||
|
||||
RUN apt-get update && \
|
||||
apt-get -y install lib32gcc-s1 winbind xvfb screen && \
|
||||
apt-get -y install lib32gcc-s1 winbind xvfb screen cabextract && \
|
||||
wget -q -O /usr/bin/winetricks https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks && \
|
||||
chmod +x /usr/bin/winetricks && chown 755 /usr/bin/winetricks && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
ENV DATA_DIR="/serverdata"
|
||||
ENV STEAMCMD_DIR="${DATA_DIR}/steamcmd"
|
||||
ENV SERVER_DIR="${DATA_DIR}/serverfiles"
|
||||
ENV GAME_ID="template"
|
||||
ENV GAME_NAME="template"
|
||||
ENV GAME_PARAMS="template"
|
||||
ENV GAME_ID=""
|
||||
ENV GAME_PARAMS=""
|
||||
ENV GAME_PORT=27015
|
||||
ENV VALIDATE=""
|
||||
ENV UMASK=000
|
||||
|
25
README.md
25
README.md
@@ -1,37 +1,36 @@
|
||||
# SteamCMD in Docker optimized for Unraid
|
||||
This Docker will download and install SteamCMD. It will also install The Forest and run it.
|
||||
This Docker will download and install SteamCMD. It will also install Subsistence and run it.
|
||||
|
||||
**SERVERNAME:** 'The Forest Docker' **SERVERPASSWORD:** 'Docker' **ADMINPASSWORD:** 'adminDocker' (you can change this in your SERVERFOLDER/config/config.cfg)
|
||||
**ATTENTION:** First startup can take very long since it downloads the gameserver files and also installs dotnet45!
|
||||
|
||||
**WARNING:** You have to create a Steam Token to play Online.
|
||||
Create your token here: https://steamcommunity.com/dev/managegameservers (please note that you must generate the token for the APPID: '242760' and every gameserver needs it's own token!!!). Put your Token into your GAME_PARAMS like this 'serverSteamAccount YOURTOKEN' (without quotes).
|
||||
**First Start Notice:** On First startup the container installs dotnet45 and it might seem that the container hangs but please be patient since the installation can take very long on some systems (5 minutes+).
|
||||
|
||||
**Update Notice:** Simply restart the container if a newer version of the game is available.
|
||||
Update Notice: Simply restart the container if a newer version of the game is available.
|
||||
|
||||
You can also run multiple servers with only one SteamCMD directory!
|
||||
|
||||
## Env params
|
||||
| Name | Value | Example |
|
||||
| --- | --- | --- |
|
||||
| STEAMCMD_DIR | Folder for SteamCMD | /serverdata/steamcmd |
|
||||
| SERVER_DIR | Folder for gamefile | /serverdata/serverfiles |
|
||||
| GAME_ID | The GAME_ID that the container downloads at startup. If you want to install a static or beta version of the game change the value to: '556450 -beta YOURBRANCH' (without quotes, replace YOURBRANCH with the branch or version you want to install). | 556450 |
|
||||
| GAME_NAME | SRCDS gamename | cstrike |
|
||||
| GAME_PARAMS | Values to start the server | empty |
|
||||
| GAME_ID | The GAME_ID that the container downloads at startup. If you want to install a static or beta version of the game change the value to: '1362640 -beta YOURBRANCH' (without quotes, replace YOURBRANCH with the branch or version you want to install). | 1362640 |
|
||||
| GAME_PARAMS | Values to start the server, leave empty for none | empty |
|
||||
| UID | User Identifier | 99 |
|
||||
| GID | Group Identifier | 100 |
|
||||
| GAME_PORT | Port the server will be running on | 27015 |
|
||||
| VALIDATE | Validates the game data | blank |
|
||||
| USERNAME | Leave blank for anonymous login | blank |
|
||||
| PASSWRD | Leave blank for anonymous login | blank |
|
||||
|
||||
## Run example
|
||||
```
|
||||
docker run --name TheForest -d \
|
||||
-p 8766:8766/udp -p 27015:27015/udp -p 27016:27016/udp \
|
||||
docker run --name Subsistence -d \
|
||||
-p 7777:7777/udp -p 27015:27015/udp \
|
||||
--env 'UID=99' \
|
||||
--env 'GID=100' \
|
||||
--volume /path/to/steamcmd:/serverdata/steamcmd \
|
||||
--volume /path/to/theforest:/serverdata/serverfiles \
|
||||
ich777/steamcmd:theforest
|
||||
--volume /path/to/subsistence:/serverdata/serverfiles \
|
||||
ich777/steamcmd:subsistence
|
||||
```
|
||||
|
||||
This Docker was mainly edited for better use with Unraid, if you don't use Unraid you should definitely try it!
|
||||
|
@@ -1,55 +0,0 @@
|
||||
// Dedicated Server Settings.
|
||||
// Server IP address - Note: If you have a router, this address is the internal address, and you need to configure ports forwarding
|
||||
serverIP 0.0.0.0
|
||||
// Steam Communication Port - Note: If you have a router you will need to open this port.
|
||||
serverSteamPort 8766
|
||||
// Game Communication Port - Note: If you have a router you will need to open this port.
|
||||
serverGamePort 27015
|
||||
// Query Communication Port - Note: If you have a router you will need to open this port.
|
||||
serverQueryPort 27016
|
||||
// Server display name
|
||||
serverName The Forest Docker
|
||||
// Maximum number of players
|
||||
serverPlayers 4
|
||||
// Enable VAC (Valve Anti-cheat System at the server. Must be set off or on
|
||||
enableVAC off
|
||||
// Server password. blank means no password
|
||||
serverPassword Docker
|
||||
// Server administration password. blank means no password
|
||||
serverPasswordAdmin adminDocker
|
||||
// Your Steam account name. blank means anonymous
|
||||
serverSteamAccount
|
||||
// Time between server auto saves in minutes - The minumum time is 15 minutes, the default time is 30
|
||||
serverAutoSaveInterval 30
|
||||
// Game difficulty mode. Must be set to Peaceful Normal or Hard
|
||||
difficulty Normal
|
||||
// New or continue a game. Must be set to New or Continue
|
||||
initType Continue
|
||||
// Slot to save the game. Must be set 1 2 3 4 or 5
|
||||
slot 1
|
||||
// Show event log. Must be set off or on
|
||||
showLogs off
|
||||
// Contact email for server admin
|
||||
serverContact email@gmail.com
|
||||
// No enemies
|
||||
veganMode off
|
||||
// No enemies during day time
|
||||
vegetarianMode off
|
||||
// Reset all structure holes when loading a save
|
||||
resetHolesMode off
|
||||
// Regrow 10% of cut down trees when sleeping
|
||||
treeRegrowMode off
|
||||
// Allow building destruction
|
||||
allowBuildingDestruction on
|
||||
// Allow enemies in creative games
|
||||
allowEnemiesCreativeMode off
|
||||
// Allow clients to use the built in debug console
|
||||
allowCheats off
|
||||
// Use full weapon damage values when attacking other players
|
||||
realisticPlayerDamage off
|
||||
// Allows defining a custom folder for save slots, leave empty to use the default location
|
||||
saveFolderPath
|
||||
// Target FPS when no client is connected
|
||||
targetFpsIdle 5
|
||||
// Target FPS when there is at least one client connected
|
||||
targetFpsActive 60
|
4
scripts/start-Xvfb.sh
Normal file
4
scripts/start-Xvfb.sh
Normal file
@@ -0,0 +1,4 @@
|
||||
until Xvfb :99 -screen scrn 640x480x16; do
|
||||
echo "Xvfb server crashed with exit code $?. Respawning.." >&2
|
||||
sleep 1
|
||||
done
|
@@ -1,4 +1,5 @@
|
||||
#!/bin/bash
|
||||
export DISPLAY=:99
|
||||
if [ ! -f ${STEAMCMD_DIR}/steamcmd.sh ]; then
|
||||
echo "SteamCMD not found!"
|
||||
wget -q -O ${STEAMCMD_DIR}/steamcmd_linux.tar.gz http://media.steampowered.com/client/steamcmd_linux.tar.gz
|
||||
@@ -57,47 +58,62 @@ fi
|
||||
echo "---Prepare Server---"
|
||||
export WINEARCH=win64
|
||||
export WINEPREFIX=/serverdata/serverfiles/WINE64
|
||||
echo "---Checking for 'saves' directory---"
|
||||
if [ ! -d ${SERVER_DIR}/saves ]; then
|
||||
echo "---'saves' not found creating---"
|
||||
mkdir ${SERVER_DIR}/saves
|
||||
fi
|
||||
echo "---Directory 'saves' found!---"
|
||||
echo "---Checking for 'config.cfg'---"
|
||||
if [ ! -f ${SERVER_DIR}/config/config.cfg ]; then
|
||||
echo "---'config.cfg' not found downloading---"
|
||||
if [ ! -d ${SERVER_DIR}/config ]; then
|
||||
mkdir ${SERVER_DIR}/config
|
||||
fi
|
||||
cd ${SERVER_DIR}/config
|
||||
if wget -q -nc --show-progress --progress=bar:force:noscroll https://raw.githubusercontent.com/ich777/docker-steamcmd-server/theforest/config/config.cfg ; then
|
||||
echo "---Successfully downloaded 'config.cfg'---"
|
||||
else
|
||||
echo "---Something went wrong, can't download 'config.cfg', putting server in sleep mode---"
|
||||
sleep infinity
|
||||
fi
|
||||
fi
|
||||
echo "---Checking if WINE workdirectory is present---"
|
||||
if [ ! -d ${SERVER_DIR}/WINE64 ]; then
|
||||
echo "---WINE workdirectory not found, creating please wait...---"
|
||||
echo "---WINE workdirectory not found, creating please wait...---"
|
||||
mkdir ${SERVER_DIR}/WINE64
|
||||
else
|
||||
echo "---WINE workdirectory found---"
|
||||
echo "---WINE workdirectory found---"
|
||||
fi
|
||||
echo "---Checking if WINE is properly installed---"
|
||||
if [ ! -d ${SERVER_DIR}/WINE64/drive_c/windows ]; then
|
||||
echo "---Setting up WINE---"
|
||||
echo "---Setting up WINE---"
|
||||
cd ${SERVER_DIR}
|
||||
winecfg > /dev/null 2>&1
|
||||
sleep 15
|
||||
else
|
||||
echo "---WINE properly set up---"
|
||||
echo "---WINE properly set up---"
|
||||
fi
|
||||
echo "---Checking if dotnet45 is installed---"
|
||||
if [ ! -f ${SERVER_DIR}/dotnet45 ]; then
|
||||
echo "---dotnet45 not installed, please wait installing...---"
|
||||
find /tmp -name ".X99*" -exec rm -f {} \; > /dev/null 2>&1
|
||||
/opt/scripts/start-Xvfb.sh 2>/dev/null &
|
||||
echo "---...this can take some time...---"
|
||||
sleep 5
|
||||
/usr/bin/winetricks -q dotnet45 2>/dev/null
|
||||
wine64 ${SERVER_DIR}/Binaries/Win64/UDK.exe server coldmap1?steamsockets >/dev/null 2&>1 &
|
||||
sleep 10
|
||||
kill $(pidof UDK.exe)
|
||||
kill $(pidof Xvfb)
|
||||
sed -i "/^Password=/c\Password=Docker" ${SERVER_DIR}/UDKGame/Config/UDKDedServerSettings.ini
|
||||
sed -i "/^AdminPassword=/c\AdminPassword=adminDocker" ${SERVER_DIR}/UDKGame/Config/UDKDedServerSettings.ini
|
||||
sed -i "/^ServerName=/c\ServerName=Subsistence Docker" ${SERVER_DIR}/UDKGame/Config/UDKDedServerSettings.ini
|
||||
sed -i "/^ServerDescription=/c\ServerDescription=Subsistence running in Docker" ${SERVER_DIR}/UDKGame/Config/UDKDedServerSettings.ini
|
||||
sed -i "/^HostedByName=/c\HostedByName=Unraid" ${SERVER_DIR}/UDKGame/Config/UDKDedServerSettings.ini
|
||||
touch ${SERVER_DIR}/dotnet45
|
||||
echo "---Installation from dotnet45 finished!---"
|
||||
else
|
||||
echo "---dotnet45 found! Continuing...---"
|
||||
fi
|
||||
|
||||
echo "---Checking for old display lock files---"
|
||||
find /tmp -name ".X99*" -exec rm -f {} \; > /dev/null 2>&1
|
||||
chmod -R ${DATA_PERM} ${DATA_DIR}
|
||||
echo "---Server ready---"
|
||||
|
||||
echo "---Starting Xvfb server---"
|
||||
screen -S Xvfb -L -Logfile ${SERVER_DIR}/XvfbLog.0 -d -m /opt/scripts/start-Xvfb.sh
|
||||
sleep 5
|
||||
|
||||
echo "---Start Server---"
|
||||
cd ${SERVER_DIR}
|
||||
xvfb-run --auto-servernum --server-args='-screen 0 640x480x24:32' wine64 ${SERVER_DIR}/TheForestDedicatedServer.exe -batchmode -dedicated -savefolderpath "${SERVER_DIR}/saves/" -configfilepath "${SERVER_DIR}/config/config.cfg" ${GAME_PARAMS}
|
||||
if [ ! -f ${SERVER_DIR}/Binaries/Win64/UDK.exe ]; then
|
||||
echo "---Something went wrong, can't find the executable, putting container into sleep mode!---"
|
||||
sleep infinity
|
||||
else
|
||||
cd ${SERVER_DIR}/Binaries/Win64
|
||||
screen -S UDK -d -m wine64 ${SERVER_DIR}/Binaries/Win64/UDK.exe server coldmap1?steamsockets -log ${GAME_PARAMS}
|
||||
sleep 2
|
||||
/opt/scripts/start-watchdog.sh &
|
||||
tail -n 9999 -f ${SERVER_DIR}/UDKGame/Logs/Launch.log
|
||||
fi
|
8
scripts/start-watchdog.sh
Normal file
8
scripts/start-watchdog.sh
Normal file
@@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
killpid="$(pidof UDK.exe)"
|
||||
while true
|
||||
do
|
||||
tail --pid=$killpid -f /dev/null
|
||||
kill "$(pidof tail)"
|
||||
exit 0
|
||||
done
|
@@ -26,8 +26,8 @@ chown -R ${UID}:${GID} ${DATA_DIR}
|
||||
|
||||
echo "---Starting...---"
|
||||
term_handler() {
|
||||
kill -SIGINT $(pgrep TheForestDedica)
|
||||
tail --pid=$(pgrep TheForestDedica) -f 2>/dev/null
|
||||
kill -SIGINT $(pidof UDK.exe)
|
||||
tail --pid=$(pidof UDK.exe) -f 2>/dev/null
|
||||
exit 143;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user