Produkty

Sites — ochrona, reguły, A/B, komentarze i migracja

Hasło/SSO dla podglądów, tryb konserwacji, redirecty i reguły geo/A-B, ochrona przed rozjazdem wersji, obrazy i OG, komentarze, zamrożenia, import z Vercel/Netlify/Cloudflare i przenoszenie między regionami.

Poza budowaniem i hostingiem Sites ma warstwę „platformową” znaną z Vercel i Netlify. Wszystko konfigurujesz w zakładkach witryny: Ochrona, Reguły, Komentarze, Alerty (oraz Ustawienia → przenoszenie), przez API, CLI i MCP.

Ochrona wdrożeń

  • Wspólne hasło — odwiedzający podaje hasło, dostaje ciasteczko na 7 dni. Przechowujemy tylko skrót scrypt; po 8 błędnych próbach z jednego IP logowanie blokuje się na 10 minut.
  • Logowanie HostBase (SSO) — wchodzą tylko zalogowani członkowie organizacji projektu; reszta widzi ekran odmowy.
  • Zakres: tylko podglądy (wdrożenia -dN- i PR) albo także produkcja i domeny własne. Witryny SSR są chronione przez Traefik forwardAuth.
  • Podglądy zawsze mają X-Robots-Tag: noindex, nofollow — nie trafiają do wyszukiwarek.

Tryb konserwacji i zamrożenie wdrożeń

Tryb konserwacji zwraca na produkcji HTTP 503 z Retry-After i Twoim komunikatem (token obejścia pozwala zespołowi testować). Zamrożenie blokuje wdrożenia produkcyjne (push, hook, redeploy, CLI) — ręcznie lub w oknach (np. piątek 15:00–23:59, albo jednorazowo na czas wyprzedaży). Rollback i podglądy działają zawsze.

Przekierowania, rewrites, nagłówki i reguły brzegowe

Edytor w panelu waliduje wzorce (:param, :rest*, *) i ma tester — pokazuje decyzję bramki dla ścieżki, kraju, urządzenia i ciasteczek na niezapisanej konfiguracji. Plik _redirects/_headers z buildu nadal działa.

  • Geo — kraj z nagłówka CF-IPCountry (włącz CDN Cloudflare).
  • Warunki — ścieżka, kraj, cookie, nagłówek, parametr zapytania, urządzenie mobilne/desktop.
  • Akcje — przekierowanie, rewrite, blokada, dodanie nagłówków, podział ruchu A/B między wdrożeniami lub ścieżkami z ciasteczkiem hb_ab_<nazwa> (30 dni) i nagłówkiem x-hostbase-ab.
  • Własne strony błędów 404 i 500 (HTML).
{
  "redirects": [{ "source": "/old/:slug*", "destination": "/new/:slug", "status": 308 }],
  "rewrites": [{ "source": "/team", "destination": "/about" }],
  "headers": [{ "source": "/*", "headers": { "x-frame-options": "DENY" } }],
  "rules": [
    { "name": "PL", "when": { "path": "/", "country": ["PL"] }, "then": { "type": "redirect", "to": "/pl", "status": 302 } },
    { "name": "Hero A/B", "when": { "path": "/" },
      "then": { "type": "split", "name": "hero", "variants": [
        { "label": "A", "weight": 50, "deployment": "d4" },
        { "label": "B", "weight": 50, "deployment": "d5" } ] } }
  ],
  "skew_hours": 24,
  "images": { "enabled": true, "domains": ["images.example.com"] },
  "og": { "enabled": true, "brand": "moja.pl", "accent": "#3ecf8e" }
}

Ochrona przed rozjazdem wersji (skew protection)

Po nowym wdrożeniu produkcyjnym zasoby poprzedniej wersji (np. /_next/static/…, /assets/…) są nadal serwowane przez skew_hours godzin (domyślnie 24, 0 = wyłączone, maks. 720), więc otwarte karty nie dostają 404 na starych chunkach. Dotyczy witryn statycznych.

