Installare Discourse su una connessione internet domestica con Cloudflare Tunnel

Poiché Discourse ora supporta l’esecuzione su Raspberry Pi, l’esecuzione di una piccola istanza nel tuo home lab diventerà un caso d’uso comune. Tuttavia, molti ISP residenziali bloccano il traffico in entrata sulle porte 80/443 di cui Discourse ha bisogno.

Per il nostro sito demo su https://discourse-on-a-pi.falco.dev/ abbiamo utilizzato Cloudflare Tunnel per aggirare questo problema, e puoi farlo anche tu!

Imposta il tuo tunnel

Innanzitutto, segui la seguente guida:

https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/tunnel-guide

L’unica modifica necessaria è cambiare l’URL da url: http://localhost:8000 a url: http://localhost:80. Lascia già il tunnel in esecuzione in background.

Disabilita Rocket Loader

Devi disabilitare Cloudflare Rocket Loader affinché Discourse funzioni correttamente.

https://community.cloudflare.com/t/how-can-i-remove-the-rocket-loader-script-from-the-header-tag-on-my-website/4229/2

Installa Discourse

Segui Come installare Discourse in produzione, ma premi CTRL+C dopo che ha creato il file app.yml e ti dà un conto alla rovescia di 5 secondi.

Ora modifica le prime righe del file in modo che assomiglino a questo:

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/cloudflare.template.yml"
#  - "templates/web.ratelimited.template.yml"
## Decommenta queste due righe se desideri aggiungere Lets Encrypt (https)
#  - "templates/web.ssl.template.yml"
#  - "templates/web.letsencrypt.ssl.template.yml"

e aggiungi la seguente riga sotto la sezione env::

DISCOURSE_FORCE_HTTPS: true

E poi esegui ./launcher rebuild app.

Mentre aspetti, installa una page rule per reindirizzare sempre a HTTPS in questo modo:

In pochi minuti la tua nuova istanza Discourse sarà disponibile sul dominio che hai utilizzato nella configurazione del tunnel/Discourse :tada:.

38 Mi Piace

Penso sia meglio menzionare la porta. Se l’utente decide di utilizzare Argo Tunnel, dovrà configurare la propria porta in modo che corrisponda alle impostazioni del tunnel. Ad esempio:

-80:80
#-443:443

Quindi dovrà consentire al tunnel di ascoltare
http://localhost:80

Quello che uso io è un socket Unix per connetterli.

5 Mi Piace

Non è quello che menziono qui:

?

7 Mi Piace

Ciao Rafael,

Grazie per il tutorial.

Ho seguito tutto secondo la tua guida sopra e tutto funziona bene, tuttavia;

Cliccando sul link nell’email per attivare il mio account, vengo riportato alla pagina web corretta con un pulsante di attivazione, tuttavia questo pulsante non funziona. Ho cercato indicazioni su questo forum e sembra un problema di dominio-ip?

Ho confermato che force_https è impostato su true nella configurazione.

Qualche pensiero / hai riscontrato questo problema (screenshot allegato) del pulsante che non fa nulla?

3 Mi Piace

Va bene, sono riuscito a risolvere questo problema.

Assicurati solo che Rocket Loader sia disabilitato :wink:

Saluti!

6 Mi Piace

Infine, ho installato Discourse su Raspberry Pi. Ma ho problemi con Cloudflare Tunnels.

Non riesco ad accedere al sito Discourse tramite dominio, qualcosa di strano nella configurazione di config.yml?

url: http://localhost:80
tunnel: 371dd57c-************
credentials-file: /home/pi/.cloudflared/371dd57c-*********.json
3 Mi Piace

Qual è l’output del comando tunnel? Dovrebbe essere esplicito riguardo a eventuali errori commessi nella configurazione.

3 Mi Piace

cloudflared tunnel info output:

cloudflared tunnel info ******
2022-01-24T04:55:47Z INF Impossibile determinare il percorso predefinito del certificato di origine. Nessun file cert.pem in [~/.cloudflared ~/.cloudflare-warp ~/cloudflare-warp /etc/cloudflared /usr/local/etc/cloudflared] originCertPath=
2022-01-24T04:55:47Z ERR È necessario specificare il percorso del certificato di origine con l'opzione --origincert, o impostare la variabile d'ambiente TUNNEL_ORIGIN_CERT. Vedere https://developers.cloudflare.com/argo-tunnel/reference/arguments/ per maggiori informazioni. originCertPath=
errore nell'analisi dell'ID tunnel: Errore nell'individuazione del certificato di origine: il client non ha specificato il percorso origincert quando eseguito dal terminale
2 Mi Piace

Sembra che tu abbia smarrito il file del certificato? Se stai eseguendo come root, il file dovrebbe trovarsi sotto
/root/.cloudflared/
e non dove l’hai messo come

2 Mi Piace

Ho già il file cert.pem.

2 Mi Piace

E stai cercando di avviare la tunnel come utente pi o come root?

3 Mi Piace

Sto usando questo comando come utente pi

cloudflared tunnel run <UUID o NOME>

2 Mi Piace

Ciao @bekircem,

Sembra che il tuo Cloudflared sia stato in grado di avviare una connessione al perimetro di Cloudflare.

