Vlastní hosting

Přehled

Pro většinu uživatelů je doporučenou cestou cloud BriefGate (app.briefgate.dev) — žádná infrastruktura ke správě, data zůstávají v EU a rozjedete to za 5 minut.

Vlastní hosting je tu pro případy, kdy potřebujete data na vlastní infrastruktuře, nasazení on-premises, compliance požadavky, které cloud nesplní, nebo vlastní integrace na úrovni serveru. Server BriefGate je pod licencí MIT.

Požadavky

Komponenta Minimální verze
Node.js 22+
PostgreSQL 16+
Redis 7+
Úložiště kompatibilní s S3 Nepovinné (Cloudflare R2, MinIO, AWS S3) — výchozí je lokální disk
API klíč Resend Doporučené — bez něj se upomínkové e-maily neodesílají

Rychlý start přes Docker Compose

Zdrojový kód je pod licencí MIT, ale repozitář zatím není veřejný — napište podpoře a přidá vás do něj.

bash
git clone [email protected]:sekera.radim/briefgate.git
cd briefgate
cp .env.example .env
# Upravte .env — minimální sada proměnných:
# DATABASE_URL, REDIS_URL, BASE_URL, PORTAL_URL,
# SECRETS_PUBLIC_KEY, SECRETS_PRIVATE_KEY
docker compose up -d

Compose soubor spustí Postgres, Redis a server BriefGate. V produkci provozujte Postgres a Redis jako samostatné spravované instance a nasměrujte na ně DATABASE_URL a REDIS_URL.

Vygenerování páru klíčů pro trezor

Trezor na přístupy potřebuje pár klíčů libsodium. Vygenerujte si ho před prvním spuštěním:

javascript
import libsodium from 'libsodium-wrappers';
await libsodium.ready;
const { publicKey, privateKey } = libsodium.crypto_box_keypair();
console.log('SECRETS_PUBLIC_KEY=' + Buffer.from(publicKey).toString('base64'));
console.log('SECRETS_PRIVATE_KEY=' + Buffer.from(privateKey).toString('base64'));

Privátní klíč uložte do svého správce tajemství (Vault, AWS Secrets Manager, 1Password Secrets Automation a podobně). Ani jeden z klíčů nikdy nedávejte do gitu.

Veřejný klíč šifruje hodnoty v prohlížeči klienta, privátní je dešifruje na serveru. Když pár vyměníte, stávající dosud neodhalené hodnoty už nepůjde dešifrovat — měňte ho tedy jen tehdy, když chcete začít načisto, a až poté, co jste si ověřili, že jsou všechny stávající hodnoty odhalené.

Proměnné prostředí

