Compare commits
43 Commits
Author | SHA1 | Date | |
---|---|---|---|
4ad44c6236 | |||
c2f12e4973 | |||
5bb0fd1b97 | |||
795dd23ff6 | |||
06a69209e6 | |||
3dc0a90fe0 | |||
4b6613b811 | |||
1ad09f8f97 | |||
22f77bcd6a | |||
53f2c85cc3 | |||
1f180eba29 | |||
341fe7ab26 | |||
8452d04cd3 | |||
8420cc945a | |||
73f5b651d7 | |||
c695153cb8 | |||
a0952e7858 | |||
29d9a371be | |||
7472226716 | |||
92014b7df1 | |||
d5ab33a6da | |||
2066dd1372 | |||
ede2475c59 | |||
77c56e7ddc | |||
a5fa9fa20b | |||
f11eaf0015 | |||
11071e951e | |||
fa186d191d | |||
8f93ce03cb | |||
454730e8dc | |||
8cda691904 | |||
6b69441ce5 | |||
2562d194f5
|
|||
7265410450
|
|||
6391c97177
|
|||
c46277eacf
|
|||
e30084bb15
|
|||
02e471d02d
|
|||
ec253bc1dd
|
|||
3578a738a3
|
|||
cb2ccad743
|
|||
b87b184d2b | |||
ae0d4cfa5e |
15
Dockerfile
15
Dockerfile
@@ -1,18 +1,18 @@
|
||||
FROM ich777/winehq-baseimage
|
||||
|
||||
LABEL maintainer="admin@minenet.at"
|
||||
LABEL org.opencontainers.image.authors="admin@minenet.at"
|
||||
LABEL org.opencontainers.image.source="https://github.com/ich777/docker-steamcmd-server"
|
||||
|
||||
RUN dpkg --add-architecture i386 && \
|
||||
apt-get update && \
|
||||
apt-get -y install lib32gcc1 screen xvfb && \
|
||||
apt-get -y install lib32gcc-s1 screen xvfb winbind mariadb-server && \
|
||||
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 WS_CONTENT=""
|
||||
ENV GAME_PARAMS=""
|
||||
ENV GAME_PARAMS="-world 1"
|
||||
ENV VALIDATE=""
|
||||
ENV UMASK=000
|
||||
ENV UID=99
|
||||
@@ -27,7 +27,12 @@ RUN mkdir $DATA_DIR && \
|
||||
mkdir $SERVER_DIR && \
|
||||
useradd -d $DATA_DIR -s /bin/bash $USER && \
|
||||
chown -R $USER $DATA_DIR && \
|
||||
ulimit -n 2048
|
||||
ulimit -n 2048 && \
|
||||
/etc/init.d/mariadb start && \
|
||||
mysql -u root -e "CREATE USER IF NOT EXISTS 'steam'@'%' IDENTIFIED BY 'lifyo';FLUSH PRIVILEGES;" && \
|
||||
mysql -u root -e "GRANT ALL PRIVILEGES ON *.* TO 'steam'@'%' IDENTIFIED BY 'lifyo';" && \
|
||||
mysql -u root -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'LiFYO';FLUSH PRIVILEGES;" && \
|
||||
echo "\n[mysqld]\ndatadir=/serverdata/serverfiles/.database/" >> /etc/alternatives/my.cnf
|
||||
|
||||
ADD /scripts/ /opt/scripts/
|
||||
RUN chmod -R 770 /opt/scripts/
|
||||
|
40
README.md
40
README.md
@@ -1,45 +1,43 @@
|
||||
# SteamCMD in Docker optimized for Unraid
|
||||
This Docker will download and install SteamCMD. It will also install Counter-Strike: Source and run it. Update Notice: Simply restart the container if a newer version of the game is available.
|
||||
This Docker will download and install SteamCMD. It will also install Life is Feudal: Your Own and run it.
|
||||
|
||||
Initial server configuration:
|
||||
**Servername:** LiF Docker **Password:** Docker **Admin Password:** adminDocker
|
||||
|
||||
**ATTENTION:** First startup can take very long since it downloads the gameserver files and it also installs the runtimes which can take quite some time!
|
||||
|
||||
Update Notice: Simply restart the container if a newer version of the game is available.
|
||||
|
||||
## Env params
|
||||
| Name | Value | Example |
|
||||
| --- | --- | --- |
|
||||
| STEAMCMD_DIR | Folder for SteamCMD | /serverdata/steamcmd |
|
||||
| SERVER_DIR | Folder for gamefile | /serverdata/serverfiles |
|
||||
| GAME_ID | SteamID for server | 232330 |
|
||||
| GAME_NAME | SRCDS gamename | cstrike |
|
||||
| GAME_PARAMS | Values to start the server | -secure +maxplayers 32 +map de_dust2 |
|
||||
| GAME_PARAMS | Values to start the server if needed. | 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: '320850 -beta YOURBRANCH' (without quotes, replace YOURBRANCH with the branch or version you want to install). | 320850 |
|
||||
| UID | User Identifier | 99 |
|
||||
| GID | Group Identifier | 100 |
|
||||
| GAME_PORT | Port the server will be running on | 27015 |
|
||||
| VALIDATE | Validates the game data | true |
|
||||
| VALIDATE | Validates the game data | false |
|
||||
| USERNAME | Leave blank for anonymous login | blank |
|
||||
| PASSWRD | Leave blank for anonymous login | blank |
|
||||
|
||||
***ATTENTION: You have to disable Steam Guard for games that require authentication, Steam recommends to create a seperate account for dedicated servers***
|
||||
|
||||
>**NOTE** GAME_ID values can be found [here](https://developer.valvesoftware.com/wiki/Dedicated_Servers_List)
|
||||
|
||||
> And for GAME_NAME there is no list, so a quick search should give you the result
|
||||
|
||||
## Run example
|
||||
```
|
||||
docker run --name CSSource -d \
|
||||
-p 27015:27015 -p 27015:27015/udp \
|
||||
--env 'GAME_ID=232330' \
|
||||
--env 'GAME_NAME=cstrike' \
|
||||
--env 'GAME_PORT=27015' \
|
||||
--env 'GAME_PARAMS=-secure +maxplayers 32 +map de_dust2' \
|
||||
docker run --name LifeIsFeudal-YourOwn -d \
|
||||
-p 28000-28003 -p 28000-28003/udp \
|
||||
--env 'GAME_ID=320850' \
|
||||
--env 'UID=99' \
|
||||
--env 'GID=100' \
|
||||
--volume /mnt/user/appdata/steamcmd:/serverdata/steamcmd \
|
||||
--volume /mnt/user/appdata/cstrikesource:/serverdata/serverfiles \
|
||||
ich777/steamcmd:latest
|
||||
--volume /path/to/steamcmd:/serverdata/steamcmd \
|
||||
--volume /path/to/lifeisfeudal-yo:/serverdata/serverfiles \
|
||||
ich777/steamcmd:lifyo
|
||||
```
|
||||
>**NOTE** port 26900 is the port for vac, in case of multiple servers make sure these are not the same
|
||||
|
||||
|
||||
This Docker was mainly edited for better use with Unraid, if you don't use Unraid you should definitely try it!
|
||||
|
||||
|
||||
This Docker is forked from mattieserver, thank you for this wonderfull Docker.
|
||||
|
||||
### Support Thread: https://forums.unraid.net/topic/79530-support-ich777-gameserver-dockers/
|
||||
|
@@ -1,5 +0,0 @@
|
||||
[OnlineSubsystem]
|
||||
ServerName=Docker ConanExile
|
||||
ServerPassword=Docker
|
||||
|
||||
|
@@ -1,3 +0,0 @@
|
||||
[ServerSettings]
|
||||
MaxNudity=2
|
||||
AdminPassword=adminDocker
|
2
config/server_config.xml
Normal file
2
config/server_config.xml
Normal file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<server_data port="25564" name="Stormworks Docker" save_name="autosave_server" max_players="32" password="Docker" day_night_length="60" sunrise="0.25" sunset="0.791" infinite_resources="false" unlock_all_islands="false" settings_menu="false" base_island="data/tiles/island12.xml" settings_menu_lock="false" infinite_batteries="false" infinite_fuel="false" engine_overheating="false" ceasefire="false" infinite_ammo="false" no_clip="false" map_teleport="false" vehicle_spawn="false" photo_mode="false" respawning="false" cleanup_vehicle="false" clear_fow="false" third_person="true" third_person_vehicle="true" vehicle_damage="false" player_damage="false" npc_damage="false" aggressive_animals="false" sea_monsters="false" lightning="true" teleport_vehicle="true" fast_travel="true" starting_currency="20000" despawn_on_leave="false" map_show_players="false" map_show_vehicles="false" show_3d_waypoints="false" show_name_plates="false" override_weather="false" override_time="false" override_wind="false" physics_timestep="0" wildlife_enabled="true" fish_spawn_rate="2" unlock_components="true" dlc_weapons="false" dlc_arid="false"/>
|
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
|
@@ -23,15 +23,15 @@ if [ "${USERNAME}" == "" ]; then
|
||||
echo "---Validating installation---"
|
||||
${STEAMCMD_DIR}/steamcmd.sh \
|
||||
+@sSteamCmdForcePlatformType windows \
|
||||
+login anonymous \
|
||||
+force_install_dir ${SERVER_DIR} \
|
||||
+login anonymous \
|
||||
+app_update ${GAME_ID} validate \
|
||||
+quit
|
||||
else
|
||||
${STEAMCMD_DIR}/steamcmd.sh \
|
||||
+@sSteamCmdForcePlatformType windows \
|
||||
+login anonymous \
|
||||
+force_install_dir ${SERVER_DIR} \
|
||||
+login anonymous \
|
||||
+app_update ${GAME_ID} \
|
||||
+quit
|
||||
fi
|
||||
@@ -40,92 +40,24 @@ else
|
||||
echo "---Validating installation---"
|
||||
${STEAMCMD_DIR}/steamcmd.sh \
|
||||
+@sSteamCmdForcePlatformType windows \
|
||||
+login ${USERNAME} ${PASSWRD} \
|
||||
+force_install_dir ${SERVER_DIR} \
|
||||
+login ${USERNAME} ${PASSWRD} \
|
||||
+app_update ${GAME_ID} validate \
|
||||
+quit
|
||||
else
|
||||
${STEAMCMD_DIR}/steamcmd.sh \
|
||||
+@sSteamCmdForcePlatformType windows \
|
||||
+login ${USERNAME} ${PASSWRD} \
|
||||
+force_install_dir ${SERVER_DIR} \
|
||||
+login ${USERNAME} ${PASSWRD} \
|
||||
+app_update ${GAME_ID} \
|
||||
+quit
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ! -z "${WS_CONTENT}" ]; then
|
||||
echo "---Installing Workshop Content with ID('s): ${WS_CONTENT}---"
|
||||
${STEAMCMD_DIR}/steamcmd.sh \
|
||||
+@sSteamCmdForcePlatformType windows \
|
||||
+login anonymous \
|
||||
+force_install_dir ${SERVER_DIR} \
|
||||
+workshop_download_item 440900 ${WS_CONTENT// / +workshop_download_item 440900 } \
|
||||
+quit
|
||||
if [ ! -d ${SERVER_DIR}/ConanSandbox/Mods ]; then
|
||||
if [ ! -d ${SERVER_DIR}/ConanSandbox ]; then
|
||||
echo "-----------------------------------"
|
||||
echo "------Something went wrong can't find folder-"
|
||||
echo "---'ConanSandbox' putting server into sleep mode---"
|
||||
echo "-"
|
||||
sleep infinity
|
||||
fi
|
||||
echo "---Folder 'Mods' not found, creating...---"
|
||||
mkdir ${SERVER_DIR}/ConanSandbox/Mods
|
||||
fi
|
||||
if [ ! -f ${SERVER_DIR}/ConanSandbox/Mods/modlist.txt ]; then
|
||||
echo "---File 'modlist.txt' not found, creating...---"
|
||||
touch ${SERVER_DIR}/ConanSandbox/Mods/modlist.txt
|
||||
fi
|
||||
echo "---Putting workshop content into modlist---"
|
||||
find ${SERVER_DIR}/steamapps/workshop/content/ -name *.pak > ${SERVER_DIR}/ConanSandbox/Mods/modlist.txt
|
||||
fi
|
||||
|
||||
echo "---Prepare Server---"
|
||||
echo "---Looking for config files---"
|
||||
if [ ! -d ${SERVER_DIR}/ConanSandbox/Saved/Config/WindowsServer ]; then
|
||||
if [ ! -d ${SERVER_DIR}/ConanSandbox ]; then
|
||||
echo "-----------------------------------------------------------"
|
||||
echo "---Something went wrong can't find folder 'ConanSandbox'---"
|
||||
echo "--------------Putting Server into sleep mode---------------"
|
||||
sleep infinity
|
||||
fi
|
||||
if [ ! -d ${SERVER_DIR}/ConanSandbox/Saved ]; then
|
||||
mkdir ${SERVER_DIR}/ConanSandbox/Saved
|
||||
fi
|
||||
if [ ! -d ${SERVER_DIR}/ConanSandbox/Saved/Config ]; then
|
||||
mkdir ${SERVER_DIR}/ConanSandbox/Saved/Config
|
||||
fi
|
||||
if [ ! -d ${SERVER_DIR}/ConanSandbox/Saved/Config/WindowsServer ]; then
|
||||
mkdir ${SERVER_DIR}/ConanSandbox/Saved/Config/WindowsServer
|
||||
fi
|
||||
fi
|
||||
if [ ! -f ${SERVER_DIR}/ConanSandbox/Saved/Config/WindowsServer/Engine.ini ]; then
|
||||
echo "---'Engine.ini' not found, downloading template---"
|
||||
cd ${SERVER_DIR}/ConanSandbox/Saved/Config/WindowsServer
|
||||
if wget -q -nc --show-progress --progress=bar:force:noscroll https://raw.githubusercontent.com/ich777/docker-steamcmd-server/conanexiles/config/Engine.ini ; then
|
||||
echo "---Sucessfully downloaded 'Engine.ini'---"
|
||||
else
|
||||
echo "---Something went wrong, can't download 'Engine.ini', putting server in sleep mode---"
|
||||
sleep infinity
|
||||
fi
|
||||
else
|
||||
echo "---'Engine.ini' found---"
|
||||
fi
|
||||
if [ ! -f ${SERVER_DIR}/ConanSandbox/Saved/Config/WindowsServer/ServerSettings.ini ]; then
|
||||
echo "---'ServerSettings.ini' not found, downloading template---"
|
||||
cd ${SERVER_DIR}/ConanSandbox/Saved/Config/WindowsServer
|
||||
if wget -q -nc --show-progress --progress=bar:force:noscroll https://raw.githubusercontent.com/ich777/docker-steamcmd-server/conanexiles/config/ServerSettings.ini ; then
|
||||
echo "---Sucessfully downloaded 'ServerSettings.ini'---"
|
||||
else
|
||||
echo "---Something went wrong, can't download 'ServerSettings.ini', putting server in sleep mode---"
|
||||
sleep infinity
|
||||
fi
|
||||
else
|
||||
echo "---'ServerSettings.ini' found---"
|
||||
fi
|
||||
export WINEARCH=win64
|
||||
export WINEPREFIX=/serverdata/serverfiles/WINE64
|
||||
export DISPLAY=:99
|
||||
echo "---Checking if WINE workdirectory is present---"
|
||||
if [ ! -d ${SERVER_DIR}/WINE64 ]; then
|
||||
echo "---WINE workdirectory not found, creating please wait...---"
|
||||
@@ -142,11 +74,60 @@ if [ ! -d ${SERVER_DIR}/WINE64/drive_c/windows ]; then
|
||||
else
|
||||
echo "---WINE properly set up---"
|
||||
fi
|
||||
|
||||
echo "---Checking config---"
|
||||
if grep -q "<name>My own LiF server</name>" ${SERVER_DIR}/config/world_1.xml ; then
|
||||
echo "---Adding initial config parameters to config file---"
|
||||
sed -i 's/\<My own LiF server\>/LiF Docker/g' ${SERVER_DIR}/config/world_1.xml
|
||||
sed -i s/"<password><\/password>"/"<password>Docker<\/password>"/g ${SERVER_DIR}/config/world_1.xml
|
||||
sed -i s/"<adminPassword><\/adminPassword>"/"<adminPassword>adminDocker<\/adminPassword>"/g ${SERVER_DIR}/config/world_1.xml
|
||||
else
|
||||
echo "---Config check done---"
|
||||
fi
|
||||
|
||||
echo "---Checking if database is in place---"
|
||||
if [ ! -d ${SERVER_DIR}/.database ]; then
|
||||
echo "---Database not found, setting up databbase...---"
|
||||
mkdir -p ${SERVER_DIR}/.database
|
||||
cp -R /var/lib/mysql/* ${SERVER_DIR}/.database/
|
||||
else
|
||||
echo "---Database found---"
|
||||
fi
|
||||
|
||||
echo "---Checking if database configuration is in place---"
|
||||
if [ ! -f ${SERVER_DIR}/config_local.cs ]; then
|
||||
echo "---Database configuration not found, configuring...---"
|
||||
cp ${SERVER_DIR}/docs/config_local.cs ${SERVER_DIR}/config_local.cs
|
||||
sed -i 's/\<root\>/steam/g' ${SERVER_DIR}/config_local.cs
|
||||
sed -i 's/\<rootPassword\>/lifyo/g' ${SERVER_DIR}/config_local.cs
|
||||
else
|
||||
echo "---Database connection found---"
|
||||
fi
|
||||
|
||||
echo "---Starting MariaDB---"
|
||||
screen -S MariaDB -d -m mysqld_safe
|
||||
sleep 2
|
||||
|
||||
echo "---Starting Xvfb---"
|
||||
screen -S Xvfb -d -m /opt/scripts/start-Xvfb.sh
|
||||
sleep 2
|
||||
|
||||
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 "---Start Server---"
|
||||
cd ${SERVER_DIR}
|
||||
xvfb-run --auto-servernum --server-args='-screen 0 640x480x24:32' wine64 ${SERVER_DIR}/ConanSandboxServer.exe -log ${GAME_PARAMS}
|
||||
if [ ! -f ${SERVER_DIR}/ddctd_cm_yo_server.exe ]; then
|
||||
echo "---Something went wrong, can't find the executable, putting container into sleep mode!---"
|
||||
sleep infinity
|
||||
else
|
||||
cd ${SERVER_DIR}
|
||||
screen -S LiFYO -d -m wine64 ddctd_cm_yo_server.exe ${GAME_PARAMS}
|
||||
echo "---Waiting for logs...---"
|
||||
sleep 3
|
||||
/opt/scripts/start-watchdog.sh &
|
||||
cd ${SERVER_DIR}/logs
|
||||
cd $(ls -1d */ | tail -1)
|
||||
tail -n 9999 -f $(ls -t | head -n 1)
|
||||
fi
|
8
scripts/start-watchdog.sh
Normal file
8
scripts/start-watchdog.sh
Normal file
@@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
killpid="$(pidof ddctd_cm_yo_server.exe)"
|
||||
while true
|
||||
do
|
||||
tail --pid=$killpid -f /dev/null
|
||||
kill "$(pidof tail)"
|
||||
exit 0
|
||||
done
|
@@ -1,21 +1,45 @@
|
||||
#!/bin/bash
|
||||
echo "---Checking if UID: ${UID} matches user---"
|
||||
echo "---Ensuring UID: ${UID} matches user---"
|
||||
usermod -u ${UID} ${USER}
|
||||
echo "---Checking if GID: ${GID} matches user---"
|
||||
echo "---Ensuring GID: ${GID} matches user---"
|
||||
groupmod -g ${GID} ${USER} > /dev/null 2>&1 ||:
|
||||
usermod -g ${GID} ${USER}
|
||||
echo "---Setting umask to ${UMASK}---"
|
||||
umask ${UMASK}
|
||||
|
||||
echo "---Checking for optional scripts---"
|
||||
if [ -f /opt/scripts/user.sh ]; then
|
||||
echo "---Found optional script, executing---"
|
||||
chmod +x /opt/scripts/user.sh
|
||||
/opt/scripts/user.sh
|
||||
cp -f /opt/custom/user.sh /opt/scripts/start-user.sh > /dev/null 2>&1 ||:
|
||||
cp -f /opt/scripts/user.sh /opt/scripts/start-user.sh > /dev/null 2>&1 ||:
|
||||
|
||||
if [ -f /opt/scripts/start-user.sh ]; then
|
||||
echo "---Found optional script, executing---"
|
||||
chmod -f +x /opt/scripts/start-user.sh ||:
|
||||
/opt/scripts/start-user.sh || echo "---Optional Script has thrown an Error---"
|
||||
else
|
||||
echo "---No optional script found, continuing---"
|
||||
echo "---No optional script found, continuing---"
|
||||
fi
|
||||
|
||||
echo "---Starting...---"
|
||||
chown -R ${UID}:${GID} /opt/scripts
|
||||
echo "---Taking ownership of data...---"
|
||||
chown -R root:${GID} /opt/scripts
|
||||
chmod -R 750 /opt/scripts
|
||||
chown -R ${UID}:${GID} /var/lib/mysql
|
||||
chown -R ${UID}:${GID} /var/run/mysqld
|
||||
chown -R ${UID}:${GID} ${DATA_DIR}
|
||||
su ${USER} -c "/opt/scripts/start-server.sh"
|
||||
chmod -R 770 /var/lib/mysql
|
||||
chmod -R 770 /var/run/mysqld
|
||||
|
||||
echo "---Starting...---"
|
||||
term_handler() {
|
||||
kill -SIGINT $(pidof ddctd_cm_yo_server.exe)
|
||||
tail --pid=$(pidof ddctd_cm_yo_server.exe) -f 2>/dev/null
|
||||
exit 143;
|
||||
}
|
||||
|
||||
trap 'kill ${!}; term_handler' SIGTERM
|
||||
su ${USER} -c "/opt/scripts/start-server.sh" &
|
||||
killpid="$!"
|
||||
while true
|
||||
do
|
||||
wait $killpid
|
||||
exit 0;
|
||||
done
|
Reference in New Issue
Block a user