Hai abilitato il routing con un CNAME al tuo Argo Tunnel ID su Cloudflare?

Saluti,

Alex.

3 Mi Piace

Ciao @Stigin, grazie per la risposta.

Sì, ho abilitato il routing dalla riga di comando

2 Mi Piace

Interessante @bekircem - Hmm!!

Qual è l’errore corrente che ricevi quando navighi all’indirizzo del tuo sito web? È solo una pagina di errore generica di Cloudflare Argo Tunnel?

Potresti mostrarci i tuoi container in esecuzione eseguendo il comando: docker ps e mostrarci i tuoi tunnel attuali in esecuzione con cloudflared tunnel list || Assicurati di sfocare il tuo percorso Argo / eventuali container non pertinenti! :wink:

Alex.

3 Mi Piace

Qual è l’errore corrente che ricevi quando navighi all’indirizzo del tuo sito web? È solo una pagina di errore generica di Cloudflare Argo Tunnel?

No, non c’è nessuna pagina di errore di Cloudflare Argo Tunnel.

ERR_NAME_NOT_RESOLVED

docker ps

CONTAINER ID   IMAGE                 COMMAND        CREATED        STATUS        PORTS                                                                      NAMES
f1bde9b70f55   local_discourse/app   \"/sbin/boot\"   11 hours ago   Up 11 hours   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   app

Quando si utilizza questo comando come utente root cloudflared tunnel list

2022-01-24T15:55:03Z INF Impossibile determinare il percorso del certificato di origine predefinito. Nessun file cert.pem in [~/.cloudflared ~/.cloudflare-warp ~/cloudflare-warp /etc/cloudflared /usr/local/etc/cloudflared] originCertPath=
2022-01-24T15:55:03Z ERR È necessario specificare il percorso del certificato di origine con l'opzione --origincert, o impostare la variabile d'ambiente TUNNEL_ORIGIN_CERT. Vedi https://developers.cloudflare.com/argo-tunnel/reference/arguments/ per maggiori informazioni. originCertPath=
Errore nell'individuazione del certificato di origine: il client non ha specificato il percorso di origincert durante l'esecuzione dal terminale

Quando si utilizza questo comando come utente pi cloudflared tunnel list

È possibile ottenere informazioni più dettagliate per ogni tunnel con `cloudflared tunnel info <nome/uuid>`
ID                                   NOME      CREATO               CONNESSIONI
371dd57c-**************** ze****2022-01-24T03:35:19Z

È normale?

Dobbiamo usare un sottodominio per DISCOURSE_HOSTNAME nel file config.yml, giusto?

Aggiornamento: Ho disinstallato Cloudflared e l’ho reinstallato con l’utente root e ora funziona. Non capisco ancora dove esattamente ho sbagliato nel mio tentativo precedente.

2 Mi Piace

In qualche modo sono finalmente riuscito a far funzionare il sito su Raspberry e ora è online.

Non capisco bene come. Ho rimosso Cloudflared e l’ho reinstallato con l’utente root. E funziona…

Ho due domande:

1- Sembra che il mio certificato SSL non funzioni correttamente, quindi non riesco ad accedere al mio account di amministrazione su Discourse. (Sembra che funzioni in una scheda in incognito. Forse è una questione di cache.) Usate full o full(strict)?

2- Ho domande sull’esecuzione di cloudflared come servizio. https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/run-tunnel/run-as-service

Ho eseguito il tunnel con il comando cloudflared tunnel run <UUID o NOME>. Ma quando chiudo la finestra di iTerm smetterà di funzionare?

Se hai già effettuato l’accesso e hai un file di configurazione in ~/.cloudflared/, questi verranno copiati in /etc/cloudflared/.

Se non hai un file di configurazione, dovrai creare un file config.yml con i campi elencati sopra. Puoi passare un file personalizzato eseguendo cloudflared --config CONFIG-FILE service install.

Ho controllato, non ho un file di configurazione in /etc/cloudflared/. In questo caso, cosa devo fare per eseguire questo servizio automaticamente?

Grazie.

2 Mi Piace

Domande più specifiche sul servizio Cloudflare tunnel potrebbero ricevere risposte migliori su https://community.cloudflare.com/tag/cloudflaretunnel

3 Mi Piace

Ciao @bekircem,

Penso che la reinstallazione avrebbe risolto il problema di cloudflared che non trova il certificato…

Per quanto riguarda l’esecuzione di Cloudflare come servizio, il file di configurazione che hai creato quando hai eseguito il servizio manualmente dovrà essere spostato in /etc/cloudflared.

Non sono sicuro di poter collegare siti personali qui, quindi fammi sapere se devo rimuoverlo, ma ho trattato questo argomento in uno dei miei blog nella sezione chiamata: ‘Setup and Run Cloudflared as a Service

Facci sapere come va!

Alex.

4 Mi Piace

Grazie per la risposta.

Ottimo post sul blog, grazie per averlo condiviso.

Esegui Cloudflared come servizio

sudo cloudflared service install

Il file config.yml viene copiato automaticamente in /etc/cloudflared/.

sudo systemctl start cloudflared

sudo systemctl enable cloudflared

E funziona benissimo. Non ho ancora provato a riavviare ma spero che funzioni.

4 Mi Piace