Configurar un proveedor de almacenamiento de objetos compatible con S3 para cargas

Puedes echar un vistazo a la consola de javascript. Supongo que o bien la CDN es incorrecta o no has configurado correctamente la compilación previa de los assets.

https://community.itechguides.com/ funciona ahora:

Si no te funciona, prueba una recarga forzada y/o una ventana de incógnito.

2 Me gusta

El sitio se abrió para ti porque, en el momento en que lo abriste, había comentado las siguientes líneas del archivo app.yml:

DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: nyc3
DISCOURSE_S3_ENDPOINT: https://nyc3.digitaloceanspaces.com
DISCOURSE_S3_ACCESS_KEY_ID: accesskey
DISCOURSE_S3_SECRET_ACCESS_KEY: secretkey
DISCOURSE_S3_CDN_URL: https://community-cdn.itechguides.com
DISCOURSE_S3_BUCKET: itg-community-files
DISCOURSE_S3_BACKUP_BUCKET: itg-community-files/backups
DISCOURSE_BACKUP_LOCATION: s3

Acabo de volver a habilitar las líneas y reconstruí el contenedor. ¡Ahora, el sitio muestra una página en blanco de nuevo!

La captura de pantalla a continuación muestra dónde coloqué los códigos en mi app.yml. Como puedes ver, coloqué los códigos de configuración de S3 debajo de DISCOURSE_NOTIFICATION_EMAIL


a

1 me gusta

¿Qué sucede si comentas DISCOURSE_CDN_URL?

1 me gusta

No he hecho eso. Pero he estado solucionando problemas y creo firmemente que no configuré correctamente el S3 CDN. Estoy usando StackPath y no estoy seguro de qué usar en la dirección de Origen y el encabezado de Host.

1 me gusta

Otra cosa que no tengo clara es cómo configurar la función de listado de archivos de mi bucket de DigitalOcean Space. Ahora mismo, estoy usando Restrict Listing. ¿Afecta esto en algo?

1 me gusta

Comenté DISCOURSE_S3_CDN_URL y el sitio carga. Esto confirma que mi configuración de la CDN de S3 es el problema, pero todavía no sé cómo configurarla correctamente.

Agradeceré mucho cualquier ayuda.

1 me gusta

¿Completaste todas las tareas de la sección de configuración?

Si mal no recuerdo, configurar DISCOURSE_S3_CDN_URL en app.yml requiere que los recursos se almacenen en S3.

2 Me gusta

No sé mucho sobre cómo funciona Discourse. Soy otro webmaster que copia y pega del mundo PHP, pero todavía me pregunto por qué sería necesario declarar el mismo CDN dos veces.

No uso DISCOURSE_CDN_URL porque tengo DISCOURSE_S3_CDN_URL (y probablemente ninguna documentación que leí me guió a usarlo). Así que lo intenté.

Agregué DISCOURSE_CDN_URL: <cdn-url>. La reconstrucción no arrojó errores, pero obtuve un error 502. Cuando lo eliminé, mi foro volvió a funcionar.

Aún así, sus problemas pueden ocurrir debido a alguna mala configuración en otro lugar. Pero me gustan las soluciones fáciles, incluso cuando me equivoco, y culpo a la situación cuando le dices dos veces el CDN para diferentes necesidades. O algo así.

2 Me gusta

DISCOURSE_CDN_URL y DISCOURSE_S3_CDN_URL son diferentes. Mientras que DISCOURSE_CDN_URL apunta a tu foro, DISCOURSE_S3_CDN_URL apunta a la URL de tu almacenamiento S3.

La idea es que DISCOURSE_CDN_URL sirva activos que se puedan extraer (pullable) como CSS, mientras que DISCOURSE_S3_CDN_URL sirva activos que se puedan enviar (pushable) como JS, imágenes y cargas de usuario.

He podido hacer que todo funcione excepto mi CDN de almacenamiento S3. Cada vez que habilito esa parte en el archivo app.yml, mi foro se muestra en blanco.

Una inspección de la red en el elemento de inspección del navegador muestra que los activos entregados por DISCOURSE_S3_CDN_URL muestran un error 404.

¡Aquí es donde me he estancado! No estoy seguro de por qué el CDN de S3 no puede entregar los activos.

4 Me gusta

¡Gracias por la explicación paciente!

Eso es bastante… desconocido para mí. Pero como dije, tengo una experiencia muy limitada. Estoy usando AWS como CDN a través de S3/CloudFlare en WordPress, pero solo para archivos estáticos; los scripts necesitarían otra configuración. Supongo que no tiene sentido comparar WP y Discourse porque son plataformas fundamentalmente tan diferentes. Pero estoy tratando de entender los principios del concepto aquí.

Bueno, ahora tengo mucho más que tú :smile:

EDITAR: Y también me equivoqué totalmente en mi configuración :flushed: Todos los JS, imágenes, etc. se sirven a través de CDN. Pero no pude encontrar las CSS allí.

1 me gusta

Sí, lo están. Pero gracias por la actualización.

1 me gusta

Hola @Jagster, realmente apreciaré tu ayuda.

El problema que tengo ahora es que mi sitio está intentando cargar activos .gz.js desde el CDN de Object Storage, pero los archivos no están allí. ¿Cómo obligo a Discourse a cargar esos activos .gz.js en el Object Storage?

1 me gusta

Eso es lo que hace esta parte de la guía:

1 me gusta

Ya tengo esa línea en mi app.yml. Puse el código de arriba después de definir los plugins. ¿O los muevo por encima de las listas de plugins?

1 me gusta

Eso está mal. La clave YAML after_assets_precompile debe estar debajo de la clave hooks.

Por defecto, enviamos como:

## Los plugins van aquí
## ver https://meta.discourse.org/t/19157 para más detalles
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

y quieres

## Los plugins van aquí
## ver https://meta.discourse.org/t/19157 para más detalles
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
  after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - sudo -E -u discourse bundle exec rake s3:upload_assets
1 me gusta

Muchas gracias, @Falco. Los moveré ahora e intentaré de nuevo.

2 Me gusta

Pero, ¿qué pasa con los otros plugins? ¿Está bien enumerarlos a continuación?

  • sudo -E -u discourse bundle exec rake s3:upload_assets?
1 me gusta

No.

Se convertirá en:

## Los plugins van aquí
## ver https://meta.discourse.org/t/19157 para más detalles
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/docker_manager.git
  after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - sudo -E -u discourse bundle exec rake s3:upload_assets

YAML es una estructura de datos similar a un árbol y la indentación del espacio en blanco define la estructura.

3 Me gusta

Con la guía que usted (@Falco) y @pfaffman proporcionaron, acabo de completar con éxito esta configuración.

Para otros miembros de la comunidad que deseen ver mis configuraciones. Aquí están las capturas de pantalla. También escribí una guía completa mientras configuraba todo esto.

Utilicé StackPath y DigitalOcean Spaces. Mi guía incluye un paso a paso de toda la configuración. Si alguien necesita esta guía, estaré encantado de publicar la URL cuando se solicite.

2 Me gusta

@Falco y @pfaffman, muchas gracias a ambos por su ayuda. Es la primera vez que configuro Discourse, ¡pero acabo de completar las partes más difíciles (creo!). ¡Estoy muy agradecido!

3 Me gusta