Definire i link DISCOURSE_S3_CDN_URL per le risorse nell'URL CDN S3

Puoi verificare quali variabili impostiamo qui infra/modules/services/discourse/web.yml at master · debtcollective/infra · GitHub

Queste sono le variabili che impostiamo relative a S3/CDN:

  • DISCOURSE_CDN_URL
  • DISCOURSE_S3_ACCESS_KEY_ID
  • DISCOURSE_S3_BACKUP_BUCKET
  • DISCOURSE_S3_CDN_URL
  • DISCOURSE_S3_REGION
  • DISCOURSE_S3_SECRET_ACCESS_KEY
  • DISCOURSE_S3_UPLOAD_BUCKET
  • USE_DB_S3_CONFIG: true

Penso che DISCOURSE_S3_BUCKET sia stato deprecato a favore di DISCOURSE_S3_UPLOAD_BUCKET e DISCOURSE_S3_BACKUP_BUCKET. Dovresti impostare invece queste ultime.

È quello che ho presunto, ma non arrivo da nessuna parte a meno che non imposti sia DISCOURSE_S3_UPLOAD_BUCKET che DISCOURSE_S3_BUCKET. Come puoi vedere dallo snippet di codice pubblicato sopra, use_s3? sta ancora cercando s3_bucket e non s3_upload_bucket.

Impostare DISCOURSE_BACKUP_BUCKET non risolve il problema, per quanto riesco a vedere.

Se imposto entrambe le variabili d’ambiente relative ai bucket, faccio un passo avanti, ma ora ho incontrato un nuovo problema: Discourse sta ignorando il mio URL CDN S3 e sta cercando di caricare le risorse dal mio percorso di base. Questo sta causando errori CSP, poiché la Content Security Policy include solo il percorso delle risorse dalla mia CDN S3.

Dovrebbe essere DISCOURSE_S3_BACKUP_BUCKET invece di DISCOURSE_BACKUP_BUCKET. A parte questo, se stai impostando tutte le variabili con le due distribuzioni Cloudfront, dovrebbe funzionare. Se osservi le nostre impostazioni, non stiamo definendo DISCOURSE_S3_BUCKET.

Non sono sicuro se sia necessario anche un rebake.

@Falco Per quanto mi ricordi, una delle cose che rendeva questo aspetto molto controintuitivo è la differenza di comportamento tra impostare DISCOURSE_S3_CDN_URL come variabile d’ambiente o GlobalSetting e configurarlo come SiteSetting. Forse è qualcosa a cui vorrai prestare attenzione nel tuo howto.

Sì, scusa, era un errore di battitura solo nel mio post precedente. DISCOURSE_S3_BACKUP_BUCKET non imposta s3_bucket in GlobalSetting per me. Non sono sicuro di come tu stia eseguendo quel task rake senza impostare DISCOURSE_S3_BUCKET.

Comunque, apprezzo molto il tuo aiuto e mi rendo conto che non è un problema che devi risolvere, quindi grazie.

Nessun problema, non è un problema. Ho dimenticato di menzionare che definiamo anche USE_DB_S3_CONFIG: true nel nostro file app.yml. infra/modules/services/discourse/web.yml at master · debtcollective/infra · GitHub

E penso che tu abbia ragione, dato che questo modifica il comportamento di come vengono definiti i bucket S3 (discourse/lib/tasks/s3.rake at 427d54b2b00fa94474c0522eaed750452c4e7f43 · discourse/discourse · GitHub) e probabilmente è un bug.

Controlla se impostare quello fa la differenza per te.

Gentile @eatcodetravel, grazie per il tuo ottimo post.

Sto cercando di configurare CloudFront come hai fatto tu.

Devo caricare la cartella degli asset nel mio bucket S3 o avverrà automaticamente?

Cosa succederà dopo un aggiornamento di Discourse? Dovrò caricare nuovamente il tema se non avverrà automaticamente?

Grazie.

Certo.

def ensure_s3_configured!
  unless GlobalSetting.use_s3? || use_db_s3_config
    STDERR.puts "ERRORE: Assicurati che S3 sia configurato in config/discourse.conf o nelle variabili d'ambiente"
    exit 1
  end
end

use_db_s3_config ti evita di dover impostare quella variabile aggiuntiva. Deve esserci un bug in global_setting.rb, perché dovrei poter impostare semplicemente DISCOURSE_S3_UPLOAD_BUCKET, a meno che non ci sia una differenza tra questa e DISCOURSE_S3_BUCKET. Tuttavia, penso che tu abbia ragione: la seconda dovrebbe essere deprecata.

