# MSCO dedizierter Server
#   docker build -t msco-server MSCO.Server
#   docker run -it -p 7777:7777 -v msco-server-data:/data msco-server
# Daten (server.json, save/, world.json) liegen im Volume /data.

FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
WORKDIR /src
COPY . .
RUN dotnet publish -c Release -o /app

# sdk (enthält auch ASP.NET/Kestrel fürs Web-Panel): damit sich der Server im Panel selbst updaten kann
# (lädt den Quellcode, baut ihn und legt ihn nach /data/app)
FROM mcr.microsoft.com/dotnet/sdk:10.0
WORKDIR /app
COPY --from=build /app .
ENV MSCO_DATA=/data
# läuft als beliebige Benutzer-ID (docker compose "user:") - dann gibt es kein eigenes Home
ENV HOME=/tmp
ENV DOTNET_CLI_TELEMETRY_OPTOUT=1 DOTNET_NOLOGO=1
# Befehle an den laufenden Server:  docker exec msco-server msco players
RUN printf '#!/bin/sh\nexec dotnet /app/MSCO.Server.dll --cmd "$@"\n' > /usr/local/bin/msco && chmod +x /usr/local/bin/msco
VOLUME /data
# Spiel UND Web-Panel (Browser werden am selben Port erkannt)
EXPOSE 7777/tcp
# docker stop schickt SIGTERM -> Server speichert den Weltzustand
STOPSIGNAL SIGTERM
ENTRYPOINT ["dotnet", "MSCO.Server.dll"]
