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 .. ./ # Build Gaseous Web Server # 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.1.1.7z RUN 7z x -y -oout/wwwroot/emulators/EmulatorJS 4.1.1.7z # Build runtime image FROM mcr.microsoft.com/dotnet/aspnet:8.0 ENV INDOCKER=1 WORKDIR /App COPY --from=build-env /App/out . # variables ARG PUID=1000 ARG PGID=1000 ARG dbhost=localhost ARG dbuser=root ARG dbpass=gaseous ARG MARIADB_ROOT_PASSWORD=$dbpass ENV PUID=${PUID} ENV PGID=${PGID} ENV dbhost=${dbhost} ENV dbuser=${dbuser} ENV dbpass=${dbpass} 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/embeddeddb/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/embeddeddb/supervisord.conf /etc/supervisor/conf.d/supervisord.conf RUN mkdir -p /var/run/supervisord RUN mkdir -p /var/log/supervisord # clean up apt-get RUN apt-get clean && rm -rf /var/lib/apt/lists # copy entrypoint COPY ../build/embeddeddb/entrypoint.sh /usr/sbin/entrypoint.sh RUN chmod +x /usr/sbin/entrypoint.sh # volumes VOLUME /home/gaseous/.gaseous-server /var/lib/mysql # start services ENTRYPOINT [ "/usr/sbin/entrypoint.sh" ]