Wersja 1.0.0 · silnik 1.0.0 · schemat .drnx 1.0.0
DRNX jest aplikacją jednoplikową. Cała logika inżynierska — hydrologia, hydraulika, dobór średnic, rysunek techniczny, generowanie PDF i eksporty — wykonuje się w przeglądarce. Cloudflare Pages pełni wyłącznie rolę hostingu plików statycznych.
Konsekwencja: nie istnieje serwer aplikacyjny, nie ma procesu budowania, nie ma zależności z npm w produkcji. Wdrożenie polega na skopiowaniu katalogu.
Warstwa Workers (Etap E) jest opcjonalna i służy wyłącznie do omijania CORS przy pobieraniu kafli NMT oraz do współdzielenia projektów. Bez niej aplikacja działa w pełni.
drnx/
├── index.html ← CAŁA aplikacja (bez zależności, bez CDN)
├── _headers ← nagłówki bezpieczeństwa (CSP, COOP/COEP, HSTS)
├── _redirects ← przekierowania SPA
├── wrangler.toml ← konfiguracja Pages
├── wrangler.worker.toml ← konfiguracja Workera (Etap E)
├── package.json ← skrypty npm (opcjonalne)
├── profiles/
│ ├── PL-2026.json ← profil normowy PL (edytowalny)
│ └── DE-2026.json ← profil normowy DE (edytowalny)
├── worker/
│ ├── index.ts ← proxy kafli + współdzielenie projektów
│ └── schema.sql ← schemat bazy D1
└── docs/ ← dokumentacja (PL/EN)
| Element | Wymaganie |
|---|---|
| Konto Cloudflare | plan darmowy wystarcza dla Pages |
| Node.js | ≥ 18 (tylko do uruchomienia wrangler) |
| Wrangler CLI | npm install -g wrangler |
| Plan płatny Workers | tylko jeśli chcesz Etap E (R2 + KV + D1) |
cd drnx
wrangler login
wrangler pages deploy . --project-name drnx
Wrangler zwróci adres w formacie https://drnx.pages.dev. Aplikacja jest gotowa do pracy.
drnx/ do repozytorium GitHub lub GitLab.None/Po otwarciu adresu wykonaj kolejno:
Oczekiwany wynik: 22/22 testów zaliczonych, w tym pomiar wierności skali na wygenerowanym pliku PDF z tolerancją ±0,1 %.
wrangler pages deployment list --project-name drnx
Następnie w panelu: Pages → drnx → Custom domains → Set up a domain. Cloudflare automatycznie wystawi certyfikat TLS.
Wymaga płatnego planu Workers.
# 1. Zasoby
wrangler r2 bucket create drnx-tiles
wrangler r2 bucket create drnx-projects
wrangler kv namespace create META # zapisz zwrócone id
wrangler d1 create drnx # zapisz zwrócone database_id
# 2. Uzupełnij identyfikatory w wrangler.worker.toml
# 3. Baza danych
wrangler d1 execute drnx --file worker/schema.sql
# 4. Wdrożenie Workera
wrangler deploy --config wrangler.worker.toml
# 5. Kontrola
curl https://drnx-proxy.<twoje-konto>.workers.dev/health
# oczekiwane: {"ok":true,"role":"proxy-only"}
Adres Workera wpisz następnie do dyrektywy connect-src w pliku _headers, jeśli używasz innej domeny niż *.workers.dev.
Pliki w profiles/ są edytowalne bez zmiany kodu. Po każdej modyfikacji przelicz sumę kontrolną:
python3 -c "import json,hashlib; \
p=open('profiles/PL-2026.json').read(); d=json.loads(p); \
d['sha256']=hashlib.sha256(p.encode()).hexdigest(); \
open('profiles/PL-2026.json','w').write(json.dumps(d,indent=2,ensure_ascii=False))"
Suma kontrolna trafia do raportu obliczeniowego i zapewnia audytowalność: wiadomo, która wersja reguł dała dany wynik.
| Objaw | Przyczyna | Rozwiązanie |
|---|---|---|
| Biała strona | _redirects nie został wdrożony | Sprawdź, czy plik jest w katalogu głównym, bez rozszerzenia |
| Mapa się nie rysuje | Canvas o zerowym rozmiarze przy starcie | Przełącz zakładkę lub zmień rozmiar okna |
| PDF bez polskich znaków | Świadome uproszczenie — font Helvetica, WinAnsi | Znaki diakrytyczne są transliterowane; osadzenie fontu to zmiana zakresu |
wrangler: command not found | Brak instalacji globalnej | npm install -g wrangler |
| Worker zwraca 403 | Domena spoza allowlisty | Dopisz hosta do tablicy ALLOWLIST w worker/index.ts |
| Worker zwraca 429 | Limit 600 żądań/min na IP | Zmień stałą RATE_PER_MINUTE |
_headers wymuszają ścisłą politykę CSP bez unsafe-eval (poza kontrolowanym WASM), COOP/COEP, HSTS oraz frame-ancestors 'none'.