Dominio personalizzato e HTTPS

Punta il tuo dominio su un'installazione Conzent OCI self-hosted, termina TLS e rigenera gli script di consenso affinché ogni sito venga caricato dal nuovo host.

Dominio personalizzato & HTTPS

Una nuova installazione risponde su http://localhost. Questa guida la sposta sul tuo dominio tramite HTTPS — ad esempio https://consent.example.com.

Esegui questa operazione prima di aggiungere siti. Ogni script di consenso generato da Conzent contiene il tuo dominio al suo interno. Cambiare il dominio in seguito è possibile, ma dovrai rigenerare gli script (passaggio 5) e aggiornare lo snippet di incorporamento su ogni sito web che li utilizza già (passaggio 6).

1. Punta il DNS al tuo server

Crea un record A per il nome host desiderato, puntando all'IP pubblico del tuo server:

consent.example.com.   A   203.0.113.10

Verifica che si risolva con dig +short consent.example.com prima di continuare. Un sottodominio di un dominio che già possiedi — consent., cmp., privacy. — è la scelta più comune.

2. Imposta APP_URL

APP_URL è l'unica fonte di verità per ogni URL assoluto prodotto da Conzent: endpoint degli script di consenso, snippet di incorporamento mostrato nella dashboard, link di reimpostazione password e callback OAuth.

Modifica .env nella directory di installazione:

APP_URL=https://consent.example.com

Usa l'URL pubblico esatto, con lo schema e senza barra finale. Se stai terminando TLS — e dovresti — significa https://, anche se il container stesso continua a comunicare in HTTP semplice internamente. Impostare https:// imposta anche il cookie "ricordami" come Secure, in modo che non venga mai inviato tramite HTTP semplice.

Le nuove installazioni possono eseguire i passaggi 1 e 2 in un'unica operazione:

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

3. Termina TLS

Il container nginx incluso serve HTTP semplice su ${APP_PORT:-80}. Non ottiene né serve certificati.

Opzione A — Caddy davanti. Caddy recupera e rinnova automaticamente i certificati Let's Encrypt. Libera la porta 80 impostando APP_PORT=8080 in .env, quindi crea 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:

Con docker/caddy/Caddyfile:

consent.example.com {
    reverse_proxy nginx:80
}

Esegui docker compose up -d. Caddy emette il certificato alla prima richiesta.

Opzione B — un nginx o Apache esistente. Imposta APP_PORT=8080 in .env, quindi fai il proxy verso di esso:

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 ha importanza al di là dell'ordine: Conzent registra l'IP del visitatore per ogni voce del log di consenso e lo utilizza per il geo-targeting. Senza l'header, ogni consenso viene attribuito al tuo proxy.

Opzione C — Cloudflare. Metti il record in proxy e imposta la modalità SSL/TLS su Full. Mantieni TLS sull'origine attivo; "Flexible" lascia il tratto tra Cloudflare e il tuo server non cifrato. Imposta CLOUDFLARE_ZONE_ID e CLOUDFLARE_API_TOKEN in .env affinché Conzent purghi automaticamente la cache edge quando gli script cambiano.

Metti le modifiche allo stack in docker-compose.override.yml, mai in docker-compose.yml — gli aggiornamenti ripristinano i file tracciati, mentre il file di override viene lasciato intatto.

4. Riavvia e conferma

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

Carica https://consent.example.com. Dovresti ottenere la pagina di accesso tramite un certificato valido.

5. Rigenera gli script di consenso

Questo è il passaggio che è facile tralasciare e che produce i sintomi più strani se lo fai.

Lo script di ogni sito si trova in public/sites_data/{site_key}/script.js e contiene URL assoluti costruiti da APP_URL al momento della generazione — l'endpoint API a cui invia il consenso, il CSS che carica, i percorsi dei logo. Cambiare APP_URL non riscrive gli script già esistenti. Finché non li rigeneri, i banner sui siti dei tuoi clienti continuano a chiamare il vecchio host: il consenso viene registrato contro l'origine sbagliata, o fallisce del tutto una volta che il vecchio indirizzo smette di rispondere.

docker compose exec app php bin/oci scripts:regenerate

6. Aggiorna lo snippet di incorporamento sui tuoi siti web

Lo snippet mostrato nella dashboard ora punta al nuovo dominio:

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

Se stai spostando un'installazione in produzione, tieni il vecchio nome host attivo e in proxy verso il nuovo finché non hai sostituito tutti gli incorporamenti. Il loader è il punto di ingresso per l'intero banner — un src non funzionante significa nessun banner di consenso.

7. Verifica end to end

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

Poi carica una pagina che incorpora il banner, accetta il consenso e verifica che la voce appaia sotto Consent Logs. Quel singolo ciclo completo verifica DNS, TLS, il loader, lo script generato e il percorso API insieme.

Risoluzione dei problemi

Sintomo Causa
Il banner non appare L'incorporamento punta ancora al vecchio dominio, oppure gli script non sono mai stati rigenerati
I log di consenso si sono fermati dopo lo spostamento Lo script generato sta inviando al vecchio percorso API — esegui scripts:regenerate
Ogni log di consenso mostra lo stesso IP Il proxy non sta inoltrano X-Forwarded-For
Le email di reimpostazione puntano a localhost APP_URL non aggiornato, o i container non riavviati dopo la modifica di .env
Avvisi di contenuto misto APP_URL è http:// mentre il sito viene servito tramite HTTPS
Il certificato non viene mai emesso La porta 80 è ancora occupata da un altro servizio
Le modifiche a Compose sono scomparse Un aggiornamento ha ripristinato i file tracciati — spostali in docker-compose.override.yml

Il riferimento completo si trova con il codice: docs/custom-domain.md su GitHub.

Torna alla Documentazione