Estas son las variables relacionadas con S3/CDN que configuramos:
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
Creo que DISCOURSE_S3_BUCKET quedó obsoleto en favor de DISCOURSE_S3_UPLOAD_BUCKET y DISCOURSE_S3_BACKUP_BUCKET. Deberías configurar estas en su lugar.
Eso es lo que asumí, pero no avanzo a menos que establezca tanto DISCOURSE_S3_UPLOAD_BUCKET como DISCOURSE_S3_BUCKET. Como puedes ver en el fragmento de código publicado anteriormente, use_s3? sigue buscando s3_bucket y no s3_upload_bucket.
Establecer DISCOURSE_BACKUP_BUCKET no resuelve el problema, al menos que yo pueda ver.
Si establezco ambas variables de entorno de bucket, avanzo un paso más, pero ahora me he encontrado con un nuevo problema: Discourse está ignorando mi URL de CDN de S3 e intentando cargar los activos desde mi ruta base. Esto está causando errores de CSP, ya que la Política de Seguridad de Contenido solo incluye la ruta de los activos desde mi CDN de S3.
Debería ser DISCOURSE_S3_BACKUP_BUCKET en lugar de DISCOURSE_BACKUP_BUCKET. Aparte de eso, si estás configurando todas las variables con las dos distribuciones de CloudFront, debería funcionar. Si revisas nuestra configuración, verás que no estamos definiendo DISCOURSE_S3_BUCKET.
No estoy seguro de si también será necesario un rebake.
@Falco, por lo que recuerdo, una de las cosas que hacían esto muy contra intuitivo es que hay una diferencia de comportamiento al establecer DISCOURSE_S3_CDN_URL como variable de entorno o configuración global, en comparación con configurarlo como una configuración del sitio. Quizás sea algo que quieras tener en cuenta en tu howto.
Sí, lo siento, fue un error tipográfico en mi publicación anterior. DISCOURSE_S3_BACKUP_BUCKET no establece s3_bucket en GlobalSetting para mí. No estoy seguro de cómo estás ejecutando esa tarea rake sin configurar DISCOURSE_S3_BUCKET.
Agradezco mucho tu ayuda, por cierto, y sé que no es tu responsabilidad resolver esto, así que gracias.
def ensure_s3_configured!
unless GlobalSetting.use_s3? || use_db_s3_config
STDERR.puts "ERROR: Asegúrate de que S3 esté configurado en config/discourse.conf o en las variables de entorno"
exit 1
end
end
use_db_s3_config te evita tener que establecer esa variable adicional. Eso debe ser un error en global_setting.rb, porque debería poder establecer simplemente DISCOURSE_S3_UPLOAD_BUCKET, a menos que haya una diferencia entre eso y DISCOURSE_S3_BUCKET, pero creo que tienes razón en que este último debería estar obsoleto.
Independientemente de un error en global_setting.rb, sigo viendo un problema donde Discourse busca los activos en su ubicación habitual y no en mi CDN de S3, aunque he declarado todas mis variables y DISCOURSE_ENABLE_S3_UPLOADS está establecido en true.
Hay una tarea para esto: bundle exec rake uploads:migrate_to_s3. Una vez que hayas configurado tus buckets, ejecuta esa tarea para mover las subidas a S3. S3/CDN ha cambiado en los últimos meses y la documentación no está actualizada, así que asegúrate de hacer una copia de seguridad y prepararte por si algo sale mal.
Cuando lo habilité por primera vez, tuvimos algo de tiempo de inactividad mientras resolvíamos todo.
Supongo que esto se debe a que te falta DISCOURSE_CDN_URL. En nuestra configuración lo tenemos así:
DISCOURSE_CDN_URL: 'https://d16zv78c963s69.cloudfront.net' # esto apunta al servidor
DISCOURSE_S3_CDN_URL: 'https://community-cdn-prod.debtcollective.org' # esto apunta al bucket de S3
Las hojas de estilo se obtienen del servidor, por lo que usan DISCOURSE_CDN_URL. Los archivos de JavaScript se suben al bucket de S3 y usan DISCOURSE_S3_CDN_URL. @Falco me lo explicó aquí.
Sí, lo vi. He configurado DISCOURSE_CDN_URL, pero sigo teniendo el mismo problema. Sin embargo, estoy cansado, así que tal vez me haya perdido algo con tanto lío. Retomaré esto mañana. Gracias por la ayuda.
¿Esto subirá tanto los archivos de imagen como los activos como archivos JS a S3? ¿Y debo usar una URL de CloudFront o ¿S3 es suficiente? Gracias por tu ayuda.
bundle exec rake uploads:migrate_to_s3 subirá solo los archivos adjuntos a S3; esta tarea debe ejecutarse una sola vez. Después de habilitar S3, las nuevas cargas se guardarán en los buckets de S3.
Para subir activos, debes usar bundle exec rake s3:upload_assets, y esto debe ejecutarse después de cada reconstrucción o actualización.
Hice lo que mencionaste y las cargas a S3 (imágenes, etc.) se realizaron correctamente, pero para assets obtengo el siguiente error:
ERROR: Asegúrate de que S3 esté configurado en config/discourse.conf o en las variables de entorno
Configuré ambos:
DISCOURSE_CDN_URL: 'https://d16zv78c963s69.cloudfront.net' # esto apunta al servidor
DISCOURSE_S3_CDN_URL: 'https://community-cdn-prod.debtcollective.org' # esto apunta al bucket de S3
Hay un problema interesante: Discourse intenta acceder a archivos de recursos desde una ruta incorrecta. Intenta acceder desde la ruta brotli_asset, pero esa ruta no existe en el bucket de S3.
Además, intenta acceder a archivos de JavaScript y hojas de estilo desde la URL de CDN, pero tampoco hay esos archivos en el bucket.
Al configurar los datos en el panel de administración para S3, todo funciona correctamente y todo se carga en S3. No tengo ninguna configuración en ENV. ¿Eso es malo? ¿Es necesario si todo funciona?
El segundo ejemplo es diferente porque no puedo migrar los datos antiguos a S3 (solo funcionan los nuevos). Pero aquí, ingresar estos datos en el archivo app.yml (DISCOURSE_S3_ACCESS_KEY_ID: ‘key’, etc.) no cambia nada y aún así no funciona (es decir,