Forum reso inutilizzabile

Ciao, sto cercando di abilitare i backup S3 su un server Min.IO. Quando modifico app.yml in quello che credo rifletta la documentazione, quindi ricostruisco, al completamento tutto ciò che ottengo nel browser sono i 4 puntini colorati al centro dello schermo. Quando guardo nella console ottengo;

Uncaught ReferenceError: I18n is not defined
    at admin?v=103a67b2358b…86c5a58d96d4e91:1:1
wizard?v=ab2295f1774…85b733472935c34a0:1
Uncaught ReferenceError: I18n is not defined
    at wizard?v=ab2295f1774…b733472935c34a0:1:1

Le mie modifiche a app.yml sono le seguenti;

  DISCOURSE_BACKUP_LOCATION: 's3'
  DISCOURSE_USE_S3: 'true'
  DISCOURSE_S3_REGION: 'off-cloud-backup'
  DISCOURSE_S3_ENDPOINT: 'http://borg....'
  DISCOURSE_S3_ACCESS_KEY_ID: '(my uid here)'
  DISCOURSE_S3_SECRET_ACCESS_KEY: '(my key here)'
  DISCOURSE_S3_CDN_URL: 'http://borg....'
  DISCOURSE_S3_BUCKET: 'assets'
  DISCOURSE_S3_BACKUP_BUCKET: 'discourse-data'
  DISCOURSE_S3_INSTALL_CORS_RULE: 'false'

Sul server Min ho configurato la regione, quindi un bucket pubblico chiamato ‘assets’, quindi un bucket privato chiamato ‘discourse-data’, e ovviamente le credenziali corrispondenti. Ho provato senza virgolette attorno alle variabili per sicurezza perché alcuni esempi lo fanno - nessun cambiamento.

Se modifico questi e riavvio, non sembrano essere presi. Devo fare una ricostruzione per attivarli, il che rende il ciclo di test piuttosto doloroso. Sarebbe un po’ più facile se questi campi fossero tutti disponibili nelle impostazioni di amministrazione, come sembrano essere stati storicamente, o almeno appaiono negli screenshot di alcune persone (?)

Se commento tutte le voci _S3 in app.yml e ricostruisco, funziona bene. (semplicemente non ho i backup configurati) (gli URL ENDPOINT e CDN si risolvono localmente all’IP corretto)

Configurare tutto il resto, inclusi gli abbonamenti, è stato relativamente facile, ma mi sono bloccato con questo. Qualcuno ha idea di cosa sto sbagliando?

Vuoi solo i backup su S3? Se sì, ti servono solo le chiavi e il bucket di backup.

Hai configurato tutto per gli asset su S3, ma probabilmente hai tralasciato la parte in cima alle istruzioni che contiene i rake task per precompilare gli asset e inviarli su S3.

Ciao, grazie, proverò due cose allora;

  • Ricostruisci con ACCESS, SECRET e BACKUP_BUCKET (e immagino anche endpoint?)
  • Sto provando ad aggiungere i rake tasks e a ricostruire

Hai ragione nel dire che inizialmente volevo solo i dati, ma probabilmente sarei passato agli asset una volta che qualcosa avesse funzionato.

Detto questo, la mia (molto scarsa) interpretazione della documentazione che rende il sito effettivamente morto, sembra potenzialmente problematica per i principianti. Non sono sicuro del motivo per cui la console segnala I18n come un problema, ma sembra una piccola modifica nel codice qualcosa del tipo;

if (I18n && I18n.xxx) 

piuttosto che;

if (I18n.xxx)

Potrebbe proteggere i principianti dall’uccidere i loro siti… dovrei cercare e provare a fare un PR, o è qualcosa che qualcuno con più esperienza potrebbe esaminare? Sono felice di provarci, ma non voglio perdere tempo se non è utile…?

Mmm, Ok, ho fatto un po’ di progressi, le impostazioni semplificate ora consentono il rendering della pagina, tuttavia sto ricevendo un ‘bad request’ dal server. Sto testando lo storage S3 dalla macchina discourse usando lo strumento “mc” di Min.io e sembra funzionare bene e posso elencare i bucket… tuttavia nei log sto ricevendo;

Failed to list backups from S3: Aws::S3::Errors::BadRequest

E

