DRNX — instrukcja wdrożenia na Cloudflare

Wersja 1.0.0 · silnik 1.0.0 · schemat .drnx 1.0.0


1. Co wdrażamy

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.


2. Zawartość paczki


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)

3. Wymagania wstępne

ElementWymaganie
Konto Cloudflareplan darmowy wystarcza dla Pages
Node.js≥ 18 (tylko do uruchomienia wrangler)
Wrangler CLInpm install -g wrangler
Plan płatny Workerstylko jeśli chcesz Etap E (R2 + KV + D1)

4. Wdrożenie podstawowe (Pages) — 3 polecenia


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.

Wariant przez repozytorium Git


5. Weryfikacja wdrożenia

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 %.


6. Domena własna


wrangler pages deployment list --project-name drnx

Następnie w panelu: Pages → drnx → Custom domains → Set up a domain. Cloudflare automatycznie wystawi certyfikat TLS.


7. Etap E — Worker, R2, KV, D1 (opcjonalny)

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.


8. Konfiguracja profili normowych

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.


9. Rozwiązywanie problemów

ObjawPrzyczynaRozwiązanie
Biała strona_redirects nie został wdrożonySprawdź, czy plik jest w katalogu głównym, bez rozszerzenia
Mapa się nie rysujeCanvas o zerowym rozmiarze przy starciePrzełącz zakładkę lub zmień rozmiar okna
PDF bez polskich znakówŚwiadome uproszczenie — font Helvetica, WinAnsiZnaki diakrytyczne są transliterowane; osadzenie fontu to zmiana zakresu
wrangler: command not foundBrak instalacji globalnejnpm install -g wrangler
Worker zwraca 403Domena spoza allowlistyDopisz hosta do tablicy ALLOWLIST w worker/index.ts
Worker zwraca 429Limit 600 żądań/min na IPZmień stałą RATE_PER_MINUTE

10. Prywatność i bezpieczeństwo