Foro inutilizable

Hola, estoy intentando habilitar las copias de seguridad de S3 en un servidor Min.IO. Cuando modifico app.yml para que refleje lo que creo que dice la documentación, y luego reconstruyo, al finalizar todo lo que obtengo en el navegador son los 4 puntos de colores en el centro de la pantalla. Cuando miro en la consola, obtengo:

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

Mis cambios en app.yml son los siguientes:

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

En el servidor Min, tengo configurada la región, luego un bucket público llamado ‘assets’, luego un bucket privado llamado ‘discourse-data’, y obviamente credenciales que coinciden. He probado sin comillas alrededor de las variables por si acaso, ya que algunos ejemplos lo hacen, pero no hay cambios.

Si modifico estos y reinicio, no parecen aplicarse. Necesito hacer una reconstrucción para que se activen, lo que hace que el ciclo de pruebas sea bastante doloroso. Sería un poco más fácil si todos estos campos estuvieran disponibles en la configuración de administración, como parece haber sido históricamente, o al menos aparecen en las capturas de pantalla de algunas personas (?).

Si comento todas las entradas _S3 en app.yml y reconstruyo, funciona bien. (Simplemente no tengo las copias de seguridad configuradas) (las URL de ENDPOINT y CDN se resuelven localmente a la IP correcta).

Configurar todo lo demás, incluidas las suscripciones, fue relativamente fácil, pero he chocado contra un muro con esto. ¿Alguien tiene alguna idea de lo que estoy haciendo mal?

¿Solo quieres copias de seguridad en S3? Si es así, solo necesitas tener las claves y el bucket de copias de seguridad.

Lo tienes configurado para todos los activos en S3, pero probablemente omitiste la parte superior de las instrucciones que tienen tareas de rake para precompilar activos y enviarlos a S3.

Hola, gracias por eso, voy a intentar dos cosas entonces;

  • Reconstruir con ACCESS, SECRET y BACKUP_BUCKET (¿y asumo que endpoint?)
  • Intentar añadir las tareas de rake y reconstruir

Tienes razón en que inicialmente solo quería los datos, pero probablemente habría progresado a los activos una vez que algo funcionara.

Dicho todo esto, mi (muy pobre) interpretación de la documentación que hace que el sitio parezca efectivamente muerto, parece potencialmente problemática para los novatos. No estoy seguro de por qué la consola informa que I18n es un problema, pero parece una modificación menor en el código, algo así como;

if (I18n && I18n.xxx) 

en lugar de;

if (I18n.xxx)

Podría proteger a los novatos de matar sus sitios… ¿debería rastrear e intentar hacer un PR, o es algo que alguien con más experiencia podría mirar? Estaré encantado de intentarlo, pero no quiero perder mi tiempo si no es útil… ?

Mmm, Ok, he avanzado un poco, la configuración simplificada ahora permite que la página se renderice, sin embargo, ahora estoy recibiendo un ‘bad request’ del servidor. Estoy probando el almacenamiento S3 desde la máquina de Discourse usando la herramienta “mc” de Min.io y parece funcionar bien y puedo listar buckets… sin embargo, en los logs estoy recibiendo;

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

Y

/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' 

Me aseguré de copiar y pegar la configuración de app.yml en la configuración de “mc” para asegurarme de que no hubiera errores tipográficos… así que estoy un poco perdido por un segundo. Quizás lo intente de nuevo mañana…

Está intentando listar el contenido del bucket.

No necesita la tarea rake que tiene que ver con los activos.

Está intentando listar el contenido del bucket.
No necesita la tarea rake que tiene que ver con los activos.

Ok, gracias por tu ayuda, me di cuenta de eso, sin embargo, no está sirviendo de mucho. He probado Min.io y SeaweedFS, ambos los he configurado localmente hasta el punto en que he podido escribir un archivo en S3 usando una herramienta de línea de comandos desde la máquina de Discourse, ninguna de las opciones parece querer cooperar desde dentro de Discourse. Después de revisar el tiempo invertido, supongo que si las copias de seguridad están en línea y en S3, puedo ver lo genial que es la opción de hacer copias de seguridad directamente en S3, sin embargo, si tus copias de seguridad están “fuera de la nube” y necesitas emular almacenamiento S3 solo para usar la opción, para mí se ha vuelto un poco demasiado caro en términos de tiempo.

