Es posible que necesite dividir esto en tres publicaciones separadas, pero están relacionadas, así que comenzaré con una.
Hace unos días, utilicé este tutorial (How to Scale a Discourse Deployment with a Load Balancer and Managed Database Cluster | DigitalOcean) casi al pie de la letra y migré mi Discourse independiente de Droplet en Digital Ocean a dos Droplets dentro de un Balanceador de Carga, hasta ahora todo bien.
Luego seguí este tutorial (Configure an S3 compatible object storage provider for uploads), pero después de reconstruir Discourse desde la línea de comandos, mi sitio de Discourse solo mostraba una pantalla en blanco. Miré en el Inspector del navegador para descubrir que el navegador estaba bloqueando todo mi contenido porque se estaba sirviendo desde HTTP y no desde HTTPS. Esto se debe probablemente a que el balanceador de carga tiene terminación SSL, por lo que todo lo externo es HTTPS, pero los servidores en sí mismos se ejecutan en HTTP.
En este punto, volví a romper completamente mis servidores, tratando de hacer que funcionaran con HTTPS dentro del Balanceador de Carga, pero simplemente no fue posible. No pude hacer que el Espacio/CDN de Digital Ocean funcionara con S3/CDN según este tutorial (Configure an S3 compatible object storage provider for uploads). Lo revisé minuciosamente e inspeccioné cada aspecto varias veces, pero no funcionó. La única forma en que pude hacer que Discourse se reconstruyera fue eliminando el parámetro DISCOURSE_S3_ENDPOINT: https://sfo3.digitaloceanspaces.com de app.yml, pero luego, aunque se había reconstruido, no pude hacer que el servidor respondiera. Obtuve un error 503 de servidor no respondiendo o un error regular de navegador de servidor no respondiendo o servidor desconectado. Varió según la configuración del Balanceador de Carga y el Espacio/CDN de DO que estaba probando. Probé todas las combinaciones posibles de configuraciones y nada me permitió servir una página.
Cuando dejé el parámetro DISCOURSE_S3_ENDPOINT en su lugar, obtuve el siguiente error durante la reconstrucción de Discourse, pero desapareció cuando comenté el parámetro S3_ENDPOINT.
Aws::S3::Errors::InvalidAccessKeyId: Aws::S3::Errors::InvalidAccessKeyId
Todos mis archivos se sincronizaron con S3, así que creo que es seguro asumir que la Clave de Acceso estaba bien, y el problema fue causado de alguna manera por el parámetro S3_ENDPOINT.
Hoy, me di por vencido tratando de hacer funcionar el intento anterior, y restauré una copia de seguridad de mis Droplets que solo estaban balanceando carga con solo HTTP y finalmente lo logré nuevamente haciendo este tutorial (Set up file and image uploads to S3) pero esta vez edité la configuración de S3 a través del panel de administración de Discourse en lugar de editar app.yml con la configuración del tutorial recomendado. Finalmente funcionó, pero la diferencia importante es que omití deliberadamente la configuración de CDN de S3. He confirmado que las imágenes subidas a las publicaciones se almacenan en S3 y puedo hacer copias de seguridad de Discourse directamente en S3, y esto es realmente todo lo que quiero, pero ahora tengo tres problemas que me persiguen, uno es crítico y dos son ignorables, aunque me gustaría confirmarlo aquí si es posible.
Entonces, el problema crítico es que los usuarios ya no pueden iniciar sesión usando el botón de inicio de sesión de Patreon en la página de inicio de sesión de Discourse. Se muestra este mensaje:
Lo sentimos, hubo un error al autorizar su cuenta. Por favor, inténtelo de nuevo.
La URL es esta:
https://mbp.community/auth/failure?message=invalid_credentials&origin=https%3A%2F%2Fmbp.community%2Flogin&strategy=patreon
Realmente agradecería algún consejo sobre qué podría intentar para que esto funcione, pero nuevamente, me pregunto si esto se debe a que internamente los servidores no están ejecutando HTTPS. Como puede ver en la URL, externamente están en HTTPS, por lo que es difícil saberlo con seguridad. Supongo que espero que alguien aquí tenga experiencia con el balanceo de carga de Digital Ocean, etc. con Discourse.
Los otros dos problemas ahora se están señalando en la Consola de Administración de la siguiente manera:
Algunos consejos basados en la configuración actual de su sitio
- Su sitio web está utilizando SSL. Pero
[force_https](https://mbp.community/admin/site_settings/category/all_results?filter=force_https)aún no está habilitado en la configuración de su sitio. - El servidor está configurado para cargar archivos a S3, pero no hay una CDN de S3 configurada. Esto puede generar costos elevados de S3 y un rendimiento más lento del sitio. Vea “Uso de almacenamiento de objetos para cargas” para obtener más información.
Entonces, no me importa intentar activar force_https, pero me preocupa que me bloquee el acceso a mi servidor porque internamente los servidores balanceados por carga no se están ejecutando en HTTPS y, debido a los problemas que tuve ayer, soy reacio a pasar otras doce horas golpeándome la cabeza contra la pared viendo innumerables reconstrucciones de Discourse de 15 minutos sin llegar a ninguna parte. Nuevamente, si alguien sabe que es seguro activar force_https con mis configuraciones, por favor hágamelo saber.
Y el segundo problema, nuevamente, no salió bien a través de los parámetros agregados al archivo app.yml, así que también soy reacio a intentarlo de nuevo. ¿Puede confirmar que esto haría esencialmente lo mismo que los parámetros agregados al archivo app.yml? Si es así, simplemente ignoraré este segundo mensaje. Por el contrario, si por alguna razón es seguro intentarlo, hágamelo saber y haré una copia de seguridad y lo probaré.
Disculpas por la publicación larga. Espero que pueda entender lo que estoy tratando de obtener con el consejo.