Instalar Discourse en una internet residencial con Cloudflare Tunnel

Dado que Discourse ahora tiene soporte para ejecutarse en una Raspberry Pi, ejecutar una instancia pequeña en tu laboratorio en casa se convertirá en un caso de uso común. Sin embargo, muchos ISP residenciales bloquean el tráfico entrante a los puertos 80/443 que Discourse necesita.

Para nuestro sitio de demostración en https://discourse-on-a-pi.falco.dev/ utilizamos Cloudflare Tunnel para solucionar esto, ¡y tú también puedes hacerlo!

Configura tu túnel

Primero, sigue la siguiente guía:

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

El único cambio que necesitas es cambiar la URL de url: http://localhost:8000 a url: http://localhost:80. Deja el túnel ejecutándose en segundo plano.

Deshabilita Rocket Loader

Debes deshabilitar Cloudflare Rocket Loader para que Discourse funcione correctamente.

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

Instala Discourse

Sigue Cómo instalar Discourse en producción, pero presiona CTRL+C después de que cree el archivo app.yml y te dé una cuenta regresiva de 5 segundos.

Ahora edita las primeras líneas del archivo para que se vean así:

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/cloudflare.template.yml"
#  - "templates/web.ratelimited.template.yml"
## Descomenta estas dos líneas si deseas agregar Lets Encrypt (https)
#  - "templates/web.ssl.template.yml"
#  - "templates/web.letsencrypt.ssl.template.yml"

Y agrega la siguiente línea debajo de la sección env::

DISCOURSE_FORCE_HTTPS: true

Y luego ejecuta ./launcher rebuild app.

Mientras esperas, instala una regla de página para redirigir siempre a HTTPS de esta manera:

En unos minutos, tu nueva instancia de Discourse estará disponible en el dominio que usaste en la configuración del túnel/Discourse :tada:.

38 Me gusta

Creo que es mejor mencionar el puerto. Si el usuario decide usar el túnel argo, entonces necesita configurar su puerto igual que la configuración del túnel. Por ejemplo:

-80:80
#-443:443

luego necesitan dejar que el túnel escuche
http://localhost:80

Lo que yo uso es un socket unix para conectarlos.

5 Me gusta

¿No es eso lo que menciono aquí?

?

7 Me gusta

Hola Rafael,

Gracias por el tutorial.

He seguido todo según tu guía anterior y todo funciona bien, sin embargo;

Al hacer clic en el enlace del correo electrónico para activar mi cuenta, vuelvo a la página web correcta con un botón de activación, pero este botón no funciona. He buscado orientación en este foro y parece ser un problema de dominio a IP.

He confirmado que force_https está configurado en true en la configuración.

¿Alguna idea / te encontraste con este problema (captura de pantalla adjunta) del botón que no hace nada?

3 Me gusta

Bien, he logrado solucionar esto.

Solo asegúrate de que Rocket Loader esté deshabilitado :wink:

¡Saludos!

6 Me gusta

Finalmente, instalé Discourse en Raspberry Pi. Pero tengo problemas con Cloudflare Tunnels.

No puedo acceder al sitio de Discourse con el dominio, ¿hay algo extraño en la configuración de config.yml?

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

¿Cuál es la salida del comando tunnel? Debería ser explícito sobre cualquier error que haya cometido en la configuración.

3 Me gusta

cloudflared tunnel info salida:

cloudflared tunnel info ******
2022-01-24T04:55:47Z INF No se puede determinar la ruta predeterminada del certificado de origen. No hay ningún archivo cert.pem en [~/.cloudflared ~/.cloudflare-warp ~/cloudflare-warp /etc/cloudflared /usr/local/etc/cloudflared] originCertPath=
2022-01-24T04:55:47Z ERR Debe especificar la ruta del certificado de origen con la opción --origincert, o establecer la variable de entorno TUNNEL_ORIGIN_CERT. Consulte https://developers.cloudflare.com/argo-tunnel/reference/arguments/ para obtener más información. originCertPath=
error al analizar el ID del túnel: Error al localizar el certificado de origen: el cliente no especificó la ruta del certificado de origen al ejecutarse desde la terminal
2 Me gusta

Parece que extraviaste el archivo del certificado. Si se está ejecutando como root, el archivo debería estar en

/root/.cloudflared/

y no donde lo pusiste como

2 Me gusta

Ya tengo el archivo cert.pem.

2 Me gusta

¿Y está intentando iniciar el túnel como el usuario pi o como root?

3 Me gusta

Estoy usando este comando como usuario pi

cloudflared tunnel run <UUID o NOMBRE>

2 Me gusta

Hola @bekircem,

Parece que tu Cloudflared ha podido iniciar una conexión con el borde de Cloudflare.

¿Has habilitado el enrutamiento con un CNAME a tu ID de Argo Tunnel en Cloudflare?

Saludos,

Alex.