Por cierto, he notado que alguien dice que CloudFlare S3 ahora funciona, lo que podría ser bueno para algunas personas. CloudFlare parece haber agregado 10G de S3 a su nivel gratuito, sin embargo, para mí, mis copias de seguridad suelen estar fuera de la nube en un servidor de copias de seguridad Borg.

Lo que he hecho en su lugar es agregar la máquina host de Discourse a mi VPN de copias de seguridad, instalar borg y borgmatic cubriendo /var/discourse/shared/standalone/backups y /var/discourse/shared/standalone/log en el host, luego agregué esto a cron 30 minutos después de que se programa la copia de seguridad local.

P: ¿Podrías aclarar si las copias de seguridad locales cubren todo, o necesito más para cubrir las cargas? (¿las tareas rake adicionales son solo para S3?)

Mi yo paranoico simplemente no confía en los proveedores de la nube con sistemas en vivo Y copias de seguridad. Cada vez que pienso que tal vez me preocupo demasiado, me recuerdo la vez que me presenté en el sitio de un cliente en respuesta a mi servidor no funciona y descubrí que había sido alcanzado por un rayo, dentro de la sala del servidor.

¿Seguiste las instrucciones específicas de Minio aquí? Configure an S3 compatible object storage provider for uploads

Si solo estás cambiando esas variables de entorno, puedes hacer un

  ./launcher destroy app;./launcher start app

Si vas a poner activos allí y no solo copias de seguridad, entonces no te pierdas la tarea de rake que envía los activos allí.

1 me gusta

¿Seguiste las instrucciones específicas de Minio aquí?

Sí, lo hice. Estoy bastante contento de admitir que puedo haber cometido errores y no haber leído / retenido todo, pero buscar en Google la documentación adecuada no fue uno de ellos… :wink:

./launcher destroy app;./launcher start app

Ok, eso es útil para referencia futura, estaba intentando detener / iniciar, no estoy muy familiarizado con cómo docker crea variables de entorno al arrancar.

Si vas a poner activos allí y no solo copias de seguridad, entonces no te pierdas la tarea rake que los envía allí.

Claro, esa fue la parte que me confundió un poco, los añadiré. Solo me preguntaba por qué estos no serían parte de la copia de seguridad predeterminada, sé que hay un problema de espacio, pero mi expectativa sería que, en general, la gente quiera una copia de seguridad de todo su contenido? (y como la mayoría de la gente no parece verificar sus contenidos, ¿errar por el lado de todo es quizás más seguro?)

Hmm, lo probé primero en mi instancia de prueba (!) … Copié y pegué dos líneas de la documentación … ¿hay algo desactualizado en alguna 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

Mis hooks se ven así;

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

Esas tareas de rake no van ahí.

Si tus subidas están en S3, entonces dependes del administrador de S3 para que funcione, por lo que no necesitas copias de seguridad. Hay una configuración oculta para descargar activos de S3 e incluirlos en la copia de seguridad, pero es casi seguro que no querrás hacer eso.

Mmm, anteriormente noté que alguien más había hablado sobre poner cosas en la sección incorrecta, luego procedí e hice lo mismo de todos modos, ¡uy!

Así que, después de leer más detenidamente, todavía parece que tengo un problema, tengo:

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

  after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - sudo -E -u discourse bundle exec rake s3:upload_assets
          - sudo -E -u discourse bundle exec rake s3:expire_missing_assets

Dice que pegue en app.yml en la sección hooks… ¿se ve bien o todavía estoy en el lugar equivocado? El error que estoy obteniendo ahora es:

FAILED
--------------------
Pups::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;
Location of failure: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec failed with the params {"cd"=>"$home", "cmd"=>["sudo -E -u discourse bundle exec rake s3:upload_assets", "sudo -E -u discourse bundle exec rake s3:expire_missing_assets"]}
bootstrap failed with exit code 1

Estoy revisando los registros para obtener más detalles, pero no veo nada. Desafortunadamente, nunca he programado en Ruby, así que realmente no sé qué estoy mirando / buscando, ¿alguna idea?

Nota: recomendó ejecutar ./discourse-doctor, lo cual hice, pero no pareció decirme nada diferente.