Benutzerdefinierte Domain & HTTPS

Richten Sie Ihre eigene Domain auf einer selbst gehosteten Conzent OCI-Installation ein, beenden Sie TLS und regenerieren Sie die Einwilligungsskripte, damit jede Seite vom neuen Host geladen wird.

Benutzerdefinierte Domain & HTTPS

Eine frische Installation antwortet auf http://localhost. Diese Anleitung verschiebt sie auf Ihre eigene Domain über HTTPS — zum Beispiel https://consent.example.com.

Führen Sie dies durch, bevor Sie Seiten hinzufügen. Jedes Einwilligungsskript, das Conzent generiert, hat Ihre Domain integriert. Die Änderung der Domain später funktioniert, aber Sie müssen die Skripte regenerieren (Schritt 5) und den Einbettungscode auf jeder Website aktualisieren, die sie bereits verwendet (Schritt 6).

1. DNS auf Ihren Server zeigen

Erstellen Sie einen A-Eintrag für den gewünschten Hostnamen, der auf die öffentliche IP Ihres Servers zeigt:

consent.example.com.   A   203.0.113.10

Bestätigen Sie, dass er mit dig +short consent.example.com aufgelöst wird, bevor Sie fortfahren. Ein Subdomain einer Domain, die Sie bereits besitzen — consent., cmp., privacy. — ist die übliche Wahl.

2. APP_URL festlegen

APP_URL ist die einzige Quelle der Wahrheit für jede absolute URL, die Conzent erzeugt: Endpunkte der Einwilligungsskripte, der im Dashboard angezeigte Einbettungscode, Links zum Zurücksetzen des Passworts und OAuth-Callbacks.

Bearbeiten Sie .env in Ihrem Installationsverzeichnis:

APP_URL=https://consent.example.com

Verwenden Sie die genaue öffentliche URL, mit dem Schema und ohne abschließenden Schrägstrich. Wenn Sie TLS beenden — und das sollten Sie — bedeutet das https://, auch wenn der Container selbst intern weiterhin einfaches HTTP spricht. Das Festlegen von https:// schaltet auch das "Erinnere dich an mich"-Cookie auf Secure, sodass es niemals über einfaches HTTP gesendet wird.

Neue Installationen können die Schritte 1 und 2 in einem Rutsch durchführen:

curl -sSL https://getconzent.com/install | sh -s -- --domain consent.example.com

3. TLS beenden

Der gebündelte nginx-Container bedient einfaches HTTP auf ${APP_PORT:-80}. Er erhält oder bedient keine Zertifikate.

Option A — Caddy davor. Caddy holt und erneuert Let's Encrypt-Zertifikate automatisch. Geben Sie Port 80 frei, indem Sie APP_PORT=8080 in .env festlegen, und erstellen Sie dann docker-compose.override.yml:

services:
  caddy:
    image: caddy:latest
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./docker/caddy/Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy-data:/data
      - caddy-config:/config
    depends_on:
      - nginx
    restart: unless-stopped

volumes:
  caddy-data:
  caddy-config:

Mit docker/caddy/Caddyfile:

consent.example.com {
    reverse_proxy nginx:80
}

Führen Sie docker compose up -d aus. Caddy stellt das Zertifikat bei der ersten Anfrage aus.

Option B — ein vorhandener nginx oder Apache. Setzen Sie APP_PORT=8080 in .env und leiten Sie es weiter:

