From 358872d56c934b7d67c644d0bab2272bce6dac3c Mon Sep 17 00:00:00 2001 From: Florian Wilde Date: Sat, 18 Jul 2026 15:10:46 +0200 Subject: [PATCH] fix: BRANDING_DIR im app-Dienst setzen, sonst 500 beim Logo/Favicon-Upload MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ohne die Variable weicht lib/branding.ts auf ${cwd}/data/branding (= /app/data/branding) aus statt das im Dockerfile vorbereitete und gemountete /data/branding zu nutzen. /app gehört root, der App-Prozess läuft aber als nicht-root – das Anlegen des Fallback-Verzeichnisses schlägt mit EACCES fehl. Version 1.6.3. Co-Authored-By: Claude Sonnet 5 --- CHANGELOG.md | 14 ++++++++++ docker-compose.yml | 6 ++++ package-lock.json | 70 ++++++++++++++++++++++++++++++++++++++++++++-- package.json | 2 +- 4 files changed, 89 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e3a9c4f..9fe353b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,20 @@ Alle nennenswerten Änderungen an diesem Projekt werden hier dokumentiert. Format angelehnt an [Keep a Changelog](https://keepachangelog.com/de/1.1.0/), Versionierung nach [Semantic Versioning](https://semver.org/lang/de/). +## [1.6.3] – 2026-07-18 + +### Behoben +- `docker-compose.yml`: Der `app`-Dienst setzte `BRANDING_DIR` nicht, sodass + `lib/branding.ts` beim Hochladen von Logo/Favicon auf den Fallback-Pfad + `${cwd}/data/branding` (= `/app/data/branding`) statt auf das im + Dockerfile vorbereitete, gemountete Verzeichnis `/data/branding` auswich. + `/app` gehört im Container `root`, der App-Prozess läuft aber als + nicht-root-Nutzer `nextjs` – das Anlegen des Fallback-Verzeichnisses + scheiterte mit `EACCES`, der Upload endete mit „Upload fehlgeschlagen: + 500". Jetzt wird `BRANDING_DIR=/data/branding` explizit gesetzt, passend + zum Volume-Mount und zum in `Dockerfile` per `chown` freigegebenen + Verzeichnis. + ## [1.6.2] – 2026-07-18 ### Behoben diff --git a/docker-compose.yml b/docker-compose.yml index 17196c4..3a49bf9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -34,6 +34,12 @@ services: # (Essenszeiten, Kürzel-Erklärungen) nach Englisch/Polnisch. Ohne Key # bleibt "Automatisch übersetzen" inaktiv, manuelle Eingabe geht immer. DEEPL_API_KEY: ${DEEPL_API_KEY:-} + # Muss auf das "volumes:"-Ziel unten UND das im Dockerfile per + # "mkdir/chown" vorbereitete Verzeichnis zeigen – ohne diese + # Variable würde lib/branding.ts auf ${PWD}/data/branding + # zurückfallen, das weder gemountet noch für den nicht-root + # App-Nutzer beschreibbar ist (Upload schlägt mit 500 fehl). + BRANDING_DIR: /data/branding ports: - "0.0.0.0:3000:3000" volumes: diff --git a/package-lock.json b/package-lock.json index e1e97a2..5c3045c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "canteen-menu", - "version": "1.6.2", + "version": "1.6.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "canteen-menu", - "version": "1.6.2", + "version": "1.6.3", "dependencies": { "@simplewebauthn/browser": "^13.3.0", "@simplewebauthn/server": "^13.3.2", @@ -1767,6 +1767,72 @@ "node": ">=14.0.0" } }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/core": { + "version": "1.11.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/runtime": { + "version": "1.11.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/wasi-threads": { + "version": "1.2.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.4", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@tybys/wasm-util": { + "version": "0.10.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/tslib": { + "version": "2.8.1", + "dev": true, + "inBundle": true, + "license": "0BSD", + "optional": true + }, "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.3.tgz", diff --git a/package.json b/package.json index c289eed..45f6c2f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "canteen-menu", - "version": "1.6.2", + "version": "1.6.3", "private": true, "scripts": { "predev": "node --env-file-if-exists=.env.local db/migrate.mjs && node --env-file-if-exists=.env.local scripts/bootstrap-admin.mjs",