Volevo solo condividere i passaggi che ho seguito per configurare una sottocartella insieme a Cloudflare, specialmente quando il sito web principale è già attivo e il dominio principale non può essere puntato al server del forum (nemmeno temporaneamente).
Punti Chiave
- L’esistente
mywebsite.compunta attualmente a1.1.1.1ed è attivo - Dovremmo instradare
mywebsite.com/forum(e le sue sottodirectory) a2.2.2.2 - Poiché durante l’installazione di Discourse non possiamo superare la validazione letsencrypt (che verifica se il dominio risolve il server corrente) dovremmo usare la validazione DNS
Modifiche in app.yml
Aggiornamenti Letsencrypt
Crea un nuovo template letsencrypt e impostalo in app.yml secondo questo argomento: LetsEncrypt DNS Validation Template Using Cloudflare
Tuttavia, assicurati di copiare solo il metodo issue_cert da quel post, e il resto del contenuto prendilo dall’originale web.letsencrypt.ssl.template.yml (poiché è stato modificato dopo la pubblicazione dell’argomento).
LETSENCRYPT_CF_TOKEN: ""
LETSENCRYPT_CF_ACCOUNT_ID: ""
LETSENCRYPT_CF_ZONE_ID: ""
LETSENCRYPT_DNS_PROVIDER: "dns_cf"
- Puoi creare il token Cloudflare dalla pagina del mio profilo CF → “API Tokens”.
- L’Account ID e il Zone ID sono mostrati nella pagina Panoramica del dominio.
- Lascia il valore del provider DNS come sopra
Aggiornamenti Sottocartella
Secondo questo argomento Serve Discourse from a subfolder (path prefix) instead of a subdomain imposta DISCOURSE_RELATIVE_URL_ROOT: /forum sotto env: e aggiorna la sezione run:.
Nota questo post per gli IP degli utenti: Serve Discourse from a subfolder (path prefix) instead of a subdomain - #111 by varun21
Ricompilazione
Dopo aver modificato app.yml per eseguire il comando di ricompilazione, dobbiamo saltare il controllo di Discourse per la risoluzione del dominio al server IP corrente (poiché il nostro mywebsite.com è già puntato a 1.1.1.1, e Discourse controlla il dominio principale), per questo esegui:
./launcher rebuild app --skip-connection-test
Configurazione Cloudflare
So che alcune persone raccomandano di usare Workers per instradare /forum a 2.2.2.2, tuttavia ho trovato molto più facile farlo con il Load Balancing. Con i Workers non sono riuscito a risolvere problemi relativi a css/js, anche con rocket loader e altre impostazioni simili disabilitate. Quindi,
- Attiva il Load Balancer (sotto Traffic)
- Seleziona “Manage Pools” → “Create”
- Crea 2 pool (per il sito web principale e per il forum), ognuno dei quali dovrebbe avere un solo endpoint
- Crea Load Balancer, l’hostname dovrebbe essere
mywebsite.com - Sotto la sezione endpoints, scegli entrambi i pool
- Salta i Monitor (poiché non abbiamo bisogno di monitorare lo stato del server, il sito web principale dovrebbe sempre puntare a
1.1.1.1e il forum a2.2.2.2), Salta Traffic Steering (l’impostazione predefinita è disattivata) - Sotto Custom Rule, creane una con la condizione di percorso come
/forume puntala all’endpoint del forum
- Salva/Distribuisci
Note
- Per qualche motivo copiare il sample app.yml e poi ricompilare non ha funzionato per me (probabilmente stavo facendo qualcosa di sbagliato). Quindi, come soluzione ho eseguito discourse-setup per la prima volta con un altro dominio e poi, insieme ad altre modifiche a app.yml, ho cambiato l’hostname e ho eseguito la ricompilazione finale.
- Discourse genera 2 certificati da letsencrypt,
RSA certeECDSA cert, e letsencrypt ha un limite di 5 certificati per dominio esatto a settimana, se fai qualcosa di sbagliato 2 volte di seguito, il terzo tentativo emetterà solo un certificato e il forum non funzionerà (puoi controllare il limite attuale con questo script GitHub - sahsanu/lectl: Script to check issued certificates by Let's Encrypt on CTL (Certificate Transparency Log) using https://crt.sh). - CF Load Balancer non è gratuito, tuttavia considerando (al momento) 5 dollari per 500k richieste DNS, penso che ne valga la pena, rispetto ai problemi con nginx ecc.