server {
    listen 443 ssl http2;
    server_name consent.example.com;

    ssl_certificate     /etc/letsencrypt/live/consent.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/consent.example.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host              $host;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

X-Forwarded-For ist über die Ordnung hinaus wichtig: Conzent zeichnet die Besucher-IP in jedem Eintrag des Einwilligungsprotokolls auf und verwendet sie für Geo-Targeting. Ohne den Header wird jede Einwilligung Ihrem Proxy zugeordnet.

Option C — Cloudflare. Proxy den Eintrag und setzen Sie den SSL/TLS-Modus auf Vollständig. Halten Sie die Ursprungstls aktiv; "Flexibel" lässt den Sprung zwischen Cloudflare und Ihrem Server unverschlüsselt. Setzen Sie CLOUDFLARE_ZONE_ID und CLOUDFLARE_API_TOKEN in .env, damit Conzent den Edge-Cache automatisch leert, wenn sich Skripte ändern.

Änderungen am Stack in docker-compose.override.yml vornehmen, niemals in docker-compose.yml — Updates setzen verfolgte Dateien zurück, und die Überschreibungsdatei bleibt unberührt.

4. Neustarten und bestätigen

docker compose up -d
docker compose exec app php bin/oci health

Laden Sie https://consent.example.com. Sie sollten die Anmeldeseite über ein gültiges Zertifikat erhalten.

5. Regenerieren Sie die Einwilligungsskripte

Dies ist der Schritt, den man leicht übersehen kann und der die seltsamsten Symptome verursacht, wenn man es tut.

Das Skript jeder Seite befindet sich unter public/sites_data/{site_key}/script.js und enthält absolute URLs, die aus APP_URL zum Zeitpunkt der Generierung erstellt wurden — der API-Endpunkt, an den die Einwilligung gesendet wird, das CSS, das abgerufen wird, die Logo-Pfade. Eine Änderung von APP_URL schreibt bereits vorhandene Skripte nicht um. Bis Sie regenerieren, rufen Banner auf den Websites Ihrer Kunden weiterhin den alten Host auf: Die Einwilligung wird gegen die falsche Herkunft aufgezeichnet oder schlägt endgültig fehl, sobald die alte Adresse nicht mehr antwortet.

docker compose exec app php bin/oci scripts:regenerate

6. Aktualisieren Sie den Einbettungscode auf Ihren Websites

Der im Dashboard angezeigte Code zeigt jetzt auf die neue Domain:

<script async src="https://consent.example.com/c/consent.js" data-key="YOUR_SITE_KEY"></script>

Wenn Sie eine Live-Installation verschieben, halten Sie den alten Hostnamen aufgelöst und leiten Sie ihn an den neuen weiter, bis Sie jeden Einbettungscode ausgetauscht haben. Der Loader ist der Einstiegspunkt für das gesamte Banner — ein defekter src bedeutet überhaupt kein Einwilligungsbanner.

7. End-to-End überprüfen

curl -sSI https://consent.example.com/c/consent.js | head -1
curl -s https://consent.example.com/sites_data/YOUR_SITE_KEY/version.json

Laden Sie dann eine Seite, die das Banner einbettet, akzeptieren Sie die Einwilligung und bestätigen Sie, dass der Eintrag unter Einwilligungsprotokolle erscheint. Diese einzige Rundreise testet DNS, TLS, den Loader, das generierte Skript und den API-Pfad zusammen.

Fehlerbehebung

Symptom Ursache
Banner erscheint nicht Der Einbettungscode zeigt weiterhin auf die alte Domain oder die Skripte wurden nie regeneriert
Einwilligungsprotokolle hörten nach dem Umzug auf Das generierte Skript sendet an den alten API-Pfad — führen Sie scripts:regenerate aus
Jedes Einwilligungsprotokoll zeigt die gleiche IP Der Proxy leitet X-Forwarded-For nicht weiter
Zurücksetzen-E-Mails verlinken auf localhost APP_URL nicht aktualisiert oder Container nicht neu gestartet nach Bearbeitung von .env
Mixed-Content-Warnungen APP_URL ist http://, während die Seite über HTTPS bereitgestellt wird
Zertifikat wird nie ausgestellt Port 80 wird immer noch von einem anderen Dienst gehalten
Compose-Bearbeitungen verschwunden Ein Update hat verfolgte Dateien zurückgesetzt — verschieben Sie sie nach docker-compose.override.yml

Die vollständige Referenz befindet sich im Code: docs/custom-domain.md auf GitHub.

Zurück zur Dokumentation