diff --git a/docker-compose.yml b/docker-compose.yml index 455c556..5602f90 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -26,6 +26,8 @@ volumes: services: web: + profiles: + - main build: context: web args: @@ -46,11 +48,23 @@ services: env_file: - .env - server1: + server-image: + &server-image + profiles: + - build build: context: server args: - USER_ID + image: server-image + pull_policy: never + env_file: + - .env + + server1: + <<: *server-image + profiles: + - main user: ${USER_ID} volumes: # Common volumes @@ -90,47 +104,47 @@ services: env_file: - .env1 - # Copy and paste this for every other server you want to run, replacing 2 with 3, and so on. - server2: # <-- here - build: - context: server - args: - - USER_ID - user: ${USER_ID} - volumes: - # Common volumes - - ./files:/files - - mods:/mods - - ./server:/server - - serverfiles:/serverfiles - - servermpmissions:/mpmissions:ro - # Server-specific volumes - - homedir_server2:/home/user # <-- here - - mpmissions2:/serverfiles/mpmissions # <-- here - - profiles2:/profiles # <-- here - network_mode: host - restart: no - env_file: - - .env2 # <-- here - - server3: # <-- here - build: - context: server - args: - - USER_ID - user: ${USER_ID} - volumes: - # Common volumes - - ./files:/files - - mods:/mods - - ./server:/server - - serverfiles:/serverfiles - - servermpmissions:/mpmissions:ro - # Server-specific volumes - - homedir_server3:/home/user # <-- here - - mpmissions3:/serverfiles/mpmissions # <-- here - - profiles3:/profiles # <-- here - network_mode: host - restart: no - env_file: - - .env3 # <-- here +# # Copy and paste this for every other server you want to run, replacing 2 with 3, and so on. +# server2: # <-- here +# build: +# context: server +# args: +# - USER_ID +# user: ${USER_ID} +# volumes: +# # Common volumes +# - ./files:/files +# - mods:/mods +# - ./server:/server +# - serverfiles:/serverfiles +# - servermpmissions:/mpmissions:ro +# # Server-specific volumes +# - homedir_server2:/home/user # <-- here +# - mpmissions2:/serverfiles/mpmissions # <-- here +# - profiles2:/profiles # <-- here +# network_mode: host +# restart: no +# env_file: +# - .env2 # <-- here +# +# server3: # <-- here +# build: +# context: server +# args: +# - USER_ID +# user: ${USER_ID} +# volumes: +# # Common volumes +# - ./files:/files +# - mods:/mods +# - ./server:/server +# - serverfiles:/serverfiles +# - servermpmissions:/mpmissions:ro +# # Server-specific volumes +# - homedir_server3:/home/user # <-- here +# - mpmissions3:/serverfiles/mpmissions # <-- here +# - profiles3:/profiles # <-- here +# network_mode: host +# restart: no +# env_file: +# - .env3 # <-- here diff --git a/files/mods/3295021220/cfgenvironment.xml b/files/mods/3295021220/cfgenvironment.xml new file mode 100755 index 0000000..aa1eeb4 --- /dev/null +++ b/files/mods/3295021220/cfgenvironment.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/files/mods/3295021220/cfgeventspawns.xml b/files/mods/3295021220/cfgeventspawns.xml new file mode 100755 index 0000000..e8f22d7 --- /dev/null +++ b/files/mods/3295021220/cfgeventspawns.xml @@ -0,0 +1,4 @@ + + + + diff --git a/files/mods/3295021220/events.xml b/files/mods/3295021220/events.xml new file mode 100755 index 0000000..0937dce --- /dev/null +++ b/files/mods/3295021220/events.xml @@ -0,0 +1,24 @@ + + + + 8 + 1 + 4 + 180 + 0 + 200 + 0 + 0 + + fixed + child + 1 + + + + + + + + + diff --git a/files/mods/3295021220/horses_chernarus.xml b/files/mods/3295021220/horses_chernarus.xml new file mode 100755 index 0000000..c04fea5 --- /dev/null +++ b/files/mods/3295021220/horses_chernarus.xml @@ -0,0 +1,270 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/files/mods/3295021220/start.sh b/files/mods/3295021220/start.sh new file mode 100644 index 0000000..8123c60 --- /dev/null +++ b/files/mods/3295021220/start.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +# This is run in the directory with the target files + +# Copy the territory file over +cp ${FILES}/mods/${ID}/horses_chernarus.xml env/wild_horse_territories.xml diff --git a/files/mods/3295021220/xml.env b/files/mods/3295021220/xml.env new file mode 100644 index 0000000..3487169 --- /dev/null +++ b/files/mods/3295021220/xml.env @@ -0,0 +1,3 @@ +CFGENVIRONMENT=local +CFGEVENTSPAWNS=local +EVENTS=local diff --git a/files/mods/@DayZHorse b/files/mods/@DayZHorse new file mode 120000 index 0000000..f5c8cc0 --- /dev/null +++ b/files/mods/@DayZHorse @@ -0,0 +1 @@ +3295021220 \ No newline at end of file diff --git a/web/Dockerfile b/web/Dockerfile index f9574e8..636b15d 100644 --- a/web/Dockerfile +++ b/web/Dockerfile @@ -1,48 +1,39 @@ -FROM debian:bookworm-slim +FROM debian:bookworm-slim AS download -# Replace shell with bash so we can source files -RUN rm /bin/sh && ln -s /bin/bash /bin/sh - -# Set debconf to run non-interactively and agree to the SteamCMD EULA -RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections \ - && echo steam steam/question select "I AGREE" | debconf-set-selections \ - && echo steam steam/license note '' | debconf-set-selections \ - && dpkg --add-architecture i386 - -# Add backports and contrib -RUN sed -i /etc/apt/sources.list.d/debian.sources -e 's/Components: main/Components: main contrib non-free/g' - -# Install _only_ the necessary packages +# Install _only_ the necessary packages to download the .net SDK and Steamworks .net SDK RUN apt-get update && apt-get -y upgrade && apt-get -y install --no-install-recommends \ - binutils \ - curl \ - git \ - gwenhywfar-tools \ - jq \ - libxml2-utils \ - locales \ - nano \ - procps \ + ca-certificates \ wget \ - rename \ - steamcmd \ - xmlstarlet + unzip -# Set the locale -RUN sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen && locale-gen -ENV LANG en_US.UTF-8 -ENV LANGUAGE en_US:en -ENV LC_ALL en_US.UTF-8 +# Download dotnet SDK to build the steam API client +RUN cd /tmp && \ + wget -q https://dotnetcli.azureedge.net/dotnet/Sdk/8.0.303/dotnet-sdk-8.0.303-linux-x64.tar.gz -# Steamcmd needs its path added, as it ends up in /usr/games. -# Our server script is bind mounted in /files in docker-compose. -ENV PATH /usr/games:/files/bin:/web/bin:${PATH} +# Download the Steamworks .net package +RUN cd /tmp && \ + wget -q https://github.com/rlabrecque/Steamworks.NET/releases/download/20.2.0/Steamworks.NET-Standalone_20.2.0.zip + +# Extract the dotnet SDK +RUN cd /usr/local && \ + mkdir -p dotnet && \ + cd dotnet && \ + tar xfz /tmp/dotnet-sdk-8.0.303-linux-x64.tar.gz + +# Extract the Steamworks .net SDK +RUN mkdir -p /usr/local/steamworks.net && \ + cd /usr/local/steamworks.net && \ + unzip /tmp/Steamworks.NET-Standalone_20.2.0.zip + +# Add bercon https://github.com/WoozyMasta/bercon +RUN wget -q https://github.com/WoozyMasta/bercon/releases/download/1.0.0/bercon \ + && chmod +x bercon \ + && mv bercon /usr/bin # Install nodejs RUN mkdir /usr/local/nvm ENV NVM_DIR /usr/local/nvm -ENV NODE_VERSION 20.12.2 -RUN echo $NODE_VERSION +ENV NODE_VERSION 20.15.1 # Install nvm with node and npm RUN wget -O - https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash \ @@ -51,8 +42,84 @@ RUN wget -O - https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | && nvm alias default $NODE_VERSION \ && nvm use default -ENV NODE_PATH $NVM_DIR/versions/node/v$NODE_VERSION/lib/node_modules -ENV PATH $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH +FROM debian:bookworm-slim AS build + +COPY --from=download /usr/local/dotnet /usr/local/dotnet + +RUN apt-get update && apt-get -y upgrade && apt-get -y install --no-install-recommends \ + libicu72 \ + libssl3 + +# Disable MS telemetry +ENV DOTNET_CLI_TELEMETRY_OPTOUT=1 + +# Build the steam API client +COPY client /usr/local/client + +#RUN cd /usr/local/client && \ +# /usr/local/dotnet/dotnet build -c Release + +FROM debian:bookworm-slim + +COPY --from=download /usr/local/dotnet /usr/local/dotnet + +COPY --from=download /usr/local/steamworks.net /usr/local/steamworks.net + +COPY --from=download /usr/bin/bercon /usr/bin/bercon + +COPY --from=download /usr/local/nvm /usr/local/nvm + +COPY --from=build /usr/local/client/ /usr/local/client + +ENV DOTNET_ROOT /usr/local/dotnet + +# Add backports, contrib, and non-free +RUN sed -i /etc/apt/sources.list.d/debian.sources -e 's/Components: main/Components: main contrib non-free/g' + +# Set debconf to run non-interactively and agree to the SteamCMD EULA +RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections \ + && echo steam steam/question select "I AGREE" | debconf-set-selections \ + && echo steam steam/license note '' | debconf-set-selections \ + && dpkg --add-architecture i386 + +# Install _only_ the necessary packages +RUN apt-get update && apt-get -y upgrade && apt-get -y install --no-install-recommends \ + binutils \ + curl \ + git \ + gwenhywfar-tools \ + jq \ + libicu72 \ + libssl3 \ + libxml2-utils \ + locales \ + nano \ + procps \ + wget \ + rename \ + steamcmd \ + xmlstarlet \ + unzip + +# Set the locale +RUN sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen && locale-gen +ENV LANG=en_US.UTF-8 +ENV LANGUAGE=en_US:en +ENV LC_ALL=en_US.UTF-8 + +# This was installed in the download stage +ENV NVM_DIR /usr/local/nvm +ENV NODE_VERSION=20.15.1 + +ENV NODE_PATH=$NVM_DIR/versions/node/v$NODE_VERSION/lib/node_modules +ENV PATH=$NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH + +# Steamcmd needs its path added, as it ends up in /usr/games. +# Our server script is bind mounted in /files in docker-compose. +ENV PATH=/usr/games:/files/bin:/web/bin:${PATH} + +# Shut steamcmd up +RUN cd /usr/lib/i386-linux-gnu && ln -s /web/bin/steamservice.so # Setup a non-privileged user ARG USER_ID @@ -62,14 +129,6 @@ RUN groupadd -g ${USER_ID} user && \ mkdir -p /home/user /serverfiles/mpmissions /serverfiles/steamapps/workshop/content /web && \ chown -R user:user /home/user /serverfiles /web -# Shut steamcmd up -RUN cd /usr/lib/i386-linux-gnu && ln -s /web/bin/steamservice.so - -# Add bercon https://github.com/WoozyMasta/bercon -RUN wget https://github.com/WoozyMasta/bercon/releases/download/1.0.0/bercon \ - && chmod +x bercon \ - && mv bercon /usr/bin - # Use our non-privileged user USER user diff --git a/web/bin/start.sh b/web/bin/start.sh index 2e2e230..a5d6ade 100755 --- a/web/bin/start.sh +++ b/web/bin/start.sh @@ -4,7 +4,7 @@ if ! echo .bashrc | grep -q "dz-web" then echo "Adding PS1 to .bashrc..." - cat >> .bashrc < .bashrc <