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.
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
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.
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è