Potrei dover dividere questo in tre post separati, ma sono correlati, quindi inizierò con uno.
Qualche giorno fa, ho utilizzato questo tutorial (How to Scale a Discourse Deployment with a Load Balancer and Managed Database Cluster | DigitalOcean) praticamente alla lettera e ho migrato il mio Discourse Droplet standalone su Digital Ocean a due Droplet all’interno di un Load-Balancer, finora tutto bene.
Poi ho seguito questo tutorial (Configure an S3 compatible object storage provider for uploads), ma dopo aver ricostruito Discourse dalla riga di comando, il mio sito Discourse mostrava solo una schermata vuota. Ho controllato nell’Inspector del browser per scoprire che il browser stava bloccando tutto il mio contenuto perché veniva servito da HTTP e non da HTTPS. Questo è probabilmente dovuto al fatto che il load balancer è SSL Terminated, quindi tutto ciò che è esterno è HTTPS, ma i server stessi sono in esecuzione su HTTP.
A questo punto, ho completamente rovinato di nuovo i miei server, cercando di farli funzionare con HTTPS all’interno del Load-Balancer, ma semplicemente non è stato possibile. Non sono riuscito a far funzionare lo spazio/CDN di Digital Ocean con S3/CDN secondo questo tutorial (Configure an S3 compatible object storage provider for uploads). L’ho esaminato attentamente e ho ispezionato ogni aspetto più volte, ma non ha funzionato. L’unico modo per far ricostruire Discourse è stato rimuovere il parametro DISCOURSE_S3_ENDPOINT: https://sfo3.digitaloceanspaces.com da app.yml, ma poi, anche se si era ricostruito, non sono riuscito a far rispondere il server. Ho ottenuto un errore 503 server non rispondente o un normale errore del browser server non rispondente o server disconnesso. Differiva in base alle impostazioni del Load-Balancer e dello spazio/CDN di DO che stavo provando. Ho provato ogni possibile combinazione di impostazioni e nulla mi ha permesso di servire una pagina.
Quando ho lasciato il parametro DISCOURSE_S3_ENDPOINT attivo, ho ricevuto il seguente errore durante la ricostruzione di Discourse, ma è scomparso quando ho commentato il parametro S3_ENDPOINT.
Aws::S3::Errors::InvalidAccessKeyId: Aws::S3::Errors::InvalidAccessKeyId
Tutti i miei file sono stati sincronizzati su S3, quindi penso sia sicuro presumere che la chiave di accesso fosse corretta e il problema fosse causato in qualche modo dal parametro S3_ENDPOINT.
Oggi, ho rinunciato a cercare di far funzionare il tentativo precedente e ho ripristinato un backup dei miei Droplet che stavano solo bilanciando il carico con solo HTTP e finalmente sono riuscito a farlo funzionare di nuovo seguendo questo tutorial (Set up file and image uploads to S3), ma questa volta ho modificato le impostazioni S3 tramite il pannello di amministrazione di Discourse invece di modificare app.yml con le impostazioni nel tutorial consigliato. Alla fine ha funzionato, ma la differenza importante è che ho deliberatamente omesso le impostazioni del CDN S3. Ho confermato che le immagini caricate nei post vengono archiviate su S3 e posso eseguire il backup di Discourse direttamente su S3, ed è tutto ciò che voglio, ma ora ho tre problemi che mi perseguitano, uno è critico e due sono ignorabili, anche se vorrei confermarli qui, se possibile.
Quindi, il problema critico è che gli utenti non possono più accedere utilizzando il pulsante di accesso Patreon sulla pagina di accesso di Discourse. Viene visualizzato questo messaggio:
Mi dispiace, si è verificato un errore durante l’autorizzazione del tuo account. Riprova.
L’URL è questo:
https://mbp.community/auth/failure?message=invalid_credentials&origin=https%3A%2F%2Fmbp.community%2Flogin&strategy=patreon
Apprezzerei molto qualche consiglio su cosa potrei provare per far funzionare questo, ma di nuovo, mi chiedo se questo sia dovuto al fatto che internamente i server non stanno eseguendo HTTPS. Come puoi vedere dall’URL, esternamente sono su HTTPS, quindi è difficile saperlo con certezza. Immagino che speri che qualcuno qui abbia esperienza con il Load-Balancing di Digital Ocean, ecc. con Discourse.
Gli altri due problemi vengono ora segnalati nella Console di amministrazione come segue:
Alcuni consigli basati sulle impostazioni attuali del tuo sito
- Il tuo sito web utilizza SSL. Ma
[force_https](https://mbp.community/admin/site_settings/category/all_results?filter=force_https)non è ancora abilitato nelle impostazioni del tuo sito. - Il server è configurato per caricare file su S3, ma non è configurato alcun CDN S3. Questo può portare a costi S3 costosi e a prestazioni del sito più lente. Vedi “Utilizzo dello spazio di archiviazione oggetti per i caricamenti” per saperne di più.
Quindi, non mi dispiace provare ad attivare force_https, ma temo che mi bloccherà l’accesso al mio server perché internamente i server bilanciati dal carico non sono in esecuzione su HTTPS e a causa dei problemi che ho avuto ieri, sono riluttante a passare altre dodici ore a sbattere la testa contro un muro guardando innumerevoli ricostruzioni di Discourse di 15 minuti senza ottenere nulla. Di nuovo, se qualcuno sa che è sicuro attivare force_https con le mie configurazioni, per favore fatemelo sapere.
E il secondo problema, di nuovo, non è andato bene tramite i parametri aggiunti al file app.yml, quindi sono riluttante a riprovare anche questo. Puoi confermare che questo farebbe essenzialmente la stessa cosa dei parametri aggiunti al file app.yml? Se è così, ignorerò semplicemente questo secondo messaggio. Al contrario, se per qualche motivo è sicuro provare, fammelo sapere e farò un backup e ci proverò.
Scusa per il post lungo. Spero tu possa capire cosa sto cercando di ottenere come consiglio.