232 lines
9.7 KiB
Docker
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"]
|