#=============================================================================== # Garry's Mod PropHunt Server - Docker Image # Repository: https://git.vish.gg/Vish/gmod-prophunt-server #=============================================================================== FROM debian:bookworm-slim LABEL maintainer="Vish " 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"]