Risoluzione dei problemi di caricamento S3: il sito si blocca dopo la ricostruzione, gli asset JS non vengono caricati con net::ERR_... sia su R2 che su GCS

Ciao Team e Community di Discourse,

Ho provato a configurare la mia istanza Discourse self-hosted per utilizzare uno storage di oggetti compatibile con S3 esterno, ma mi sono imbattuto in un problema molto persistente e insolito. Sarei molto grato per qualsiasi aiuto.

Il mio ambiente:

  • Versione di Discourse: Installazione Docker standard, ultima tests-passed.

  • Host: [IL TUO PROVIDER VPS e OS] (请在这里填入您的服务商和系统)

  • Reverse Proxy: Caddy

Obiettivo: Il mio obiettivo è spostare tutti i caricamenti (caricamenti utente e asset del sito) dallo storage locale a un provider esterno.

Riepilogo del problema: Dopo aver configurato app.yml per S3 (Cloudflare R2 o Google Cloud Storage) ed eseguito ./launcher rebuild app, il sito si blocca nella schermata di caricamento iniziale (lo spinner blu). Gli strumenti per sviluppatori del browser mostrano che la maggior parte degli asset JavaScript principali non riesce a caricarsi dall’URL CDN esterno con un errore di rete generico (net::ERR_...).

Passaggi di debug eseguiti:

  1. Tentativo con Cloudflare R2:

    • Ho configurato un bucket Cloudflare R2, creato un Token API (Object Read & Write) e collegato un dominio personalizzato (s3.ryzelan.sbs) tramite Cloudflare DNS.

    • Ho configurato app.yml con le credenziali R2, il dominio personalizzato come endpoint/URL CDN e impostato DISCOURSE_FORCE_HTTPS: true e DISCOURSE_S3_FORCE_PATH_STYLE: true.

  2. Test cruciale - Passaggio a Google Cloud Storage:

    • Per escludere un problema specifico di Cloudflare, ho annullato tutte le modifiche e ho eseguito una nuova configurazione con Google Cloud Storage utilizzando chiavi di interoperabilità S3.

    • Dopo la ricostruzione con la configurazione GCS, ho riscontrato esattamente lo stesso schema di errore di caricamento JavaScript che con R2.

Stato attuale:

  • Il processo ./launcher rebuild app si completa senza errori visualizzati nel terminale.

  • Il container app è in esecuzione correttamente dopo la ricostruzione (verificato con docker ps).

  • Il comando ./launcher logs app non mostra errori; tutti i servizi interni (unicorn, redis, postgres) sembrano funzionare normalmente.

  • Il problema sembra essere un errore a livello di rete quando il browser tenta di recuperare gli asset JS dall’URL CDN esterno configurato, e questo accade indipendentemente dal provider (R2 o GCS) utilizzato.

Ecco il blocco di configurazione finale di app.yml che abbiamo utilizzato per R2 (quello per GCS era simile):

— Cloudflare R2 S3 Configuration START (Final Version) —

DISCOURSE_FORCE_HTTPS: true
DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: “us-east-1”
DISCOURSE_S3_ENDPOINT: “https://s3.ryzelan.sbs
DISCOURSE_S3_CDN_URL: “https://s3.ryzelan.sbs
DISCOURSE_S3_ACCESS_KEY_ID: “REDACTED”
DISCOURSE_S3_SECRET_ACCESS_KEY: “REDACTED”
DISCOURSE_S3_BUCKET: “ryzelan-discourse”
DISCOURSE_S3_FORCE_PATH_STYLE: true

— Cloudflare R2 S3 Configuration END —

La mia domanda: Cosa potrebbe causare il fallimento coerente di una ricostruzione Discourse appena eseguita nel caricare i propri asset da due diversi provider cloud importanti con un errore di rete? Esiste un problema noto con determinati ambienti di rete VPS, networking Docker o Caddy che potrebbe causare questo?

Grazie per il tuo tempo e per qualsiasi intuizione che puoi fornire.

Hai incluso il codice per caricare tali risorse su S3?

Se non lo fai, nessuna delle risorse sarà su S3 e il sito non verrà caricato.

@Ryze_Chen sei riuscito a risolvere il tuo problema?

Questo argomento è stato chiuso automaticamente 7 giorni dopo l’ultima risposta. Non sono più consentite nuove risposte.