Obrazy, OG i rewalidacja

  • /_hb/image?url=/hero.jpg&w=800&q=75&f=webp — skalowanie i konwersja (imgproxy: JPEG/PNG/WebP/AVIF). url to ścieżka w witrynie albo https z listy dozwolonych hostów.
  • /_hb/og?title=…&subtitle=…&theme=dark|light — obraz Open Graph 1200×630 PNG (z &format=svg dostajesz SVG).
  • Rewalidacja na żądanie dla Next.js (ISR): POST …/revalidate {"paths":["/blog"]} czyści cache CDN dla ścieżek i wywołuje endpoint aplikacji (z nagłówkiem x-revalidate-secret), w którym wołasz revalidatePath/revalidateTag.

Komentarze w podglądach

Każdy podgląd ma pasek narzędzi (dodaj komentarz → kliknij w miejsce na stronie). Wątki z odpowiedziami, „rozwiąż”, lista w panelu i powiadomienia dla zespołu. Zalogowani (SSO) komentują pod swoim imieniem; goście podają imię (limit 40 komentarzy/h/IP). Dotyczy podglądów witryn statycznych.

Powiadomienia i alerty

Wdrożenie gotowe / nieudane, zmiana wersji produkcyjnej, nowy komentarz oraz alert transferu (80% i 100% limitu GB / 30 dni) trafiają do powiadomień i kanałów organizacji: Slack, Discord, webhook, e-mail.

Import z Vercel, Netlify i Cloudflare Pages

Kreator Sites → Importuj (lub CLI/API/MCP): podajesz token API dostawcy, wybierasz projekt i dostajesz witrynę z repozytorium, komendami budowania, zmiennymi (wartości ukrytych sekretów uzupełniasz ręcznie), domenami oraz przekierowaniami/rewrites/nagłówkami z vercel.json i netlify.toml. Token jest szyfrowany, trzymany najwyżej 30 minut i usuwany po imporcie. Domeny są dodane od razu, ale ruch przełączasz dopiero zmianą DNS: panel pokazuje rekordy i weryfikuje stan (Zweryfikuj).

hostbase sites import vercel --token $VERCEL_TOKEN                 # lista projektów
hostbase sites import vercel --token $VERCEL_TOKEN --project prj_123 --name sklep
hostbase sites cutover sklep                                        # rekordy DNS + weryfikacja
# API: POST /api/v1/projects/{ref}/sites/import/{list|preview|run}   # MCP: site_import

Uprawnienia tokenu: Vercel — token konta/zespołu (odczyt projektów); Netlify — Personal Access Token; Cloudflare — Account → Cloudflare Pages → Read. Repozytoria prywatne importujesz, gdy projekt ma połączenie GitHub z dostępem do repo.

Przenoszenie między projektami i regionami

Ustawienia → Przenieś witrynę kopiuje witrynę do innego projektu — także w innym regionie (np. Warszawa ↔ Sztokholm): ustawienia, zmienne, grupy zmiennych, potok, reguły i ochronę (razem ze skrótem hasła), opcjonalnie domeny, oraz ostatnie 1–5 wdrożeń (budowane od nowa ze źródeł; produkcja ostatnia). Źródło zostaje do czasu Twojej decyzji.

hostbase sites move sklep --to abcdefghijklmnopqrst --keep 2 --domains
# API: POST /api/v1/projects/{ref}/sites/{name}/move   # MCP: site_move

Przycisk „Deploy to HostBase”

Do README publicznego repo: [![Deploy to HostBase](https://host.ulewicz.space/deploy-button.svg)](https://host.ulewicz.space/new/site?repo=https://github.com/o/r). Parametry: repo, branch, name. Po zalogowaniu i wyborze projektu kreator analizuje repozytorium (animacja wykrywania frameworka) i prowadzi do wdrożenia.

API

GET|PUT   /api/v1/projects/{ref}/sites/{name}/platform        POST …/platform/test
GET|PUT   …/freeze        GET|PUT …/notifications        POST …/revalidate
GET|POST  …/comments      POST|DELETE …/comments/{id}
POST      …/move          GET …/cutover                  POST /sites/import/{list|preview|run}
# MCP: site_platform, site_rules_test, site_freeze, site_notifications, site_comments, site_revalidate, site_import, site_cutover, site_move