Initial PropHunt server setup
- Complete bare metal installer with SteamCMD, MetaMod, SourceMod, ULX - Docker installer with one-liner support - Server configuration files (server.cfg, autoexec.cfg, mount.cfg) - Update script for easy maintenance - Backup script for server data - Workshop collection documentation - SourceMod admin configuration template
This commit is contained in:
119
docker/Dockerfile
Normal file
119
docker/Dockerfile
Normal file
@@ -0,0 +1,119 @@
|
||||
#===============================================================================
|
||||
# Garry's Mod PropHunt Server - Docker Image
|
||||
# Repository: https://git.vish.gg/Vish/gmod-prophunt-server
|
||||
#===============================================================================
|
||||
|
||||
FROM debian:bookworm-slim
|
||||
|
||||
LABEL maintainer="Vish <dvish92@gmail.com>"
|
||||
LABEL description="Garry's Mod PropHunt Dedicated Server"
|
||||
LABEL version="1.0"
|
||||
|
||||
# Environment variables
|
||||
ENV DEBIAN_FRONTEND=noninteractive \
|
||||
GMOD_INSTALL_DIR=/home/gmod \
|
||||
SERVER_DIR=/home/gmod/serverfiles \
|
||||
STEAMCMD_DIR=/home/gmod/steamcmd \
|
||||
SRCDS_TOKEN="" \
|
||||
SERVER_NAME="PropHunt Server" \
|
||||
RCON_PASSWORD="changeme" \
|
||||
MAX_PLAYERS="24" \
|
||||
MAP="gm_construct" \
|
||||
PORT="27015" \
|
||||
GAMEMODE="prop_hunt" \
|
||||
WORKSHOP_COLLECTION="" \
|
||||
TICKRATE="66" \
|
||||
TZ="America/Los_Angeles"
|
||||
|
||||
# Install dependencies
|
||||
RUN dpkg --add-architecture i386 && \
|
||||
apt-get update && \
|
||||
apt-get install -y --no-install-recommends \
|
||||
ca-certificates \
|
||||
curl \
|
||||
wget \
|
||||
tar \
|
||||
unzip \
|
||||
lib32gcc-s1 \
|
||||
lib32stdc++6 \
|
||||
libsdl2-2.0-0:i386 \
|
||||
locales \
|
||||
tzdata && \
|
||||
sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \
|
||||
locale-gen && \
|
||||
apt-get clean && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
ENV LANG=en_US.UTF-8 \
|
||||
LANGUAGE=en_US:en \
|
||||
LC_ALL=en_US.UTF-8
|
||||
|
||||
# Create user and directories
|
||||
RUN useradd -m -s /bin/bash gmod && \
|
||||
mkdir -p ${SERVER_DIR} ${STEAMCMD_DIR} && \
|
||||
chown -R gmod:gmod /home/gmod
|
||||
|
||||
# Switch to gmod user
|
||||
USER gmod
|
||||
WORKDIR /home/gmod
|
||||
|
||||
# Install SteamCMD
|
||||
RUN cd ${STEAMCMD_DIR} && \
|
||||
curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar zxvf -
|
||||
|
||||
# Install Garry's Mod server
|
||||
RUN cd ${STEAMCMD_DIR} && \
|
||||
./steamcmd.sh +force_install_dir ${SERVER_DIR} \
|
||||
+login anonymous \
|
||||
+app_update 4020 validate \
|
||||
+quit
|
||||
|
||||
# Install MetaMod:Source
|
||||
RUN cd /tmp && \
|
||||
METAMOD_VER=$(curl -s "https://mms.alliedmods.net/mmsdrop/1.11/" | grep -oP 'mmsource-[\d.]+-git\d+-linux\.tar\.gz' | tail -1) && \
|
||||
wget -q "https://mms.alliedmods.net/mmsdrop/1.11/${METAMOD_VER}" -O metamod.tar.gz && \
|
||||
tar -xzf metamod.tar.gz -C ${SERVER_DIR}/garrysmod/ && \
|
||||
rm metamod.tar.gz
|
||||
|
||||
# Install SourceMod
|
||||
RUN cd /tmp && \
|
||||
SOURCEMOD_VER=$(curl -s "https://sm.alliedmods.net/smdrop/1.11/" | grep -oP 'sourcemod-[\d.]+-git\d+-linux\.tar\.gz' | tail -1) && \
|
||||
wget -q "https://sm.alliedmods.net/smdrop/1.11/${SOURCEMOD_VER}" -O sourcemod.tar.gz && \
|
||||
tar -xzf sourcemod.tar.gz -C ${SERVER_DIR}/garrysmod/ && \
|
||||
rm sourcemod.tar.gz
|
||||
|
||||
# Install ULib and ULX
|
||||
RUN cd /tmp && \
|
||||
wget -q "https://github.com/TeamUlysses/ulib/archive/refs/heads/master.zip" -O ulib.zip && \
|
||||
unzip -q ulib.zip -d ${SERVER_DIR}/garrysmod/addons/ && \
|
||||
mv ${SERVER_DIR}/garrysmod/addons/ulib-master ${SERVER_DIR}/garrysmod/addons/ulib && \
|
||||
rm ulib.zip && \
|
||||
wget -q "https://github.com/TeamUlysses/ulx/archive/refs/heads/master.zip" -O ulx.zip && \
|
||||
unzip -q ulx.zip -d ${SERVER_DIR}/garrysmod/addons/ && \
|
||||
mv ${SERVER_DIR}/garrysmod/addons/ulx-master ${SERVER_DIR}/garrysmod/addons/ulx && \
|
||||
rm ulx.zip
|
||||
|
||||
# Copy configuration files
|
||||
COPY --chown=gmod:gmod cfg/ ${SERVER_DIR}/garrysmod/cfg/
|
||||
COPY --chown=gmod:gmod scripts/docker-entrypoint.sh /home/gmod/entrypoint.sh
|
||||
|
||||
# Make scripts executable
|
||||
USER root
|
||||
RUN chmod +x /home/gmod/entrypoint.sh ${SERVER_DIR}/srcds_run ${SERVER_DIR}/srcds_linux 2>/dev/null || true
|
||||
USER gmod
|
||||
|
||||
# Expose ports
|
||||
EXPOSE 27015/tcp 27015/udp 27005/udp 27020/udp
|
||||
|
||||
# Volumes for persistent data
|
||||
VOLUME ["/home/gmod/serverfiles/garrysmod/data", \
|
||||
"/home/gmod/serverfiles/garrysmod/cfg", \
|
||||
"/home/gmod/serverfiles/garrysmod/addons"]
|
||||
|
||||
# Health check
|
||||
HEALTHCHECK --interval=30s --timeout=10s --start-period=120s --retries=3 \
|
||||
CMD curl -f http://localhost:27015/ 2>/dev/null || exit 1
|
||||
|
||||
WORKDIR ${SERVER_DIR}
|
||||
|
||||
ENTRYPOINT ["/home/gmod/entrypoint.sh"]
|
||||
Reference in New Issue
Block a user