tf2-images/Dockerfile

232 lines
9.7 KiB
Docker

############################
# 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}"
# ---------- 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
# ---------- 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
# ---------- 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
# ---------- 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
# ---------- 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 misc/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 misc/afk_manager.cfg ${SERVER_DIR}/tf/cfg/sourcemod/
COPY misc/custom_whitelist_11769.txt ${SERVER_DIR}/tf/cfg/
COPY misc/afk_manager.phrases.txt ${SERVER_DIR}/tf/addons/sourcemod/translations/
WORKDIR ${SERVER_DIR}
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/"
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"]