Indipendentemente da un bug in global_setting.rb, riscontro ancora un problema in cui Discourse cerca gli asset nella loro posizione abituale e non sul mio CDN S3, anche se ho dichiarato tutte le mie variabili e DISCOURSE_ENABLE_S3_UPLOADS è impostato su true.

C’è un’attività da eseguire: bundle exec rake uploads:migrate_to_s3. Una volta configurati i bucket, dovresti eseguire questa attività per spostare i file caricati su S3. S3/CDN è cambiato negli ultimi mesi e la documentazione non è aggiornata, quindi assicurati di eseguire un backup e prepararti nel caso in cui qualcosa vada storto.

Quando ho attivato questa funzionalità per la prima volta, abbiamo avuto qualche tempo di inattività mentre risolvevamo ogni cosa/

Immagino sia perché manca DISCOURSE_CDN_URL. Nel nostro file di configurazione lo abbiamo impostato così:

DISCOURSE_CDN_URL: 'https://d16zv78c963s69.cloudfront.net' # punta al server
DISCOURSE_S3_CDN_URL: 'https://community-cdn-prod.debtcollective.org' # punta al bucket S3

I fogli di stile vengono caricati dal server, quindi usano DISCOURSE_CDN_URL. I file JavaScript vengono caricati nel bucket S3 e usano DISCOURSE_S3_CDN_URL. @Falco me l’ha spiegato qui.

Sì, l’ho visto. Ho impostato DISCOURSE_CDN_URL, ma ho ancora lo stesso problema. Tuttavia sono stanco, quindi forse ho saltato qualcosa mentre facevo tutte queste modifiche. Riprenderò domani. Grazie per l’aiuto.

Questo caricherà entrambi i file come immagini e gli asset come file JS su S3? E dovrei usare un URL di CloudFront o S3 è sufficiente? Grazie per il tuo aiuto.

bundle exec rake uploads:migrate_to_s3 caricherà su S3 solo gli allegati; questa attività deve essere eseguita una sola volta. Dopo aver abilitato S3, i nuovi caricamenti verranno salvati nei bucket S3.

Per caricare le risorse, è necessario utilizzare bundle exec rake s3:upload_assets, e questo comando deve essere eseguito dopo ogni rebuild o aggiornamento.

Ho fatto quanto hai suggerito e i caricamenti su S3 (immagini, ecc.) hanno avuto successo, ma per gli asset ricevo il seguente errore:

ERROR: Ensure S3 is configured in config/discourse.conf or environment vars

Ho impostato entrambi:

DISCOURSE_CDN_URL: 'https://d16zv78c963s69.cloudfront.net' # questo punta al server
DISCOURSE_S3_CDN_URL: 'https://community-cdn-prod.debtcollective.org' # questo punta al bucket S3

Probabilmente questo è correlato a USE_DB_S3_CONFIG: true. Prova a impostare quella variabile per vedere se funziona.

Ecco tutte le variabili che ho impostato relative a S3/CDN

Sì, grazie :slightly_smiling_face:. Questo ha risolto il problema.

C’è un problema interessante: Discourse sta cercando di raggiungere i file asset dal percorso sbagliato. Cerca di accedervi tramite il percorso brotli_asset, ma questo percorso non esiste nel bucket S3.

Inoltre, cerca di raggiungere i file JavaScript e i fogli di stile dall’URL CDN, ma anche questi file non sono presenti nel bucket.

@ufukayyildiz Credo che tutte le risposte ai tuoi problemi siano in questa discussione. Ho appena completato esattamente la stessa configurazione.

In breve, devi assicurarti di aver caricato le tue risorse una volta che sono state precompilate.

Aspetta,
non capisco una cosa.

Perché impostare questi dati in ENV?

Faccio un esempio.

Impostando i dati nel pannello di amministrazione per S3, tutto funziona correttamente e tutto viene caricato su S3. Non ho alcuna impostazione in ENV. È un problema? È necessario se tutto funziona?

Il secondo esempio è diverso perché non riesco a migrare i vecchi dati su S3 (funzionano solo quelli nuovi). Ma qui, inserendo questi dati nel file app.yml (DISCOURSE_S3_ACCESS_KEY_ID: ‘key’, ecc.) non cambia nulla e continua a non funzionare (cioè

rake uploads:migrate_to_s3

non funziona)

Puoi spiegarmelo?

No, le variabili d’ambiente offrono un modo aggiuntivo per configurare queste cose, ad esempio prima di avere accesso al pannello di amministrazione.