Ho iniziato a esaurire lo spazio nel mio Digital Ocean Droplet, quindi ho voluto spostare i file caricati su uno spazio Digital Ocean.
Questo è ciò che ho configurato…
ID chiave di accesso s3 - Copiato da DO CP > API > Applicazioni e API
Chiave di accesso segreta s3 - Copiata da DO CP > API > Applicazioni e API
Regione s3 - Non sono sicuro che abbia importanza per gli spazi DO, ma l’ho lasciata predefinita - US East (N. Virginia)
Bucket di caricamento s3 - Non sono sicuro se devo creare una cartella nello spazio o meno. Ho provato entrambi…
uploads - che NON ha una cartella creata nello spazio in precedenza
files - che ha una cartella creata nello spazio in precedenza
Endpoint s3 - È qui che penso di sbagliare. Ho provato le versioni https di…
d.ourdomain.com (il nostro Discourse è sotto un sottodominio)
○ Con esso configurato sia in DO CP > Networking > Domini che in Cloudflare come alias di ours.nyc3.digitaloceanspaces.com.
○ Errore durante il caricamento di un’immagine… Impossibile aprire la connessione TCP a uploads.d.ourdomain.com:443 (getaddrinfo: Nome o servizio non noto)
Ma le mie impostazioni non vengono visualizzate nell’interfaccia di amministrazione, quindi penso che questo potrebbe non essere obsoleto e si tratta solo di ottenere la giusta combinazione di impostazioni.
Ho visto questo…
…ma l’area di amministrazione non mi permette di lasciare vuoto “bucket di caricamento s3”, quindi non ero sicuro se fosse correlato. Anche quello sembrava essere solo se si utilizza anche AWS S3. Ho provato a creare una cartella nel mio spazio DO e a utilizzare quel nome di cartella. Ho provato a usare un nome diverso di una cartella che non c’era, nel caso in cui dovesse crearla da sola. Niente di tutto ciò ha funzionato.
Ho visto questo…
…ma sono lontano dall’essere un esperto, quindi mi sono tenuto lontano da quello.
A questo punto ho esaurito le idee da provare e non sono sicuro se ci sono vicino e ho solo bisogno della giusta configurazione delle impostazioni o se mi manca completamente qualcosa e non ci sono nemmeno vicino.
No, non lo sono. Sebbene sia possibile configurare gli endpoint S3 nell’interfaccia utente, abbiamo testato e convalidato solo l’uso di cloni S3, come l’offerta di Digital Ocean, quando li si configura nel file app.yml.
Non vedo una sezione in app.yml per le impostazioni DISCOURSE_S3. Devo solo creare una riga per ciascuna? O è questo ciò che fanno i comandi sudo?
Non mi è del tutto chiaro dove eseguire o inserire questi comandi sudo. Non è chiaro se si tratti di un comando da riga di comando da aggiungere una tantum o se sia qualcosa che debba essere inserito in app.yml in modo che venga sempre considerato.
I comandi sudo vanno nell’area app.yml o solo nelle righe di impostazione DISCOURSE_S3?
Devo semplicemente lasciare vuoto questo campo con DO Spaces? DISCOURSE_S3_REGION:
Devo avere una CDN? Abbiamo un traffico molto basso. Piccolo gruppo. Sto davvero cercando di limitare le parti in movimento, se possibile.
C’è una soluzione per questo problema? Ho ricevuto lo stesso errore quando ho provato a usare Oracle Cloud Storage.
Ho seguito la wiki impostando in app.yml. Ho provato a usare s3cmd manuale per una connessione sicuramente corretta. Ma quando ho caricato un’immagine in un post, ho ricevuto lo stesso messaggio di errore.
Quindi ottengo esattamente il messaggio di errore nello strumento s3cmd come mostra 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)
Dopo molti tentativi, ricevo ancora lo stesso messaggio di errore. Ho controllato manualmente il certificato e l’hostname, ho usato il formato corretto per ottenere il certificato giusto visivamente, ma senza successo.
Il mio endpoint: ..compat.objectstorage.oraclecloud.com
Il CN del certificato: *.compat.objectstorage..oraclecloud.com
Posso connettermi con lo strumento s3cmd. Ma non riesco a configurare l’upload S3 per discourse con la stessa configurazione.
Il messaggio di errore: SSL_connect returned=1 errno=0 peeraddr=134.70.128.1:443 state=error: certificate verify failed (Hostname mismatch)
Voglio provare un altro modo impostando nell’ambiente ruby (dopo aver cercato ovunque):
Questa è una pessima idea poiché minerà molte delle protezioni fornite dai certificati X509.
Puoi mostrarmi quali sono le tue impostazioni non segrete qui? Nota bene Oracle Cloud non è supportato, ma daremo comunque una rapida occhiata per vedere se c’è qualcosa di palesemente sbagliato.
OK, ho aggiunto un binding.pry all’inizio di ssl_socket_connect e quello che vedo quando provo a usare queste impostazioni è:
→ 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"
quindi l’effettivo hostname a cui ci si sta connettendo è bucketname.axhjdarc4cuy.compat.objectstorage.ap-singapore-1.oraclecloud.com, che non corrisponde a *.compat.objectstorage.ap-singapore-1.oraclecloud.com, quindi l’errore è corretto.
Utilizza l’accesso basato su percorsi nella tua applicazione. L’accesso in stile virtual host (accesso a un bucket come {bucketnamespace}.compat.objectstorage.{region}.oraclecloud.com [sic]) non è supportato.
Al contrario, Discourse supporta solo l’accesso in stile virtual host ({bucketname}.{namespace}.compat.objectstorage.{region}.oraclecloud.com.).
Abbiamo rimosso l’impostazione che potrebbe averlo fatto funzionare un po’ di tempo fa poiché non era ben supportata (vedi il messaggio del commit).
Far funzionare questo non sarà semplice e richiederà uno sviluppo e test complessi per aggiungere questo supporto.
Ho trovato quello a cui si riferiva, ma poi quando copio e incollo il testo, inverte il maiuscolo/minuscolo. Mi arrendo e non ci sono più tornato. Potrei riprovare l’anno prossimo.
Speravo che qualcuno lo risolvesse nel frattempo e documentasse meglio la configurazione per adattarla ai miei piani.
Ho riscontrato questo problema e l’ho risolto. La mia soluzione è stata che, al momento della configurazione, il mio server di posta non era verificato SSL, ma il mio provider di dominio mi ha fornito un server di posta verificato SSL, quindi li ho sostituiti.