3 Me gusta

Hola @Stigin, gracias por tu respuesta.

Sí, tengo habilitado el enrutamiento desde la línea de comandos.

2 Me gusta

Interesante @bekircem - ¡Hmm!

¿Cuál es el error actual que obtienes al navegar a la dirección de tu sitio web? ¿Es solo una página genérica de error de Cloudflare Argo Tunnel?

¿Podrías mostrarnos tus contenedores en ejecución ejecutando el comando: docker ps y mostrarnos tus túneles en ejecución actuales con cloudflared tunnel list || ¡Asegúrate de difuminar tu ruta de argo / cualquier contenedor no relevante! :wink:

Alex.

3 Me gusta

¿Cuál es el error actual que estás recibiendo al navegar a la dirección de tu sitio web? ¿Es solo una página de error genérica de Cloudflare Argo Tunnel?

No, no hay ninguna página de error de 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

Cuando se usa este comando como usuario root cloudflared tunnel list

2022-01-24T15:55:03Z INF No se puede determinar la ruta predeterminada del certificado de origen. No hay ningún archivo cert.pem en [~/.cloudflared ~/.cloudflare-warp ~/cloudflare-warp /etc/cloudflared /usr/local/etc/cloudflared] originCertPath=
2022-01-24T15:55:03Z ERR Debes especificar la ruta del certificado de origen con la opción --origincert, o establecer la variable de entorno TUNNEL_ORIGIN_CERT. Consulta https://developers.cloudflare.com/argo-tunnel/reference/arguments/ para obtener más información. originCertPath=
Error al localizar el certificado de origen: el cliente no especificó la ruta del certificado de origen al ejecutarse desde la terminal

Cuando se usa este comando como usuario pi cloudflared tunnel list

Puedes obtener información más detallada de cada túnel con `cloudflared tunnel info <nombre/uuid>`
ID                                   NOMBRE      CREADO               CONEXIONES
371dd57c-**************** ze****2022-01-24T03:35:19Z

¿Es normal?

Necesitamos usar un subdominio para DISCOURSE_HOSTNAME en el archivo config.yml, ¿verdad?

Actualización: Desinstalé Cloudflared y lo reinstalé como usuario root y ahora funciona. Todavía no entiendo dónde me equivoqué exactamente en mi intento anterior.

2 Me gusta

Finalmente logré poner en marcha el sitio en Raspberry y está en línea.

No entiendo muy bien cómo. Desinstalé Cloudflared y lo reinstalé con el usuario root. Y funciona…

Tengo dos preguntas:

1- Parece que mi certificado SSL no funciona correctamente, por lo que no puedo iniciar sesión en mi cuenta de administrador en Discourse. (Parece que se está ejecutando en una pestaña de incógnito. Quizás sea algo sobre la caché). ¿Estás usando “full” o “full(strict)”?

2- Tengo preguntas sobre cómo ejecutar cloudflared como un servicio. https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/run-tunnel/run-as-service

Ejecuté el túnel con el comando cloudflared tunnel run <UUID o NOMBRE>. Pero, ¿dejará de funcionar cuando cierre la ventana de iTerm?

Si ya has iniciado sesión y tienes un archivo de configuración en ~/.cloudflared/, estos se copiarán a /etc/cloudflared/.

Si no tienes un archivo de configuración, deberás crear un archivo config.yml con los campos enumerados anteriormente. Puedes pasar un archivo personalizado ejecutando cloudflared --config CONFIG-FILE service install.

Comprobé y no tengo un archivo de configuración en /etc/cloudflared/. En este caso, ¿qué debo hacer para ejecutar este servicio automáticamente?

Gracias.

2 Me gusta

Las preguntas más específicas sobre el servicio Cloudflare Tunnel pueden recibir mejores respuestas en https://community.cloudflare.com/tag/cloudflaretunnel

3 Me gusta

Hola @bekircem,

Creo que reinstalarlo habría solucionado el problema de que cloudflared no encontrara el certificado…

Con respecto a la ejecución de Cloudflare como un servicio, el archivo de configuración que creaste al ejecutar el servicio manualmente deberá moverse a /etc/cloudflared.

No estoy seguro de enlazar sitios personales aquí, así que por favor házmelo saber si necesito eliminar esto, pero lo he cubierto en uno de mis blogs bajo la sección llamada: ‘Configurar y ejecutar Cloudflared como un servicio

¡Cuéntanos cómo te va!

Alex.

4 Me gusta

Gracias por la respuesta.

Gran publicación de blog, gracias por compartir.

Ejecutar Cloudflared como un servicio

sudo cloudflared service install

El archivo config.yml se copia automáticamente a /etc/cloudflared/.

sudo systemctl start cloudflared

sudo systemctl enable cloudflared

Y está funcionando muy bien. Aún no he intentado reiniciar, pero espero que funcione.

4 Me gusta