/var/www/discourse/lib/backup_restore/s3_backup_store.rb:140:in `rescue in unsorted_files' 
/var/www/discourse/lib/backup_restore/s3_backup_store.rb:131:in `unsorted_files' 
/var/www/discourse/lib/backup_restore/backup_store.rb:23:in `files' 

Ho fatto attenzione a copiare/incollare le impostazioni da app.yml nella configurazione “mc” per assicurarmi che non ci fossero errori di battitura… quindi sono un po’ perso per un secondo. Potrei riprovare domani…

Sta cercando di elencare il contenuto del bucket.

Non hai bisogno del rake task che ha a che fare con gli asset.

Sta tentando elencare il contenuto del bucket.
Non hai bisogno del task rake che ha a che fare con gli asset.

Ok, grazie per il tuo aiuto, l’ho notato, tuttavia non sta davvero aiutando. Ho provato Min.io e ho provato SeaweedFS, entrambi li ho configurati localmente al punto in cui sono stato in grado di scrivere un file su S3 usando uno strumento da riga di comando dalla macchina Discourse, nessuna delle due opzioni sembra voler collaborare all’interno di Discourse. Dopo aver rivisto il tempo impiegato, immagino che se i backup sono online e S3 posso capire quanto sia eccezionale l’opzione per eseguire il backup direttamente su S3, tuttavia se i tuoi backup sono “fuori dal cloud” e hai bisogno di emulare lo storage S3 solo per utilizzare l’opzione, per me è diventato un po’ troppo costoso in termini di tempo.

Tra l’altro, noto che qualcuno dice che CloudFlare S3 ora funziona, il che potrebbe essere positivo per alcune persone. CloudFlare sembra aver aggiunto 10G di S3 al suo livello gratuito, tuttavia per me i miei backup sono tipicamente fuori dal cloud su un server di backup Borg.

Quello che ho fatto invece è stato aggiungere la macchina host di Discourse alla mia VPN di backup, installare borg e borgmatic coprendo /var/discourse/shared/standalone/backups e /var/discourse/shared/standalone/log sull’host, quindi l’ho aggiunto a cron 30 minuti dopo che il backup locale è stato pianificato.

D: Potresti chiarire se i backup locali coprono tutto, o ho bisogno di altro per coprire i caricamenti? (i task rake aggiuntivi sono solo per S3?)

Il mio io paranoico semplicemente non si fida dei provider cloud con sia i sistemi live CHE i backup. Ogni volta che penso che forse mi preoccupo troppo, mi ricordo del tempo in cui mi sono presentato al sito di un cliente in risposta a il mio server non funziona per scoprire che era stato colpito da un fulmine - all’interno della sala server.

Hai seguito le istruzioni specifiche per minio qui? Configure an S3 compatible object storage provider for uploads

Se stai solo modificando quelle variabili d’ambiente, puoi fare un

  ./launcher destroy app;./launcher start app

Se andrai a metterci gli asset e non solo i backup, allora non perderti il rake task che ci invia gli asset.

1 Mi Piace

Hai seguito le istruzioni specifiche per Minio qui?

Sì. Sono felice di ammettere che potrei aver commesso degli errori e non aver letto/memorizzato tutto, ma cercare su Google la documentazione appropriata non è stato uno di questi.. :wink:

./launcher destroy app;./launcher start app

Ok, questo è utile per riferimento futuro, stavo provando stop/start, non ho molta familiarità con il modo in cui docker crea le variabili d’ambiente all’avvio.

Se metterai gli asset lì e non solo i backup, allora non perderti il task rake che li invia lì.

Certo, quella era la parte che mi confondeva un po’, li aggiungerò. Mi stavo solo chiedendo perché questi non facessero parte del backup predefinito, so che c’è un problema di spazio, ma la mia aspettativa sarebbe che in generale le persone vogliano un backup di tutto il loro contenuto? (e dato che la maggior parte delle persone non sembra verificare i propri contenuti, forse è più sicuro andare sul sicuro con tutto?)

Hmm, l’ho provato prima sulla mia istanza di test (!) .. Ho copiato e incollato due righe dalla documentazione .. c’è qualcosa di obsoleto da qualche parte?

I, [2023-09-04T18:39:51.544973 #1]  INFO -- : cd /var/www/discourse/plugins & sudo -E -u discourse bundle exec rake s3:upload_assets
bundler: failed to load command: rake (/var/www/discourse/vendor/bundle/ruby/3.2.0/bin/rake)
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/definition.rb:524:in `materialize': Could not find css_parser-1.16.0, oj-3.16.1, rotp-6.3.0, globalid-1.2.0, google-protobuf-3.24.2-x86_64-linux in locally installed gems (Bundler::GemNotFound)
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/definition.rb:197:in `specs'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/definition.rb:254:in `specs_for'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/runtime.rb:18:in `setup'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler.rb:162:in `setup'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/setup.rb:23:in `block in <top (required)>'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/ui/shell.rb:159:in `with_level'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/ui/shell.rb:111:in `silence'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/setup.rb:23:in `<top (required)>'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/cli/exec.rb:56:in `require_relative'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/cli/exec.rb:56:in `kernel_load'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/cli/exec.rb:23:in `run'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/cli.rb:492:in `exec'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/cli.rb:34:in `dispatch'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/cli.rb:28:in `start'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/exe/bundle:45:in `block in <top (required)>'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/exe/bundle:33:in `<top (required)>'
        from /usr/local/bin/bundle:25:in `load'
        from /usr/local/bin/bundle:25:in `<main>'
I, [2023-09-04T18:39:52.163459 #1]  INFO -- : 
I, [2023-09-04T18:39:52.164462 #1]  INFO -- : Terminating async processes

I miei hook sono così;

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - sudo -E -u discourse bundle exec rake s3:upload_assets
          - sudo -E -u discourse bundle exec rake s3:expire_missing_assets
          - sudo -E -u discourse git clone https://github.com/discourse/docker_manager.git
          - sudo -E -u discourse git clone https://github.com/discourse/discourse-whos-online
          - sudo -E -u discourse git clone https://github.com/discourse/discourse-solved.git
          - sudo -E -u discourse git clone https://github.com/discourse/discourse-reactions.git
          - sudo -E -u discourse git clone https://github.com/discourse/discourse-subscriptions.git
          - sudo -E -u discourse git clone https://github.com/discourse/discourse-topic-voting.git
          - sudo -E -u discourse git clone https://github.com/discourse/discourse-calendar.git
          - sudo -E -u discourse git clone https://github.com/sylque/discourse-home-page.git
          - sudo -E -u discourse git clone https://github.com/sylque/discpage.git
          - sudo -E -u discourse git clone https://github.com/discourse/discourse-onboarding-banner.git

Quei rake task non vanno lì.

Se i tuoi upload sono su S3, allora ti affidi al gestore S3 affinché funzioni, quindi non hai bisogno di backup. C’è un’impostazione nascosta per scaricare gli asset da S3 e includerli nel backup, ma quasi certamente non vorrai farlo.

Mmm, in precedenza avevo notato che qualcun altro aveva parlato di mettere le cose nella sezione sbagliata, poi ho fatto la stessa cosa comunque, eek (!)\n\nQuindi, dopo aver letto più attentamente, sembra che abbia ancora un problema, ho;\nyaml\nhooks:\n after_code:\n - exec:\n cd: $home/plugins\n cmd:\n - git clone https://github.com/discourse/docker_manager.git\n - git clone https://github.com/discourse/discourse-whos-online\n - git clone https://github.com/discourse/discourse-solved.git\n - git clone https://github.com/discourse/discourse-reactions.git\n - git clone https://github.com/discourse/discourse-subscriptions.git\n - git clone https://github.com/discourse/discourse-topic-voting.git\n - git clone https://github.com/discourse/discourse-calendar.git\n - git clone https://github.com/sylque/discourse-home-page.git\n - git clone https://github.com/sylque/discpage.git\n - git clone https://github.com/discourse/discourse-onboarding-banner.git\n\n after_assets_precompile:\n - exec:\n cd: $home\n cmd:\n - sudo -E -u discourse bundle exec rake s3:upload_assets\n - sudo -E -u discourse bundle exec rake s3:expire_missing_assets\n\nDice di incollare in app.yml nella sezione hooks .. questo sembra giusto o sono ancora nel posto sbagliato? L’errore che sto ricevendo ora è;\n\nFAILED\n--------------------\nPups::ExecError: cd /var/www/discourse &amp;&amp; sudo -E -u discourse bundle exec rake s3:upload_assets failed with return #&lt;Process::Status: pid 1845 exit 1&gt;\nLocation of failure: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'\nexec failed with the params {\"cd\"=&gt;\"$home\", \"cmd\"=&gt;[\"sudo -E -u discourse bundle exec rake s3:upload_assets\", \"sudo -E -u discourse bundle exec rake s3:expire_missing_assets\"]}\nbootstrap failed with exit code 1\n\nSto guardando indietro nei log per maggiori dettagli ma non vedo nulla. Sfortunatamente non ho mai programmato in Ruby quindi non so davvero cosa sto guardando / per cosa, qualche idea?\n\nNota; ha consigliato di eseguire ./discourse-doctor, cosa che ho fatto, ma non sembrava dirmi nulla di diverso ..