@Falco - Potrebbe essere utile aggiungere un avviso per Scaleway, che supporta solo 1.000 parti per il caricamento multipart, mentre AWS ne supporta 10.000. Questo non è un problema per i caricamenti regolari, ma è un problema per i caricamenti di backup di determinate dimensioni poiché l’SDK S3 utilizzerà 10.000 parti a meno che non venga modificato manualmente e fallirà.
Ottima scoperta! Aggiungila alla wiki dell’OP, se puoi.
Grazie, aggiungo anche che è possibile utilizzare uno qualsiasi di questi strumenti per copiare da cloud a cloud, in particolare da/verso storage di oggetti compatibili con S3, ad esempio Rclone, Shargate, Gs Richcopy360 e GoodSync. tutti questi sono compatibili con cloud simili.
Abbiamo appena scoperto un problema, Cloudflare R2 non consente la lettura pubblica dall’URL dell’endpoint S3, ma solo dal dominio personalizzato o da un dominio casuale r2.dev.
(I download pre-firmati funzionano, semplicemente non è supportato l’accesso pubblico diretto.)
Ma discourse utilizza solo l’URL CDN per le immagini incorporate e non per i download diretti, che utilizzano l’URL dell’endpoint S3.
C’è un modo per farlo utilizzare l’URL CDN per tutti i file, o forzare l’uso di un URL pre-firmato?
Correlato:
La soluzione menzionata in quel post funziona, aggiungere ?dl=1 lo risolve, perché forza discourse a utilizzare un URL S3 pre-firmato.
Corretto in 2023-03-16 ora R2 funziona con Discourse alla perfezione con il piano gratuito
Ma con una certa frequenza i backup fallivano silenziosamente e i backup rimanevano sulla macchina locale, riempiendo il disco. Ho guardato gli errori di wasabi e Discourse e non ho mai trovato una spiegazione che rendesse possibile a una delle due parti “risolvere” qualcosa.
Vedo anche questo con una certa frequenza (ogni diversi mesi) anche se il mio Discourse è in esecuzione su AWS Lightsail e sto caricando su AWS S3. Quindi non sono sicuro che sia colpa di wasabi.
Sarebbe possibile intercettare questo errore e avvisare l’amministratore? Controllo lo spazio su disco e rimuovo i vecchi backup quando aggiorno, ma a volte è troppo tardi e il forum va giù per mancanza di spazio su disco.
Vedo anche questo con una certa frequenza (ogni diversi mesi) anche se il mio Discourse è in esecuzione su AWS Lightsail e sto caricando su AWS S3. Quindi non sono sicuro che sia colpa di wasabi.
Sono abbastanza sicuro che il problema fosse che i riavvii automatici del sistema operativo per gli aggiornamenti di sicurezza avvenivano mentre il backup era in esecuzione. Assicurati di pianificare i riavvii del sistema operativo e i backup in momenti diversi. È stato dopo aver spostato quel sito da wasabi che mi è venuta questa spiegazione, ma sono abbastanza sicuro che fosse così.
uptime dice che è attivo da 300 giorni, quindi non credo che sia quello il problema. Ma in modo simile, avevo pianificato i backup di Discourse alle 2:00 e gli snapshot di Lightsail alle 2:30, quindi forse l’upload a volte non viene completato e lo snapshot lo compromette. Ho separato le due operazioni di un’ora, vedremo se farà la differenza.
Indipendentemente da ciò, penso che sia ragionevole avvisare gli amministratori se l’upload fallisce, per qualsiasi motivo.
Penso che sia ora di fare gli aggiornamenti del kernel e riavviare. ![]()
Potrebbe esaurirsi la RAM?
Dopo aver implementato i backup remoti di Backblaze, vedo questo errore nella mia dashboard:
Il server è configurato per caricare file su S3, ma non è configurato alcun CDN S3. Ciò può comportare costi S3 elevati e prestazioni del sito più lente. Vedere “Utilizzo dello storage di oggetti per i caricamenti” per saperne di più.
Non ho configurato il caricamento di file, ho solo configurato i backup tramite questa configurazione:
DISCOURSE_S3_REGION: "s3.us-west-00X"
DISCOURSE_S3_INSTALL_CORS_RULE: false
DISCOURSE_S3_ENDPOINT: https://s3.us-west-00X.backblazeb2.com
DISCOURSE_S3_ACCESS_KEY_ID: mykeyid
DISCOURSE_S3_SECRET_ACCESS_KEY: myaccesskey
DISCOURSE_S3_BUCKET: community-forum
DISCOURSE_S3_BACKUP_BUCKET: community-forum/backups
DISCOURSE_BACKUP_LOCATION: s3
Ho fatto qualcosa di sbagliato?
Sembra che qualcosa sia mal configurato, ho notato che quando provo a caricare un file in un post, ricevo questo errore:
Valore non supportato per canned acl ‘public-read’
Qualsiasi aiuto sarebbe apprezzato.
DISCOURSE_S3_BUCKET: community-forum
Rimuovi questo se non vuoi che i caricamenti vadano su s3.
Hai salvato la giornata, fratello.
Grazie mille!
Ho separato le due operazioni di un’ora: vedremo se farà la differenza.
Ha funzionato?
È successo una volta nell’ultimo mese da quando ho separato i due processi di un’ora, quindi non l’ha “risolto” e non succede abbastanza spesso da dire se abbia aiutato.
Dal lato positivo, ho notato che c’è una sezione di stato del backup nella pagina di amministrazione che mostra lo spazio su disco disponibile, il che mi evita di aprire costantemente un terminale ed eseguire un df solo per verificare la presenza di backup bloccati. Ho personalizzato il testo per ricordarmi che mi aspetto circa 80 GB liberi.
Ho personalizzato il testo per ricordarmi che mi aspetto circa 80 GB liberi
È una buona idea.
Ho visto l’immagine prima di leggere che avevi personalizzato il testo e mi stavo chiedendo quale logica fosse in gioco per determinare che fosse “buono”!
Non riuscivo a far funzionare questo con Scaleway usando l’immagine Bitnami Discourse.
Le variabili d’ambiente erano impostate ma chiaramente non venivano lette/applicate correttamente (o affatto?).
Quindi ho impostato le variabili S3 nel pannello di amministrazione e ho impostato la regione direttamente nella console Rails (sperando ancora che questo diventi solo un campo di testo):
SiteSetting.s3_region="fr-par"
Mi ha dato un errore di validazione, ma ho semplicemente commentato il controllo di validazione prima di aggiornare l’impostazione, poi l’ho reinserito.
Non sono riuscito a farlo funzionare con Scaleway utilizzando l’immagine Bitnami Discourse .
L’immagine Bitnami non è pacchettizzata da noi e non segue le nostre raccomandazioni. Tutto ciò che è documentato qui è stato testato solo rispetto all’installazione ufficiale.
Questo è stato risolto abilitando “s3 use cdn url for all uploads”, un’opzione aggiunta di recente da discourse.
Poiché prima utilizzavamo R2, abbiamo dovuto usare discourse remap per sostituire manualmente i link non funzionanti, abbiamo sincronizzato i file s3 per sicurezza e poi abbiamo ricotto tutti i post.
Sto cercando di configurare questo con idrive e2, che è compatibile con s3. Tuttavia, sto ricevendo un errore/stack trace non molto utile alla fine di ./launcher rebuild app:
I, [2023-10-14T15:08:08.026184 #1] INFO -- : cd /var/www/discourse & sudo -E -u discourse bundle exec rake s3:upload_assets
rake aborted!
Aws::S3::Errors::InternalError: We encountered an internal error, please try again.
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-core-3.130.2/lib/seahorse/client/plugins/raise_response_errors.rb:17:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-s3-1.114.0/lib/aws-sdk-s3/plugins/sse_cpk.rb:24:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-s3-1.114.0/lib/aws-sdk-s3/plugins/dualstack.rb:27:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-s3-1.114.0/lib/aws-sdk-s3/plugins/accelerate.rb:56:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-core-3.130.2/lib/aws-sdk-core/plugins/checksum_algorithm.rb:111:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-core-3.130.2/lib/aws-sdk-core/plugins/jsonvalue_converter.rb:22:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-core-3.130.2/lib/aws-sdk-core/plugins/idempotency_token.rb:19:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-core-3.130.2/lib/aws-sdk-core/plugins/param_converter.rb:26:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-core-3.130.2/lib/seahorse/client/plugins/request_callback.rb:71:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-core-3.130.2/lib/aws-sdk-core/plugins/response_paging.rb:12:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-core-3.130.2/lib/seahorse/client/plugins/response_target.rb:24:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-core-3.130.2/lib/seahorse/client/request.rb:72:in `send_request'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-s3-1.114.0/lib/aws-sdk-s3/client.rb:12369:in `put_object'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-s3-1.114.0/lib/aws-sdk-s3/object.rb:1472:in `put'
/var/www/discourse/lib/s3_helper.rb:78:in `upload'
/var/www/discourse/lib/tasks/s3.rake:41:in `block in upload'
/var/www/discourse/lib/tasks/s3.rake:41:in `open'
/var/www/discourse/lib/tasks/s3.rake:41:in `upload'
/var/www/discourse/lib/tasks/s3.rake:197:in `block (2 levels) in <main>'
/var/www/discourse/lib/tasks/s3.rake:197:in `each'
/var/www/discourse/lib/tasks/s3.rake:197:in `block in <main>'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.0.6/exe/rake:27:in `<top (required)>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => s3:upload_assets
(See full trace by running task with --trace)
I, [2023-10-14T15:08:16.413098 #1] INFO -- : Installing CORS rules...
skipping
Uploading: assets/admin-2ebebf57104b0beb47a1c82fe5a8c6decd07f60a706640345fed296a094d1536.js
Questa è la configurazione che ho usato, ma ho anche provato con DISCOURSE_S3_CONFIGURE_TOMBSTONE_POLICY e DISCOURSE_S3_HTTP_CONTINUE_TIMEOUT
DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: Dallas
DISCOURSE_S3_ENDPOINT: https://y0o9.tx21.idrivee2-4.com
DISCOURSE_S3_ACCESS_KEY_ID: <snip>
DISCOURSE_S3_SECRET_ACCESS_KEY: <snip>
DISCOURSE_S3_BUCKET: discourse
DISCOURSE_S3_INSTALL_CORS_RULE: false
Nota che non lo sto usando per i backup (quello è già configurato nell’interfaccia utente con backblaze) né per DISCOURSE_CDN_URL perché non sono sicuro che idrive supporti quest’ultima - avevo in programma di sperimentare con quella una volta che avessi messo alcuni file effettivi nel bucket.
Sembra che non sia abbastanza compatibile con S3 per le esigenze di Discourse.
Se vuoi approfondire, il prossimo passo sarebbe riprodurre questo in un’installazione di sviluppo e ottenere la chiamata API esatta che fallisce.
