diff --git a/.gitignore b/.gitignore index 7a53975..666a40d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,8 @@ bin/ obj/ -data/ +data/* +!data/.gitkeep *.user .vs/ publish/ +.env diff --git a/Dockerfile b/Dockerfile index 07f3d3e..37a8e89 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,6 +12,8 @@ FROM mcr.microsoft.com/dotnet/runtime: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 # 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 diff --git a/README.md b/README.md index bb38231..1060599 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,24 @@ docker compose up -d --build # erster Start legt data/server.json an und bee Anderer Port: in `data/server.json` **und** in `docker-compose.yml` ändern. +### Linux: „Permission denied“ in `data/` + +Der Container läuft als Benutzer-ID **1000** (der erste Linux-Benutzer), damit dir die Dateien in `data/` gehören. +Hat dein Benutzer eine andere ID (`id -u` / `id -g`), trag sie in eine `.env` neben der `docker-compose.yml` ein: + +```bash +echo "MSCO_UID=$(id -u)" > .env +echo "MSCO_GID=$(id -g)" >> .env +``` + +Wurden Dateien schon von einer älteren Version als root angelegt, einmal zurückholen: + +```bash +docker compose down +sudo chown -R $(id -u):$(id -g) data +docker compose up -d --build +``` + ## Ohne Docker **Linux (systemd):** .NET 10 Runtime installieren (`sudo apt install dotnet-runtime-10.0`), dann diff --git a/data/.gitkeep b/data/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/docker-compose.yml b/docker-compose.yml index e288473..5ed4a64 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -14,6 +14,9 @@ services: server: build: . container_name: msco-server + # Als dein Linux-Benutzer laufen (nicht root), damit du in data/ selbst Dateien anlegen/ändern darfst. + # Andere ID? `id -u` / `id -g` ausgeben und in .env als MSCO_UID / MSCO_GID eintragen. + user: "${MSCO_UID:-1000}:${MSCO_GID:-1000}" restart: "on-failure:3" # bei fehlendem Schlüssel/Spielstand nicht endlos neu starten stdin_open: true # Server-Konsole per docker attach tty: true