Proměnná Povinná Popis
DATABASE_URL Ano Připojovací řetězec k PostgreSQL (například postgres://user:pass@host:5432/briefgate)
REDIS_URL Ano Připojovací řetězec k Redisu (například redis://localhost:6379)
BASE_URL Ano Veřejná adresa API (například https://api.vasedomena.cz)
PORTAL_URL Ano Veřejná adresa portálu (například https://p.vasedomena.cz)
SECRETS_PUBLIC_KEY Ano Veřejný klíč libsodium v base64
SECRETS_PRIVATE_KEY Ano Privátní klíč libsodium v base64. Držte ho ve správci tajemství, ne v souboru .env v gitu.
RESEND_API_KEY Doporučené Doručování e-mailů přes Resend. Bez něj se upomínky ani pozvánky do portálu neodesílají.
ALLOW_SIGNUP Při prvním spuštění true povolí zakládání účtů. Po vytvoření vašeho účtu nastavte na false.
STRIPE_SECRET_KEY Nepovinné Napojení na fakturaci. Bez něj jsou limity tarifů vypnuté (každý má přístup jako Agency).
R2_ENDPOINT Nepovinné Endpoint kompatibilní s S3 (například https://<account>.r2.cloudflarestorage.com)
R2_ACCESS_KEY_ID Nepovinné Přístupový klíč k S3
R2_SECRET_ACCESS_KEY Nepovinné Tajný klíč k S3
R2_BUCKET Nepovinné Název bucketu pro soubory
STORAGE_LOCAL_DIR Nepovinné Cesta na lokálním disku pro soubory, když R2 není nastavené (výchozí ./storage)
SECRETS_TTL_DAYS Nepovinné Výchozí expirace tokenu k přístupům ve dnech (výchozí 30)
TRUST_PROXY Za proxy Počet proxy skoků před API — 1 za jednou reverzní proxy. Výchozí 0 (použije se adresa socketu). Viz varování níže.
CORS_ORIGIN Když je portál na jiném originu Čárkou oddělené originy, které smějí volat API z prohlížeče. Nenastaveno = jen stejný origin.
COOKIE_SECURE Produkce true označí session cookies jako Secure. Zapíná se samo při NODE_ENV=production.
CLAMAV_HOST Doporučené Host clamd pro antivirovou kontrolu nahraných souborů. Bez něj se soubory označí jako skipped a servírují neprověřené.
CLAMAV_TIMEOUT_MS Nepovinné Timeout kontroly (výchozí 30000). Při timeoutu se soubor označí jako error a chybné soubory se neservírují nikdy.
SESSION_COOKIE_NAME / PORTAL_COOKIE_NAME Nepovinné Názvy cookies pro session dashboardu a klientského portálu (výchozí bg_session a bg_portal). Změňte, když na stejné doméně provozujete i něco jiného.
LOG_LEVEL Nepovinné debug, info, warn, error (výchozí info)

Varování k TRUST_PROXY

Nastavte ho na počet proxy, které před API opravdu stojí, a na veřejném listeneru nikdy na true. true znamená „věř hlavičce X-Forwarded-For od kohokoli“, což volajícímu dovolí zvolit si vlastní request.ip: střídáním hlavičky obejde limit pokusů o přihlášení na IP a do každého auditního záznamu si zapíše adresu, jakou si vymyslí.

Ponechat 0 za proxy má opačný následek: každý požadavek vypadá, že přišel od proxy, takže se limit na IP scvrkne do jednoho společného koše a jeden hlučný klient zablokuje všechny ostatní.

Health checky

Endpoint Typ Popis
GET /healthz Liveness Vrátí 200, pokud proces běží
GET /readyz Readiness Vrátí 200 jen tehdy, když jsou dostupné DB i Redis

Load balancer nebo orchestrátor nastavte tak, aby o směrování rozhodoval podle /readyz. /healthz použijte pro politiku restartů (zdravý proces, který se nedostane k databázi, nemá dostávat provoz, ale nemá se ani zabíjet).

První přihlášení

Po docker compose up:

  1. Nastavte v .env hodnotu ALLOW_SIGNUP=true a restartujte (nebo ji nastavte ještě před prvním spuštěním)
  2. Vytvořte si účet:
bash
curl -X POST https://api.vasedomena.cz/v1/auth/signup \
  -H "Content-Type: application/json" \
  -d '{"email":"[email protected]","password":"...","name":"Vaše jméno"}'
  1. Nastavte ALLOW_SIGNUP=false a restartujte, aby se už nikdo další nezaregistroval

Když potřebujete víc účtů (třeba pro tým), založte je všechny, dokud je ALLOW_SIGNUP=true, a pak to vypněte.

Napojení MCP balíčku na vaši instanci

Balíček @briefgate/mcp funguje i s vlastním hostingem. Stačí nastavit základní adresu:

bash
# Přes proměnnou prostředí
BRIEFGATE_BASE_URL=https://api.vasedomena.cz briefgate-mcp --api-key bg_live_xxxxx
bash
# Přes parametr CLI
briefgate-mcp --api-key bg_live_xxxxx --base-url https://api.vasedomena.cz

Nebo v konfiguraci MCP pro Claude Code:

bash
claude mcp add briefgate -- briefgate-mcp \
  --api-key bg_live_xxxxx \
  --base-url https://api.vasedomena.cz

Adresa portálu se bere z PORTAL_URL — vaši klienti tedy dostanou odkazy směřující na vaši doménu.