Fix like everything
This commit is contained in:
parent
d07f3f7967
commit
d42728b727
12 changed files with 365 additions and 97 deletions
16
.drone.yml
16
.drone.yml
|
|
@ -1,16 +0,0 @@
|
|||
---
|
||||
steps:
|
||||
- name: tf2-dm
|
||||
image: woodpeckerci/plugin-docker-buildx
|
||||
settings:
|
||||
registry: git.snrd.eu
|
||||
repo: git.snrd.eu/spenny.tf/dm-server
|
||||
cache_from: "git.snrd.eu/spenny.tf/dm-server:latest"
|
||||
auto_tag: true
|
||||
context: ./
|
||||
dockerfile: ./Dockerfile
|
||||
username:
|
||||
from_secret: gitea_username
|
||||
password:
|
||||
from_secret: gitea_token
|
||||
|
||||
|
|
@ -13,7 +13,7 @@ concurrency:
|
|||
env:
|
||||
USERNAME: spaenny
|
||||
REGISTRY: git.snrd.eu
|
||||
IMAGE_NAME: spenny.tf/dm-server
|
||||
IMAGE_NAME: spenny.tf/tf2-dm
|
||||
|
||||
jobs:
|
||||
docker:
|
||||
|
|
@ -52,4 +52,4 @@ jobs:
|
|||
labels: ${{ steps.meta.outputs.labels }}
|
||||
|
||||
provenance: false
|
||||
sbom: false
|
||||
sbom: false
|
||||
|
|
|
|||
|
|
@ -1,20 +0,0 @@
|
|||
---
|
||||
kind: pipeline
|
||||
type: docker
|
||||
name: build-docker
|
||||
|
||||
steps:
|
||||
- name: tf2-dm
|
||||
image: plugins/docker
|
||||
settings:
|
||||
registry: git.snrd.eu
|
||||
repo: git.snrd.eu/spenny.tf/dm-server
|
||||
cache_from: "git.snrd.eu/spenny.tf/dm-server:latest"
|
||||
auto_tag: true
|
||||
context: ./
|
||||
dockerfile: ./Dockerfile
|
||||
username:
|
||||
from_secret: gitea_username
|
||||
password:
|
||||
from_secret: gitea_token
|
||||
|
||||
280
Dockerfile
280
Dockerfile
|
|
@ -1,59 +1,233 @@
|
|||
FROM ghcr.io/melkortf/tf2-dm:latest
|
||||
LABEL maintainer="philipp@boehm.sh"
|
||||
############################
|
||||
# Build rcon
|
||||
############################
|
||||
FROM ubuntu:22.04 AS rcon-build
|
||||
WORKDIR /build
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive \
|
||||
&& export TZ=Etc/UTC \
|
||||
&& apt-get update \
|
||||
&& apt-get install -y \
|
||||
build-essential \
|
||||
git \
|
||||
cmake \
|
||||
check \
|
||||
pkg-config \
|
||||
libglib2.0-dev \
|
||||
libbsd-dev \
|
||||
&& rm -rf /var/lib/apt/lists/* \
|
||||
&& git clone https://github.com/n0la/rcon.git \
|
||||
&& mkdir rcon/build \
|
||||
&& cd rcon/build \
|
||||
&& cmake .. \
|
||||
&& make
|
||||
|
||||
############################
|
||||
# Download MetaMod + SourceMod + Plugins
|
||||
############################
|
||||
FROM ubuntu:22.04 AS plugins
|
||||
SHELL ["/bin/bash","-c"]
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive \
|
||||
&& export TZ=Etc/UTC \
|
||||
&& apt-get update \
|
||||
&& apt-get install -y --no-install-recommends unzip tar \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
WORKDIR /download
|
||||
|
||||
ARG INSTALL_DIR=/server/tf
|
||||
RUN mkdir -p "${INSTALL_DIR}"
|
||||
|
||||
# ---------- MetaMod ----------
|
||||
ARG METAMOD_VERSION=1.12.0-git1224
|
||||
ARG METAMOD_RELEASE_TAG=1.12.0.1224
|
||||
ARG METAMOD_FILE_NAME=mmsource-${METAMOD_VERSION}-linux.tar.gz
|
||||
ARG METAMOD_URL=https://github.com/alliedmodders/metamod-source/releases/download/${METAMOD_RELEASE_TAG}/${METAMOD_FILE_NAME}
|
||||
ARG METAMOD_CHECKSUM=004431fd1423fe2b07a8369ceb4214caa53ffee06fca7cc779f2d1d8cb934620
|
||||
ADD --checksum=sha256:${METAMOD_CHECKSUM} ${METAMOD_URL} .
|
||||
RUN tar xf "${METAMOD_FILE_NAME}" -C "${INSTALL_DIR}/"
|
||||
|
||||
# ---------- SourceMod ----------
|
||||
ARG SOURCEMOD_VERSION=1.12.0-git7236
|
||||
ARG SOURCEMOD_RELEASE_TAG=1.12.0.7236
|
||||
ARG SOURCEMOD_FILE_NAME=sourcemod-${SOURCEMOD_VERSION}-linux.tar.gz
|
||||
ARG SOURCEMOD_URL=https://github.com/alliedmodders/sourcemod/releases/download/${SOURCEMOD_RELEASE_TAG}/${SOURCEMOD_FILE_NAME}
|
||||
ARG SOURCEMOD_CHECKSUM=db357f27ea405720fa8ecd818fefe23db075973a506ba045307f03ba31d508ab
|
||||
ADD --checksum=sha256:${SOURCEMOD_CHECKSUM} ${SOURCEMOD_URL} .
|
||||
RUN tar xf "${SOURCEMOD_FILE_NAME}" -C "${INSTALL_DIR}/"
|
||||
|
||||
# ---------- SOAP-TF2DM ----------
|
||||
ARG SOAP_DM_FILE_NAME=soap.zip
|
||||
ARG SOAP_DM_VERSION=4.4.8
|
||||
ARG SOAP_DM_URL=https://github.com/sapphonie/SOAP-TF2DM/releases/download/v${SOAP_DM_VERSION}/${SOAP_DM_FILE_NAME}
|
||||
ARG SOAP_DM_CHECKSUM=86d118708e887643e10ae97eca278f4c4e1ecbb6ad9225a8f013a6f68f08fd2e
|
||||
ADD --checksum=sha256:${SOAP_DM_CHECKSUM} ${SOAP_DM_URL} .
|
||||
RUN unzip -q "${SOAP_DM_FILE_NAME}" -d "${INSTALL_DIR}/"
|
||||
|
||||
# ---------- TF2 Comp Fixes ----------
|
||||
ARG COMP_FIXES_FILE_NAME=tf2-comp-fixes.zip
|
||||
ARG COMP_FIXES_VERSION=1.18.1
|
||||
ARG COMP_FIXES_URL=https://github.com/ldesgoui/tf2-comp-fixes/releases/download/v${COMP_FIXES_VERSION}/${COMP_FIXES_FILE_NAME}
|
||||
ARG COMP_FIXES_CHECKSUM=781cc48e13aa896f4856fa80d78a6aaaffc221c20e7fa627c40ddc9cc71c3614
|
||||
ADD --checksum=sha256:${COMP_FIXES_CHECKSUM} ${COMP_FIXES_URL} .
|
||||
RUN unzip -q -o "${COMP_FIXES_FILE_NAME}" -d "${INSTALL_DIR}/"
|
||||
|
||||
# ---------- SourceBans++ ----------
|
||||
ARG SOURCEBANS_VERSION=2.0.0
|
||||
ARG SOURCEBANS_FILE_NAME=sourcebans-pp-${SOURCEBANS_VERSION}.plugin-only.tar.gz
|
||||
ARG SOURCEBANS_URL=https://github.com/sbpp/sourcebans-pp/releases/download/${SOURCEBANS_VERSION}/${SOURCEBANS_FILE_NAME}
|
||||
ARG SOURCEBANS_CHECKSUM=b5ce9c417c6c6efde01a1850114d3eb7ef8aec1f52e088a5382d5aa0cd85ca39
|
||||
ADD --checksum=sha256:${SOURCEBANS_CHECKSUM} ${SOURCEBANS_URL} .
|
||||
RUN tar xf "${SOURCEBANS_FILE_NAME}" -C "${INSTALL_DIR}/"
|
||||
|
||||
# ---------- TF2Rue ----------
|
||||
ARG TF2RUE_FILE_NAME=tf2rue.zip
|
||||
ARG TF2RUE_VERSION=v0.0.13
|
||||
ARG TF2RUE_URL=https://github.com/sapphonie/tf2rue/releases/download/${TF2RUE_VERSION}/${TF2RUE_FILE_NAME}
|
||||
ARG TF2RUE_CHECKSUM=670f228f287bb55c4418ff8241032582189621a944a420f42ddae9db6754b6cd
|
||||
ADD --checksum=sha256:${TF2RUE_CHECKSUM} ${TF2RUE_URL} .
|
||||
RUN unzip -q -n "${TF2RUE_FILE_NAME}" -d "${INSTALL_DIR}/addons/sourcemod/"
|
||||
|
||||
# ---------- AFK Manager ----------
|
||||
ARG AFK_MANAGER_FILE_NAME=afk_manager4.smx
|
||||
ARG AFK_MANAGER_URL=https://www.sourcemod.net/vbcompiler.php?file_id=170330
|
||||
ARG AFK_MANAGER_CHECKSUM=cd41cf4195f8e54c579ed4fe730457a5c81f8007478ff9cd75b9659f8859c22b
|
||||
ADD --checksum=sha256:${AFK_MANAGER_CHECKSUM} ${AFK_MANAGER_URL} "${INSTALL_DIR}/addons/sourcemod/plugins/${AFK_MANAGER_FILE_NAME}"
|
||||
|
||||
# ---------- Class Restrict ----------
|
||||
ARG CLASS_RESTRICT_FILE_NAME=classrestrict.smx
|
||||
ARG CLASS_RESTRICT_URL=https://www.sourcemod.net/vbcompiler.php?file_id=27957
|
||||
ARG CLASS_RESTRICT_CHECKSUM=bce83fef7c80f66f0d1a102433aebdd5201d8ef2e3e5ea4442d1fe30f84938e9
|
||||
ADD --checksum=sha256:${CLASS_RESTRICT_CHECKSUM} ${CLASS_RESTRICT_URL} "${INSTALL_DIR}/addons/sourcemod/plugins/${CLASS_RESTRICT_FILE_NAME}"
|
||||
|
||||
|
||||
ARG METAMOD_VERSION_MAJOR=2
|
||||
ARG METAMOD_VERSION_MINOR=0
|
||||
ARG METAMOD_VERSION_PATCH=0
|
||||
ARG METAMOD_VERSION_BUILD=1331
|
||||
ARG METAMOD_VERSION=${METAMOD_VERSION_MAJOR}.${METAMOD_VERSION_MINOR}.${METAMOD_VERSION_PATCH}-git${METAMOD_VERSION_BUILD}
|
||||
ARG METAMOD_TARBALL_FILE_NAME=mmsource-${METAMOD_VERSION}-linux.tar.gz
|
||||
ARG METAMOD_TARBALL_URL=https://mms.alliedmods.net/mmsdrop/${METAMOD_VERSION_MAJOR}.${METAMOD_VERSION_MINOR}/${METAMOD_TARBALL_FILE_NAME}
|
||||
# ---------- System2 ----------
|
||||
ARG SYSTEM2_URL=https://github.com/dordnung/System2/releases/download/v3.3.2/system2.zip
|
||||
ADD ${SYSTEM2_URL} system2.zip
|
||||
RUN unzip -q -o system2.zip -d "${INSTALL_DIR}/addons/sourcemod/" && rm system2.zip
|
||||
|
||||
ARG SOURCEMOD_VERSION_MAJOR=1
|
||||
ARG SOURCEMOD_VERSION_MINOR=13
|
||||
ARG SOURCEMOD_VERSION_PATCH=0
|
||||
ARG SOURCEMOD_VERSION_BUILD=7211
|
||||
ARG SOURCEMOD_VERSION=${SOURCEMOD_VERSION_MAJOR}.${SOURCEMOD_VERSION_MINOR}.${SOURCEMOD_VERSION_PATCH}-git${SOURCEMOD_VERSION_BUILD}
|
||||
ARG SOURCEMOD_TARBALL_FILE_NAME=sourcemod-${SOURCEMOD_VERSION}-linux.tar.gz
|
||||
ARG SOURCEMOD_TARBALL_URL=https://sm.alliedmods.net/smdrop/${SOURCEMOD_VERSION_MAJOR}.${SOURCEMOD_VERSION_MINOR}/${SOURCEMOD_TARBALL_FILE_NAME}
|
||||
# ---------- StAC ----------
|
||||
ARG STAC_URL=https://github.com/sapphonie/StAC-tf2/releases/download/v6.3.8/stac.zip
|
||||
ADD ${STAC_URL} stac.zip
|
||||
RUN unzip -q -o stac.zip -d "${INSTALL_DIR}/addons/sourcemod/" && rm stac.zip
|
||||
|
||||
RUN \
|
||||
wget -nv "${METAMOD_TARBALL_URL}" \
|
||||
&& wget -nv "${SOURCEMOD_TARBALL_URL}" \
|
||||
&& tar xf "${METAMOD_TARBALL_FILE_NAME}" -C "${SERVER_DIR}/tf" \
|
||||
&& tar xf "${SOURCEMOD_TARBALL_FILE_NAME}" -C "${SERVER_DIR}/tf" \
|
||||
&& rm "${METAMOD_TARBALL_FILE_NAME}" \
|
||||
&& rm "${SOURCEMOD_TARBALL_FILE_NAME}" \
|
||||
# download plugins
|
||||
&& wget -nv "https://github.com/dordnung/System2/releases/download/v3.3.2/system2.zip" -O system2.zip \
|
||||
&& wget -nv "https://github.com/sapphonie/StAC-tf2/releases/download/v6.3.8/stac.zip" -O stac.zip \
|
||||
&& wget -nv "https://github.com/sapphonie/sourcemod-nativevotes-updated/releases/download/workflow-build63/nativevotes_sm_1.11.zip" -O nativevotes.zip \
|
||||
&& wget -nv "https://github.com/ErikMinekus/sm-advertisements/releases/download/2.1.1/release.tar.gz" -O advertisements.tar.gz \
|
||||
&& wget -nv "http://users.alliedmods.net/~kyles/builds/SteamWorks/SteamWorks-git132-linux.tar.gz" -O SteamWorks.tar.gz \
|
||||
&& wget -nv "https://gitlab.com/Zipcore/Discord/-/raw/master/plugins/discord.smx" -O discord.smx \
|
||||
&& wget -nv "https://gitlab.com/Zipcore/Discord/-/raw/master/plugins/discord_sourcebans.smx" -O discord_sourcebans.smx \
|
||||
&& wget -nv "https://gitlab.com/Zipcore/Discord/-/raw/master/plugins/discord_sourcecomms.smx" -O discord_sourcecomms.smx \
|
||||
&& wget -nv "https://github.com/eaasye/soapbalancer/raw/master/soapbalancer.smx" -O soapbalancer.smx \
|
||||
&& wget -nv "https://github.com/JoinedSenses/sm-ext-socket/releases/download/v0.2/socket.ext.so" -O socket.ext.so \
|
||||
&& wget -nv "https://github.com/sapphonie/tf2rue/releases/download/v0.0.13/tf2rue.zip" -O tf2rue.zip \
|
||||
# install plugins
|
||||
&& unzip -o system2.zip -d "${SERVER_DIR}/tf/addons/sourcemod/" \
|
||||
&& unzip -o stac.zip -d "${SERVER_DIR}/tf/addons/sourcemod/" \
|
||||
&& unzip -o nativevotes.zip -d "${SERVER_DIR}/tf/" \
|
||||
&& unzip -o tf2rue.zip -d "${SERVER_DIR}/tf/addons/sourcemod/" \
|
||||
&& tar xf advertisements.tar.gz -C "${SERVER_DIR}/tf/" \
|
||||
&& tar xf SteamWorks.tar.gz -C "${SERVER_DIR}/tf/" \
|
||||
&& mv discord.smx "${SERVER_DIR}/tf/addons/sourcemod/plugins/discord.smx" \
|
||||
&& mv discord_sourcebans.smx "${SERVER_DIR}/tf/addons/sourcemod/plugins/discord_sourcebans.smx" \
|
||||
&& mv discord_sourcecomms.smx "${SERVER_DIR}/tf/addons/sourcemod/plugins/discord_sourcecomms.smx" \
|
||||
&& mv soapbalancer.smx "${SERVER_DIR}/tf/addons/sourcemod/plugins/soapbalancer.smx" \
|
||||
&& mv socket.ext.so "${SERVER_DIR}/tf/addons/sourcemod/extensions/" \
|
||||
# clean everything up
|
||||
&& rm "${SERVER_DIR}/tf/addons/sourcemod/plugins/admin-flatfile.smx" "system2.zip" "stac.zip" "nativevotes.zip" "tf2rue.zip"
|
||||
# ---------- NativeVotes ----------
|
||||
ARG NATIVEVOTES_URL=https://github.com/sapphonie/sourcemod-nativevotes-updated/releases/download/workflow-build63/nativevotes_sm_1.11.zip
|
||||
ADD ${NATIVEVOTES_URL} nativevotes.zip
|
||||
RUN unzip -q -o nativevotes.zip -d "${INSTALL_DIR}/" && rm nativevotes.zip
|
||||
|
||||
COPY server.cfg.template "${SERVER_DIR}/tf/cfg/server.cfg.template"
|
||||
COPY mapcycle.txt "${SERVER_DIR}/tf/cfg/mapcycle.txt"
|
||||
COPY motd.txt "${SERVER_DIR}/tf/cfg/motd.txt"
|
||||
# ---------- Advertisements ----------
|
||||
ARG ADVERTISEMENTS_URL=https://github.com/ErikMinekus/sm-advertisements/releases/download/2.1.1/release.tar.gz
|
||||
ADD ${ADVERTISEMENTS_URL} advertisements.tar.gz
|
||||
RUN tar xf advertisements.tar.gz -C "${INSTALL_DIR}/" && rm advertisements.tar.gz
|
||||
|
||||
CMD ["+sv_pure", "2", "+map", "cp_snakewater_final1", "+maxplayers", "8"]
|
||||
# ---------- SteamWorks ----------
|
||||
ARG STEAMWORKS_URL=http://users.alliedmods.net/~kyles/builds/SteamWorks/SteamWorks-git132-linux.tar.gz
|
||||
ADD ${STEAMWORKS_URL} SteamWorks.tar.gz
|
||||
RUN tar xf SteamWorks.tar.gz -C "${INSTALL_DIR}/" && rm SteamWorks.tar.gz
|
||||
|
||||
# ---------- Discord Plugins ----------
|
||||
ADD https://gitlab.com/Zipcore/Discord/-/raw/master/plugins/discord.smx ${INSTALL_DIR}/addons/sourcemod/plugins/discord.smx
|
||||
ADD https://gitlab.com/Zipcore/Discord/-/raw/master/plugins/discord_sourcebans.smx ${INSTALL_DIR}/addons/sourcemod/plugins/discord_sourcebans.smx
|
||||
ADD https://gitlab.com/Zipcore/Discord/-/raw/master/plugins/discord_sourcecomms.smx ${INSTALL_DIR}/addons/sourcemod/plugins/discord_sourcecomms.smx
|
||||
|
||||
# ---------- SoapBalancer ----------
|
||||
ADD https://github.com/eaasye/soapbalancer/raw/master/soapbalancer.smx ${INSTALL_DIR}/addons/sourcemod/plugins/soapbalancer.smx
|
||||
|
||||
# ---------- Socket Extension ----------
|
||||
ADD https://github.com/JoinedSenses/sm-ext-socket/releases/download/v0.2/socket.ext.so ${INSTALL_DIR}/addons/sourcemod/extensions/socket.ext.so
|
||||
|
||||
RUN rm -f "${INSTALL_DIR}/addons/sourcemod/plugins/admin-flatfile.smx"
|
||||
|
||||
############################
|
||||
# Final image
|
||||
############################
|
||||
FROM steamcmd/steamcmd:ubuntu-22
|
||||
|
||||
LABEL maintainer="garrappachc@gmail.com"
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive \
|
||||
&& export TZ=Etc/UTC \
|
||||
&& dpkg --add-architecture i386 \
|
||||
&& apt-get update \
|
||||
&& apt-get install -y software-properties-common \
|
||||
&& add-apt-repository multiverse \
|
||||
&& apt-get update \
|
||||
&& apt-get install -y --no-install-recommends \
|
||||
lib32gcc-s1 lib32z1 libncurses5:i386 libbz2-1.0:i386 \
|
||||
lib32stdc++6 libtinfo5:i386 libcurl3-gnutls:i386 \
|
||||
wget unzip gettext-base libbsd0 \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
ARG USER=tf2
|
||||
ARG HOME=/home/${USER}
|
||||
ARG SERVER_DIR=${HOME}/server
|
||||
ARG APP_ID=232250
|
||||
|
||||
ENV USER=${USER} HOME=${HOME} SERVER_DIR=${SERVER_DIR} APP_ID=${APP_ID} SRCDS_EXEC=srcds_run
|
||||
|
||||
RUN useradd --home-dir ${HOME} --create-home --shell /bin/bash ${USER}
|
||||
|
||||
USER ${USER}
|
||||
WORKDIR ${HOME}
|
||||
|
||||
COPY misc/maps_to_keep misc/tf2.txt.template ./
|
||||
COPY --chmod=775 utils/install_tf2.sh ./
|
||||
|
||||
RUN envsubst < tf2.txt.template > tf2.txt \
|
||||
&& steamcmd +help +quit \
|
||||
&& ./install_tf2.sh \
|
||||
&& find ${SERVER_DIR}/tf/maps -type f | grep -v "$(cat maps_to_keep)" | xargs -r rm -rf \
|
||||
&& rm maps_to_keep \
|
||||
&& mkdir -p ~/.steam \
|
||||
&& ln -s ~/.local/share/Steam/steamcmd/linux32 ~/.steam/sdk32
|
||||
|
||||
ARG TICKRATE_FILE_NAME=css-tickrate-release-linux-x86.zip
|
||||
ARG TICKRATE_VERSION=1.4.5
|
||||
ARG TICKRATE_URL=https://github.com/angelfor3v3r/source-tickrate/releases/download/v${TICKRATE_VERSION}/${TICKRATE_FILE_NAME}
|
||||
ARG TICKRATE_CHECKSUM=661145ad08af61ad0327586ed56e820e7f178665c92ffa95b8891cd1a3d38f7e
|
||||
|
||||
ADD --chown=tf2:tf2 --checksum=sha256:${TICKRATE_CHECKSUM} ${TICKRATE_URL} ${TICKRATE_FILE_NAME}
|
||||
|
||||
RUN unzip -qo "${TICKRATE_FILE_NAME}" -d "${SERVER_DIR}/tf" \
|
||||
&& rm "${TICKRATE_FILE_NAME}"
|
||||
|
||||
COPY --from=plugins --chown=tf2:tf2 /server/tf/ ${SERVER_DIR}/tf/
|
||||
COPY --from=rcon-build /build/rcon/build/rcon ${SERVER_DIR}/rcon
|
||||
|
||||
RUN mkdir -p "${SERVER_DIR}/tf/addons/sourcemod/plugins/disabled" \
|
||||
&& mv "${SERVER_DIR}/tf/addons/sourcemod/plugins/funcommands.smx" "${SERVER_DIR}/tf/addons/sourcemod/plugins/disabled/" || true \
|
||||
&& mv "${SERVER_DIR}/tf/addons/sourcemod/plugins/funvotes.smx" "${SERVER_DIR}/tf/addons/sourcemod/plugins/disabled/" || true
|
||||
|
||||
COPY misc/server.cfg.template ${SERVER_DIR}/tf/cfg/server.cfg.template
|
||||
COPY soap_tf2dm.cfg ${SERVER_DIR}/tf/cfg/sourcemod/
|
||||
COPY misc/mapcycle.txt ${SERVER_DIR}/tf/cfg/mapcycle.txt
|
||||
COPY misc/motd.txt ${SERVER_DIR}/tf/cfg/motd.txt
|
||||
COPY afk_manager.cfg ${SERVER_DIR}/tf/cfg/sourcemod/
|
||||
COPY custom_whitelist_11769.txt ${SERVER_DIR}/tf/cfg/
|
||||
COPY afk_manager.phrases.txt ${SERVER_DIR}/tf/addons/sourcemod/translations/
|
||||
|
||||
COPY --chmod=755 utils/entrypoint.sh .
|
||||
COPY utils/healthcheck.sh .
|
||||
|
||||
ENV IP=0.0.0.0 PORT=27015 CLIENT_PORT=27016 STEAM_PORT=27018 STV_PORT=27020
|
||||
ENV SERVER_TOKEN="" ENABLE_FAKE_IP=0
|
||||
ENV RCON_PASSWORD=123456
|
||||
ENV SERVER_HOSTNAME="A Team Fortress 2 server"
|
||||
ENV SERVER_PASSWORD=""
|
||||
ENV STV_NAME="Source TV"
|
||||
ENV STV_TITLE="A Team Fortress 2 server Source TV"
|
||||
ENV STV_PASSWORD=""
|
||||
ENV DOWNLOAD_URL="https://fastdl.serveme.tf/"
|
||||
|
||||
WORKDIR ${SERVER_DIR}
|
||||
|
||||
ENTRYPOINT ["./entrypoint.sh"]
|
||||
CMD ["+sv_pure","2","+map","cp_snakewater_final1","+maxplayers","8"]
|
||||
|
||||
EXPOSE 27015/tcp
|
||||
EXPOSE 27015/udp
|
||||
EXPOSE 27020/udp
|
||||
|
||||
HEALTHCHECK --interval=30s --timeout=30s --start-period=20s --retries=3 CMD ["./healthcheck.sh"]
|
||||
|
|
|
|||
1
misc/maps_to_keep
Normal file
1
misc/maps_to_keep
Normal file
|
|
@ -0,0 +1 @@
|
|||
cp_badlands
|
||||
6
misc/tf2.txt.template
Normal file
6
misc/tf2.txt.template
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
@ShutdownOnFailedCommand 1
|
||||
@NoPromptForPassword 1
|
||||
force_install_dir ${SERVER_DIR}
|
||||
login anonymous
|
||||
app_update ${APP_ID}
|
||||
quit
|
||||
82
utils/entrypoint.sh
Normal file
82
utils/entrypoint.sh
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
#!/bin/bash
|
||||
|
||||
auto_envsubst() {
|
||||
local template_dir="${SERVER_DIR}/tf/cfg"
|
||||
local suffix=".template"
|
||||
|
||||
find "$template_dir" -follow -type f -name "*$suffix" -print | while read -r template; do
|
||||
output_file="${template%$suffix}"
|
||||
envsubst < "${template}" > "${output_file}"
|
||||
done
|
||||
}
|
||||
|
||||
faketty() {
|
||||
# https://stackoverflow.com/questions/1401002/how-to-trick-an-application-into-thinking-its-stdout-is-a-terminal-not-a-pipe/60279429#60279429
|
||||
tmp=$(mktemp)
|
||||
[ "$tmp" ] || return 99
|
||||
cmd="$(printf '%q ' "$@")"'; echo $? > '$tmp
|
||||
script -qfc "/bin/sh -c $(printf "%q " "$cmd")" /dev/null
|
||||
[ -s $tmp ] || return 99
|
||||
err=$(cat $tmp)
|
||||
rm -f $tmp
|
||||
return $err
|
||||
}
|
||||
|
||||
quit() {
|
||||
echo "*** Stopping ***"
|
||||
"${SERVER_DIR}/rcon" -H ${IP/0.0.0.0/127.0.0.1} -p ${PORT} -P ${RCON_PASSWORD} quit
|
||||
sleep 5
|
||||
exit 0
|
||||
}
|
||||
|
||||
trap 'quit' SIGTERM
|
||||
|
||||
auto_envsubst
|
||||
|
||||
TICKRATE_FLAGS=()
|
||||
if [ -n "${TICKRATE}" ]; then
|
||||
case "${TICKRATE}" in
|
||||
100)
|
||||
echo "[Tickrate-Selector] Setting High-Performance 100 Tickrate mode..."
|
||||
TICKRATE_FLAGS=("-tickrate" "100" "+sv_maxupdaterate" "100" "+sv_minupdaterate" "100" "+sv_maxcmdrate" "100" "+sv_mincmdrate" "100")
|
||||
;;
|
||||
133)
|
||||
echo "[Tickrate-Selector] Setting Competitive 133 Tickrate mode..."
|
||||
TICKRATE_FLAGS=("-tickrate" "133" "+sv_maxupdaterate" "133" "+sv_minupdaterate" "133" "+sv_maxcmdrate" "133" "+sv_mincmdrate" "133")
|
||||
;;
|
||||
200)
|
||||
echo "[Tickrate-Selector] WARNING: Setting EXTREME 200 Tickrate mode. Ensure CPU can handle this!"
|
||||
TICKRATE_FLAGS=("-tickrate" "200" "+sv_maxupdaterate" "200" "+sv_minupdaterate" "200" "+sv_maxcmdrate" "200" "+sv_mincmdrate" "200")
|
||||
;;
|
||||
*)
|
||||
echo "[Tickrate-Selector] Unknown TICKRATE='${TICKRATE}'. Falling back to default engine settings."
|
||||
;;
|
||||
esac
|
||||
else
|
||||
echo "[Tickrate-Selector] TICKRATE variable is not set. Using default 66.7 tickrate."
|
||||
fi
|
||||
|
||||
# enablefakeip switch
|
||||
if [ "$ENABLE_FAKE_IP" = "1" ]; then
|
||||
FAKE_IP_FLAG="-enablefakeip"
|
||||
else
|
||||
FAKE_IP_FLAG=""
|
||||
fi
|
||||
|
||||
faketty $SERVER_DIR/$SRCDS_EXEC \
|
||||
-game tf \
|
||||
-secured \
|
||||
$FAKE_IP_FLAG \
|
||||
"${TICKRATE_FLAGS[@]}" \
|
||||
-steam_dir ${HOME}/.steam/steamcmd \
|
||||
-steamcmd_script ${HOME}/tf2.txt \
|
||||
-autoupdate \
|
||||
+sv_setsteamaccount ${SERVER_TOKEN} \
|
||||
-ip ${IP} \
|
||||
-port ${PORT} \
|
||||
+clientport ${CLIENT_PORT} \
|
||||
-steamport ${STEAM_PORT} \
|
||||
+tv_port ${STV_PORT} \
|
||||
-strictportbind \
|
||||
-norestart \
|
||||
$@ & wait ${!}
|
||||
18
utils/healthcheck.sh
Executable file
18
utils/healthcheck.sh
Executable file
|
|
@ -0,0 +1,18 @@
|
|||
#!/bin/bash
|
||||
|
||||
status="$("${SERVER_DIR}/rcon" -H ${IP/0.0.0.0/127.0.0.1} -p ${PORT} -P ${RCON_PASSWORD} status)" || exit $?
|
||||
|
||||
# extract hostname
|
||||
if [[ $status =~ hostname:[[:space:]](.+)[[:space:]]version[[:space:]]:[[:space:]] ]]; then
|
||||
echo "hostname: ${BASH_REMATCH[1]}"
|
||||
fi
|
||||
|
||||
# extract map
|
||||
if [[ $status =~ map[[:space:]]+:[[:space:]]([a-zA-Z0-9_]+) ]]; then
|
||||
echo "map: ${BASH_REMATCH[1]}"
|
||||
fi
|
||||
|
||||
# extract player count
|
||||
if [[ $status =~ players[[:space:]]:[[:space:]]([0-9]+)[[:space:]]humans,[[:space:]][0-9]+[[:space:]]bots[[:space:]]\(([0-9]+)[[:space:]]max\) ]]; then
|
||||
echo "players: ${BASH_REMATCH[1]}/${BASH_REMATCH[2]}"
|
||||
fi
|
||||
23
utils/install_tf2.sh
Normal file
23
utils/install_tf2.sh
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# Steamcmd intermittently throws a "Missing configuration" error when trying to update TF2.
|
||||
# This retry mechanism is a temporary solution to try to workaround that problem.
|
||||
|
||||
max_retries=3
|
||||
retry_count=0
|
||||
|
||||
while [ $retry_count -lt $max_retries ]; do
|
||||
if steamcmd +runscript "$HOME/tf2.txt"; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
retry_count=$((retry_count + 1))
|
||||
if [ $retry_count -lt $max_retries ]; then
|
||||
echo "Steamcmd failed. Retrying ($retry_count/$max_retries)..."
|
||||
sleep 5
|
||||
fi
|
||||
done
|
||||
|
||||
echo "Failed to install TF2 after $max_retries attempts"
|
||||
exit 1
|
||||
Loading…
Add table
Add a link
Reference in a new issue