Me estoy quedando sin espacio en mi Digital Ocean Droplet, así que quería mover los archivos subidos a un Digital Ocean Space.
Esto es lo que tengo configurado…
s3 access key id - Copiado de DO CP > API > Aplicaciones y API
s3 secret access key - Copiado de DO CP > API > Aplicaciones y API
s3 region - No estoy seguro si importa para los DO Spaces, pero lo dejé por defecto - US East (N. Virginia)
s3 upload bucket - No tengo claro si debo crear una carpeta en el Space o no. Intenté ambas cosas…
uploads - que NO tiene una carpeta creada en el Space previamente
files - que SÍ tiene una carpeta creada en el Space previamente
s3 endpoint - Aquí es donde creo que me equivoco. Intenté las versiones https de…
d.ourdomain.com (nuestro Discourse está bajo un subdominio)
○ Con la configuración tanto en DO CP > Redes > Dominios como en Cloudflare como un alias de ours.nyc3.digitaloceanspaces.com.
○ Error al subir una imagen… Fallo al abrir conexión TCP a uploads.d.ourdomain.com:443 (getaddrinfo: Nombre o servicio desconocido)
Pero mi configuración no se muestra en la interfaz de administración, así que creo que esto puede no estar desactualizado y es solo cuestión de obtener la combinación correcta de configuración.
Vi esto…
…pero el área de administración no me permite dejar “s3 upload bucket” vacío, así que no estaba seguro si eso estaba relacionado. Eso también parecía ser solo si usas AWS S3 también. Intenté crear una carpeta en mi DO Space y usar ese nombre de carpeta. Intenté usar un nombre diferente de una carpeta que no estaba allí, en caso de que necesite crear la suya propia. Nada de eso funcionó.
Vi esto…
…pero estoy lejos de ser un experto, así que me alejé de eso.
En este punto, me he quedado sin ideas para probar y no estoy seguro si estoy cerca y solo necesito la configuración correcta o si me falta algo por completo y no estoy ni cerca.
No, no lo está. Si bien puedes configurar los puntos finales de S3 en la interfaz de usuario, solo probamos y validamos el uso de los clones de S3, como la oferta de Digital Ocean, al configurarlo en el archivo app.yml.
No veo una sección en app.yml para la configuración de DISCOURSE_S3. ¿Simplemente creo una línea para cada una? ¿O es eso lo que hacen los comandos sudo?
No tengo muy claro dónde ejecutar o colocar esos comandos sudo. No está claro si es un elemento de línea de comandos único para agregarlo o si es algo que tiene que ir en app.yml para que siempre se tenga en cuenta.
¿Los comandos sudo van en el área de app.yml o solo las líneas de configuración de DISCOURSE_S3?
¿Simplemente dejo esto en blanco con DO Spaces? DISCOURSE_S3_REGION:
¿Tengo que tener una CDN? Tenemos muy poco tráfico. Grupo pequeño. Realmente estoy tratando de limitar las partes móviles si es posible.
¿Hay alguna solución para este problema? Recibí el mismo error al intentar usar Oracle Cloud Storage.
Seguí la wiki configurando en app.yml. Intenté usar s3cmd manual para asegurar una conexión correcta. Pero al subir una imagen en una publicación, recibí el mismo mensaje de error.
Entonces obtuve el mensaje de error exacto en la herramienta s3cmd como muestra Discourse:
Please wait, attempting to list all buckets...
ERROR: Test failed: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: Hostname mismatch, certificate is not valid for 'objectstorage.ap-singapore-1.oci.oraclecloud.com'. (_ssl.c:1007)
Después de muchos intentos, sigo recibiendo el mismo mensaje de error. Revisé manualmente el certificado y el nombre de host, usé el formato correcto para obtener el certificado correcto a simple vista, pero sin éxito.
Mi endpoint: ..compat.objectstorage.oraclecloud.com
El CN del certificado: *.compat.objectstorage..oraclecloud.com
Pude conectarme con la herramienta s3cmd. Pero no pude configurar la carga de S3 para Discourse con la misma configuración.
El mensaje de error: SSL_connect returned=1 errno=0 peeraddr=134.70.128.1:443 state=error: certificate verify failed (Hostname mismatch)
Quiero probar otra forma configurando en el entorno ruby (buscando por todas partes):
Esta es una mala idea, ya que socavará muchas de las protecciones que brindan los certificados X509.
¿Puedes mostrar cuáles son tus configuraciones no secretas aquí? Ten en cuenta que Oracle Cloud no es compatible, pero aún así echaremos un vistazo rápido para ver si hay algo obviamente mal.
Oracle Cloud Storage tiene un formato para la dirección del endpoint. Pero sin importar el formato que intenté, el mismo mensaje de error que mostré anteriormente.
OK, añadí un binding.pry al inicio de ssl_socket_connect y esto es lo que veo al intentar usar estas configuraciones:
→ DISCOURSE_USE_S3=true DISCOURSE_S3_REGION=ap-singapore-1 DISCOURSE_S3_ENDPOINT=https://axhjdarc4cuy.compat.objectstorage.ap-singapore-1.oraclecloud.com DISCOURSE_S3_ACCESS_KEY_ID=foo DISCOURSE_S3_SECRET_ACCESS_KEY=bar DISCOURSE_S3_BUCKET=bucketname bin/rails c
Loading development environment (Rails 7.0.7)
[1] pry(main)> s3 = S3Helper.build_from_config; s3.list
From: /home/michael/.rvm/gems/ruby-3.2.2@discourse/gems/net-protocol-0.2.2/lib/net/protocol.rb:42 Net::Protocol#ssl_socket_connect:
40: def ssl_socket_connect(s, timeout)
41: binding.pry
=> 42: if timeout
43: while true
44: raise Net::OpenTimeout if timeout <= 0
45: start = Process.clock_gettime Process::CLOCK_MONOTONIC
46: # to_io is required because SSLSocket doesn't have wait_readable yet
47: case s.connect_nonblock(exception: false)
48: when :wait_readable; s.to_io.wait_readable(timeout)
49: when :wait_writable; s.to_io.wait_writable(timeout)
50: else; break
51: end
52: timeout -= Process.clock_gettime(Process::CLOCK_MONOTONIC) - start
53: end
54: else
55: s.connect
56: end
57: end
[1] pry(#<Net::HTTP>)>> s.hostname
=> "bucketname.axhjdarc4cuy.compat.objectstorage.ap-singapore-1.oraclecloud.com"
por lo que el nombre de host real al que se está conectando es bucketname.axhjdarc4cuy.compat.objectstorage.ap-singapore-1.oraclecloud.com, que no coincide con *.compat.objectstorage.ap-singapore-1.oraclecloud.com, por lo que el error es correcto.
Desafortunadamente, OCI no admite este estilo de acceso:
Use el acceso basado en rutas en su aplicación. El acceso de estilo de host virtual (acceder a un bucket como {bucketnamespace}.compat.objectstorage.{region}.oraclecloud.com [sic]) no es compatible.
Por el contrario, Discourse solo admite el acceso de estilo de host virtual ({bucketname}.{namespace}.compat.objectstorage.{region}.oraclecloud.com.).
Eliminamos la configuración que podría haberlo hecho funcionar hace un tiempo, ya que no estaba bien soportada (ver el mensaje del commit).
Hacer que esto funcione no será sencillo y requerirá un desarrollo y pruebas complejos para agregar este soporte.
Encontré a lo que se refería, pero luego, cuando copio y pego texto, invierte las mayúsculas y minúsculas. Me rindo y no volví a intentarlo. Puede que lo intente de nuevo el año que viene.
Esperaba que alguien lo resolviera mientras tanto y documentara mejor la configuración para que coincidiera con mis planes.
Estaba teniendo este problema y lo solucioné. Mi solución fue que cuando lo configuré, mi servidor de correo no estaba verificado por SSL, pero el proveedor de mi dominio sí me dio un servidor de correo verificado por SSL, así que los reemplacé.