FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:8.0 AS build-env ARG TARGETARCH ARG BUILDPLATFORM WORKDIR /App EXPOSE 80 RUN echo "Target: $TARGETARCH" RUN echo "Build: $BUILDPLATFORM" # Copy everything COPY .. ./ # Restore as distinct layers RUN dotnet restore "gaseous-server/gaseous-server.csproj" -a $TARGETARCH # Build and publish a release RUN dotnet publish "gaseous-server/gaseous-server.csproj" --use-current-runtime --self-contained true -c Release -o out -a $TARGETARCH # update apt-get RUN apt-get update # download and unzip EmulatorJS from CDN RUN apt-get install -y p7zip-full RUN mkdir -p out/wwwroot/emulators/EmulatorJS RUN wget https://cdn.emulatorjs.org/releases/4.0.12.7z RUN 7z x -y -oout/wwwroot/emulators/EmulatorJS 4.0.12.7z # Build runtime image FROM mcr.microsoft.com/dotnet/aspnet:8.0 ENV INDOCKER=1 WORKDIR /App COPY --from=build-env /App/out . # variables ENV dbhost=localhost ENV dbuser=root ENV dbpass=gaseous ENV MARIADB_ROOT_PASSWORD=$dbpass # install mariadb RUN DEBIAN_FRONTEND=noninteractive && \ apt-get update && apt-get install -y mariadb-server RUN mkdir -p /run/mysqld COPY ../build/mariadb.sh /usr/sbin/start-mariadb.sh RUN chmod +x /usr/sbin/start-mariadb.sh # install supervisord RUN apt-get install -y supervisor COPY ../build/supervisord.conf /etc/supervisor/conf.d/supervisord.conf # clean up apt-get RUN apt-get clean && rm -rf /var/lib/apt/lists # volumes VOLUME /root/.gaseous-server /var/lib/mysql # start services CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]