From 463a8211991db271bbbc972adfba37e19102c84f Mon Sep 17 00:00:00 2001 From: D4rkst3r Date: Wed, 12 Aug 2026 01:02:28 +0200 Subject: [PATCH] feat: der Dienst heisst media.d4rkst3r.de -- beide Namen liefern weiter aus PUBLIC_URL umgestellt. FILES_HOST ist leer, der Dienst achtet also gar nicht auf den Hostnamen, und in NPM stehen beide auf DEMSELBEN Host -- die drei ^~-Bloecke gelten damit fuer beide. Nachgemessen: unter beiden Namen health 200 und dasselbe Bild, bytegleich. Nachgezogen: 7 Stellen in den Ressourcen d4rk_phone/config.lua (2) d4rk_photostudio/config.upload.lua d4rk_photostudio/config.upload.example.lua (2) d4rk_photostudio/settings.json (2) 2 Watchdog-Eintraege im Bot inklusive Anzeigename 16 Stellen in Doku/Werkzeugen README, docs/API.md, Home.md, npm-advanced.conf, proxy-pruefen.ps1, uebernehmen.ps1, .env.example Die Freigabe-Links zeigen von selbst auf den neuen Namen -- sie werden aus PUBLIC_URL gebaut und stehen nirgends gespeichert. Die alten funktionieren weiter. DIE ROADMAP BEHAELT DEN ALTEN NAMEN, an sechzehn Stellen und mit Absicht: dort steht die Geschichte, warum er ueberhaupt "fivemanage" hiess. Sie zu ersetzen machte aus einer Begruendung Unsinn. ZWEI DINGE, DIE DABEI AUFFIELEN. Cloudflare stand vor dem neuen Namen und brach die WebP-Auslieferung: der Cache-Schluessel kennt Accept nicht, also bekam ein Aufrufer OHNE "Accept: image/webp" die WebP-Fassung aus dem Zwischenspeicher -- unsere eigenen Bytes unter einem .png-Namen. Nach dem Umstellen auf DNS-only gemessen und in Ordnung: ohne Accept image/png 12295 B, mit Accept image/webp 2270 B, Server: openresty, vary: Accept, dreimal hintereinander stabil. Und der Lua-Syntaxtest schlug bei d4rk_phone/config.lua fehl -- an Zeile 93, `customModel = \`prop_player_phone_02\``. Das ist kein Schaden, sondern eine CfxLua-Erweiterung: Backticks sind dort ein joaat-Hash und in Standard-Lua 5.4 ein Syntaxfehler. 85 davon stecken in der Datei. luac -p taugt fuer CfxLua-Dateien also nicht; geprueft wurde stattdessen, dass genau die zwei URL-Zeilen anders sind. Co-Authored-By: Claude Opus 5 --- .env.example | 2 +- README.md | 4 ++-- ROADMAP.md | 43 +++++++++++++++++++++++++++++++++-------- docs/API.md | 18 ++++++++--------- docs/Home.md | 2 +- docs/npm-advanced.conf | 2 +- tools/proxy-pruefen.ps1 | 2 +- tools/uebernehmen.ps1 | 2 +- 8 files changed, 51 insertions(+), 24 deletions(-) diff --git a/.env.example b/.env.example index 29f73da..977f4e4 100644 --- a/.env.example +++ b/.env.example @@ -17,7 +17,7 @@ # # Das /f/ haengt der Dienst selbst an. Wer es hier mitschreibt, bekommt # Adressen mit /f/f/, und das faellt erst auf, wenn das erste Bild fehlt. -PUBLIC_URL=https://fivemanage.d4rkst3r.de +PUBLIC_URL=https://media.d4rkst3r.de # Wird beim ERSTEN Start als Benutzer "admin" angelegt. Ein spaeter geaenderter # Wert setzt das bestehende Passwort NICHT zurueck. diff --git a/README.md b/README.md index 71318da..9ec0e35 100644 --- a/README.md +++ b/README.md @@ -4,11 +4,11 @@ Eigener Medien-Dienst für alle FiveM-Ressourcen: Dateien annehmen, ablegen, ausliefern, in einem Dashboard verwalten. **Ein Container**, SQLite, Dateien auf einer Platte. -Läuft unter **https://fivemanage.d4rkst3r.de** — Dashboard und API an der +Läuft unter **https://media.d4rkst3r.de** — Dashboard und API an der Wurzel, Dateien unter `/f/`. ``` -vehicles/adder.webp → https://fivemanage.d4rkst3r.de/f/vehicles/adder.webp +vehicles/adder.webp → https://media.d4rkst3r.de/f/vehicles/adder.webp ``` **Der Pfad ist der Schlüssel.** `vehicles/adder.webp` bleibt diff --git a/ROADMAP.md b/ROADMAP.md index 6781572..750385f 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -960,7 +960,27 @@ einfügen.** Ein neuer Host bringt seine eigene `assets.conf` mit. **3. Sagen.** Dann setze ich `PUBLIC_URL` um und ziehe Dokumentation, Fotostudio, Handy und die Watchdog-Einträge nach. -#### ⚠️ DNS und NPM stehen — aber der Name hängt hinter Cloudflare +#### ✅ Umgestellt am 12.08.2026 + +`PUBLIC_URL=https://media.d4rkst3r.de`. **Beide Namen liefern weiter aus** — +`FILES_HOST` ist leer, der Dienst achtet gar nicht auf den Hostnamen, und in +NPM stehen beide auf demselben Host. Nachgemessen: unter beiden Namen `health +200` und dasselbe Bild. + +Nachgezogen: **7 Stellen** in den Ressourcen (`d4rk_phone/config.lua` ×2, +`config.upload.lua`, `config.upload.example.lua` ×2, `settings.json` ×2), +**2 Watchdog-Einträge** im Bot, **16 Stellen** in Dokumentation und Werkzeugen. +Die Freigabe-Links zeigen von selbst auf den neuen Namen — sie werden aus +`PUBLIC_URL` gebaut — und die alten funktionieren weiter. + +> **Der Lua-Syntaxtest schlug bei `d4rk_phone/config.lua` fehl**, und zwar an +> Zeile 93: `` customModel = `prop_player_phone_02` ``. Das ist kein Schaden, +> sondern eine **CfxLua-Erweiterung** — Backticks sind dort ein joaat-Hash und +> in Standard-Lua 5.4 ein Syntaxfehler. 85 davon stecken in der Datei. `luac -p` +> taugt für CfxLua-Dateien also nicht; geprüft wurde stattdessen, dass genau die +> zwei URL-Zeilen anders sind. + +#### ⚠️ Und die Falle auf dem Weg dorthin: Cloudflare Am 12.08.2026 eingerichtet. NPM ist dabei sogar besser gelöst als vorgeschlagen: **beide Namen auf demselben Host** (`server_name fivemanage.d4rkst3r.de @@ -987,14 +1007,21 @@ Cloudflare variiert standardmäßig nur über `Accept-Encoding`. Für ein Lua-Skript heißt das: `items/foo.png` liefert WebP-Bytes unter einem `.png`-Namen, und das fällt erst auf, wenn irgendwo ein Bild nicht lädt. -**Deshalb ist `PUBLIC_URL` noch nicht umgestellt.** Zwei Wege heraus: +**Gelöst durch die graue Wolke** — Cloudflare-Proxy aus, DNS-only, wie bei +`fivemanage`. Danach gemessen, dieselben Dateien: -1. **Graue Wolke** für `media` — Cloudflare-Proxy aus, DNS-only, wie bei - `fivemanage`. Der Ursprung ist ohnehin nicht verborgen (`fivemanage` zeigt - direkt darauf), Cloudflare bringt hier also nichts, was den Bruch aufwöge. -2. Cloudflare behalten und dort eine **Cache Rule** anlegen, die `/f/*` und - `/t/*` vom Zwischenspeicher ausnimmt. Funktioniert, ist aber eine dritte - Stelle, an der dieselbe Regel gepflegt werden will. +``` +media (grau) ohne Accept -> image/png 12295 B + mit Accept -> image/webp 2270 B +Server: openresty · vary: Accept · dreimal hintereinander stabil +Bytes identisch mit dem alten Namen (sha256 stimmt überein) +``` + +**Was das Umstellen der URLs in den Skripten NICHT gelöst hätte:** das Problem +saß am Host, nicht am Aufrufer. Hätten alle Skripte auf `media` gezeigt und +`media` wäre orange geblieben, bekämen *alle* die falschen Bytes — die +Umstellung hätte es verteilt statt behoben. Wer Cloudflare behalten will, +braucht dort eine Cache Rule, die `/f/*` und `/t/*` ausnimmt. Gegenprüfen lässt sich beides mit dem, was schon da ist: diff --git a/docs/API.md b/docs/API.md index 1cc94fe..bbd62cc 100644 --- a/docs/API.md +++ b/docs/API.md @@ -4,7 +4,7 @@ Diese Seite ist für den Fall geschrieben, dass jemand ein Skript anbindet und etwas nicht tut, was es soll. Sie nennt deshalb nicht nur die Endpunkte, sondern auch **was schiefgehen kann und wie die Antwort dann aussieht**. -Der Dienst läuft unter `https://fivemanage.d4rkst3r.de`. Dateien liegen darunter +Der Dienst läuft unter `https://media.d4rkst3r.de`. Dateien liegen darunter unter `/f/`. --- @@ -15,7 +15,7 @@ unter `/f/`. entsteht daraus, indem der Ursprung davorgesetzt wird: ``` -vehicles/adder.webp → https://fivemanage.d4rkst3r.de/f/vehicles/adder.webp +vehicles/adder.webp → https://media.d4rkst3r.de/f/vehicles/adder.webp ``` Deshalb kann die Vorlage in einem Handy-Skript schlicht `{model}.webp` lauten. @@ -47,7 +47,7 @@ Dateisystems verlassen sollen. Für ein Skript heißt das: **die Vorlage arbeitet mit Kleinbuchstaben.** ```lua -local url = ('https://fivemanage.d4rkst3r.de/f/items/%s.png'):format(item:lower()) +local url = ('https://media.d4rkst3r.de/f/items/%s.png'):format(item:lower()) ``` Über `/api/upload` mit eigenem `X-Path` gilt das nicht — dort steht der Pfad @@ -92,7 +92,7 @@ Ressourcen: Kamera, Handy, MDT, Fahrzeugstudio. Sie alle umzuschreiben heißt, fremde Skripte anzufassen — und beim nächsten Update wieder. **Der Dienst spricht deshalb ihre Sprache.** Der Umzug ist eine Zeile je Skript: -`api.fivemanage.com` → `fivemanage.d4rkst3r.de`. Der Schlüssel bleibt derselbe +`api.fivemanage.com` → `media.d4rkst3r.de`. Der Schlüssel bleibt derselbe Kopf, die Antwort dieselbe Form. Als Schlüssel setzt du einen **Token dieses Dienstes** ein. @@ -114,7 +114,7 @@ exports['screenshot-basic']:requestScreenshotUpload( -- nachher — eine Zeile exports['screenshot-basic']:requestScreenshotUpload( - 'https://fivemanage.d4rkst3r.de/api/image', 'image', + 'https://media.d4rkst3r.de/api/image', 'image', { headers = { Authorization = apiKey } }, cb) ``` @@ -180,8 +180,8 @@ Wer auch das rot haben will, hängt `?streng=1` an — dann gibt alles außer ### In Uptime Kuma ``` -Dienst läuft https://fivemanage.d4rkst3r.de/status -Braucht Pflege https://fivemanage.d4rkst3r.de/status?streng=1 +Dienst läuft https://media.d4rkst3r.de/status +Braucht Pflege https://media.d4rkst3r.de/status?streng=1 ``` > **Warum `bestand` dabei ist.** Nachgemessen an genau diesem Dienst: wird eine @@ -242,7 +242,7 @@ Nimmt die Datei in einer von **drei Rumpfformen** entgegen: ```json { - "url": "https://fivemanage.d4rkst3r.de/f/vehicles/adder.webp", + "url": "https://media.d4rkst3r.de/f/vehicles/adder.webp", "path": "vehicles/adder.webp", "size": 132760, "sha256": "36cb4ddf…", @@ -273,7 +273,7 @@ Dienst gebaut wurde. local TOKEN = 'd4rk_…' -- im Dashboard anlegen local function hochladen(pfad, bytes, cb) - PerformHttpRequest('https://fivemanage.d4rkst3r.de/api/upload', + PerformHttpRequest('https://media.d4rkst3r.de/api/upload', function(status, body) if status ~= 200 then return cb(nil, body) end cb(json.decode(body).url) diff --git a/docs/Home.md b/docs/Home.md index 768a09d..0fee896 100644 --- a/docs/Home.md +++ b/docs/Home.md @@ -3,7 +3,7 @@ Eigener Medien-Dienst für alle FiveM-Ressourcen: Dateien annehmen, ablegen, ausliefern, in einem Dashboard verwalten. -**Läuft unter** https://fivemanage.d4rkst3r.de — Dashboard und API an der +**Läuft unter** https://media.d4rkst3r.de — Dashboard und API an der Wurzel, Dateien unter `/f/`. --- diff --git a/docs/npm-advanced.conf b/docs/npm-advanced.conf index 6c67676..8533556 100644 --- a/docs/npm-advanced.conf +++ b/docs/npm-advanced.conf @@ -1,6 +1,6 @@ # d4rk_media — der Block fuer Nginx Proxy Manager # -# WOHIN: NPM oeffnen -> Hosts -> Proxy Hosts -> fivemanage.d4rkst3r.de +# WOHIN: NPM oeffnen -> Hosts -> Proxy Hosts -> media.d4rkst3r.de # -> Edit -> Reiter "Advanced" -> Feld "Custom Nginx Configuration" # # WAS: den GESAMTEN Inhalt dieser Datei dort hineinkopieren. Was schon drin diff --git a/tools/proxy-pruefen.ps1 b/tools/proxy-pruefen.ps1 index e825938..aa714f4 100644 --- a/tools/proxy-pruefen.ps1 +++ b/tools/proxy-pruefen.ps1 @@ -9,7 +9,7 @@ # war es nicht. Die Kopfzeile sagt es eindeutig, aber man muss sie eben ansehen. param( - [string]$Basis = 'https://fivemanage.d4rkst3r.de', + [string]$Basis = 'https://media.d4rkst3r.de', # Fuer die API-Messung. Ohne ihn wird sie uebersprungen -- sie braucht einen # gueltigen Token, um "mit" und "ohne" unterscheiden zu koennen. [string]$Token = '' diff --git a/tools/uebernehmen.ps1 b/tools/uebernehmen.ps1 index 1ed17e4..d986f99 100644 --- a/tools/uebernehmen.ps1 +++ b/tools/uebernehmen.ps1 @@ -28,7 +28,7 @@ param( [Parameter(Mandatory = $true)][string]$Von, [string]$Nach = '', [switch]$Probe, - [string]$Dienst = 'https://fivemanage.d4rkst3r.de', + [string]$Dienst = 'https://media.d4rkst3r.de', [string]$Container = 'd4rk-media', [int]$ProStapel = 20 )