Skip to content

Cap Standalone ​

Cap Standalone ist der empfohlene Weg, Caps Backend selbst zu hosten. Es läuft auf Bun und braucht im Leerlauf rund 50 MB Arbeitsspeicher. Es bringt integrierte Unterstützung für Instrumentation-Challenges mit, die die Hürde für Bots deutlich anheben, dazu eine zu reCAPTCHA kompatible siteverify-API und ein Web-Dashboard zur Verwaltung mehrerer Site-Keys.

Wir empfehlen, Cap Standalone mit Docker zu betreiben.

Installation ​

Lege eine docker-compose.yml an:

yaml
services:
  cap:
    image: tiago2/cap:latest
    container_name: cap
    ports:
      - "3000:3000"
    environment:
      ADMIN_KEY: your_secret_password
      REDIS_URL: redis://valkey:6379
    depends_on:
      valkey:
        condition: service_healthy
    restart: unless-stopped

  valkey:
    image: valkey/valkey:9-alpine
    container_name: cap-valkey
    volumes:
      - valkey-data:/data
    command: valkey-server --save 60 1 --loglevel warning --maxmemory-policy noeviction
    healthcheck:
      test: ["CMD", "valkey-cli", "ping"]
      interval: 5s
      timeout: 3s
      retries: 5
    restart: unless-stopped

volumes:
  valkey-data:

Tipps

  • ADMIN_KEY ist dein Dashboard-Login. Wir empfehlen mindestens 32 Zeichen
  • Ändere 3000:3000, falls der Port auf deinem Host schon belegt ist.
  • Ist das Dashboard nicht erreichbar, ergänze network_mode: "host" unter dem Service cap.

Starte den Container:

bash
docker compose up -d

Öffne http://localhost:3000 (oder IP/Domain deines Servers auf Port 3000), um ins Dashboard zu kommen. Melde dich mit deinem Admin-Key an, lege einen Site-Key an und notiere dir sowohl den Site-Key als auch seinen Secret-Key, du brauchst beide.

Instrumentation-Challenges sind beim Anlegen neuer Site-Keys standardmäßig aktiv. Wir empfehlen, sie eingeschaltet zu lassen, da sie die Hürde für Bots deutlich anheben. Für zusätzlichen Schutz kannst du außerdem die Erkennung von Headless-Browsern aktivieren.

Deine Cap-Standalone-Instanz muss aus dem Internet öffentlich erreichbar sein, damit das Widget mit ihr kommunizieren kann. Wenn du einen Reverse Proxy nutzt, sieh dir den Optionen-Guide an, um das Rate Limiting korrekt zu konfigurieren.

Verwendung ​

Clientseitig ​

Richte das Widget über das Attribut data-cap-api-endpoint auf deine Instanz aus:

https://<instance_url>/<site_key>/
  • <instance_url> — die öffentliche URL deiner Cap-Standalone-Instanz
  • <site_key> — der Site-Key aus deinem Dashboard

Beispiel:

html
<cap-widget data-cap-api-endpoint="https://cap.example.com/d9256640cb53/"></cap-widget>

Wir empfehlen, unsere Widget-Dokumentation für weitere Details und Beispiel-Snippets für mehrere Frameworks zu lesen.

Serverseitig ​

Sobald ein Nutzer das CAPTCHA abgeschlossen hat, muss dein Backend das Token verifizieren, bevor du ihm traust. Schicke einen POST-Request an den /siteverify-Endpunkt deiner Instanz mit folgendem JSON-Body:

bash
curl "https://<instance_url>/<site_key>/siteverify" \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{ "secret": "<key_secret>", "response": "<captcha_token>" }'

Dabei ist <key_secret> der Secret-Key aus deinem Dashboard (nicht der Admin-Key des Dashboards) und <captcha_token> das vom Widget erzeugte Challenge-Token.

Eine erfolgreiche Verifizierung liefert:

json
{ "success": true }