speedcache /cache/css/sc_9111f0089cb3d2ad97b22dcedd46601b.css "rel =" stylesheet "/>Compatibilità con DigitalOcean e altri S3
  1. wallprint67
  2. Domande pre-vendita su WP Media Folder
  3. Martedì 14 2020 gennaio
  4.  Iscriviti via e-mail
Ciao,

è compatibile con gli spazi digitalocean e altri Mi piace S3?

Ed è compatibile con UX Builder flat

Grazie !
Risposta accettata Moderazione in attesa
Ciao,

Grazie per averci contattato qui per questa estensione.

è compatibile con gli spazi digitalocean e altri Mi piace S3?

Non abbiamo ancora supportato Digital Ocean, al momento puoi usare Amazon S3: Per maggiori dettagli:

https://www.joomunited.com/ wordpress -products / wp-media-folder / amazon-s3-integration-with- wordpress -media-library

Ed è compatibile con UX Builder flat

Sì, è compatibile con quasi page builder.

Spero che sia d'aiuto!
Saluti,
Risposta accettata Moderazione in attesa
Ciao,

Grazie per la tua risposta.

poiché DO è compatibile con S3 forse funziona con le credenziali DO e l'indirizzo del server, no? :) l'hai provato?
Risposta accettata Moderazione in attesa
Ciao,

Grazie per avermi contattato con ulteriori informazioni.

poiché DO è compatibile con S3 forse funziona con le credenziali DO e l'indirizzo del server, no? :) l'hai provato?


Non abbiamo testato con DO e penso che non sia possibile.

Saluti,
Risposta accettata Moderazione in attesa
Puoi usarlo con DigitalOcean, c'è un semplice trucco per farlo funzionare:

digitalocean.png

Da quando l'ho appena fatto per un cliente, descriverò dettagliatamente l'hack e poi spiegherò come faresti funzionare separatamente.

--

Anche se non abbiamo ancora funzionato al 100%, abbiamo fatto progressi significativi:

1. Hack

DigitalOcean Spaces è costruito attorno all'API di S3 e utilizza Libreria PHP "AWS SDK" di Amazon (che è il bundle d con il plugin).

Nel scoprirlo, ho pensato che da allora DigitalOcean promuove l'utilizzo dell'SDK con il proprio prodotto, hackerare parte del codice per farlo funzionare non sarebbe eccessivamente difficile.

Per fare questo, ho scoperto che il modo in cui funziona il plugin è con due file di classe (per ogni servizio) -
./class/wpmfAddonAws3Admin.php
&
./class/wpmfAws3.php
(per S3).

Il file "admin" è dove si trova la funzionalità front-end; l'altro è per l'interfacciamento con l'SDK S3. In breve, il file "admin" viene caricato tramite Ajax o il front-end WP e la sua funzionalità richiama il file S3 (utilizzando le credenziali archiviate), consentendogli di eseguire azioni (come la sincronizzazione) sul bucket S3. Funziona molto bene, ma c'è un grosso problema nel farlo funzionare con DigitalOcean:

endpoint.png

DigitalOcean è NON regione agnostica. Ciò significa che ogni richiesta è nell'ambito di una regione specifica, mentre S3 non lo è. Questo non è un problema in sé (il nostro hack continuerà a funzionare), ma se si desidera ottenere funzionalità "complete" (diverse regioni / bucket), è necessario assicurarsi di dover invocare la classe "non admin" con impostazioni delle credenziali personalizzate ogni volta.

-

L'hack è costituito da quanto segue:

a) Modificare il file "admin" per utilizzare "endpoint" per la propria area di DigitalOcean Spaces
b) Assicurarsi che la regione "us-east-1" sia sempre impostata
c) Modificare l '"URL allegato" per ciascuno degli allegati sincronizzati nella libreria multimediale

-

Il primo passo è cambiare le opzioni "predefinite" nel file "admin":

admin.png

A partire dalla riga 34 di
./class/wpmfAddonAws3Admin.php
, vedrai che vengono create una serie di impostazioni predefinite per l'altra classe. Devi fare quanto segue:


  • Cambia la "regione" in "us-east-1"
  • Aggiungi la linea
    "endpoint" => "https://[[REGION]].digitaloceanspaces.com"



Nel caso sopra, la nostra "regione" è AMS3. Questo può essere diverso a seconda della posizione in cui è conservato il tuo spazio.

La modifica di questo codice non fa molto, ma garantisce che vengano utilizzati gli stessi valori predefiniti ogni volta (e che sia impostato "endpoint", che è la base dell'intero hack).

-

Dopo aver fatto ciò, passiamo all'altro file di classe
./class/wpmfAws3.php
:

class.png

Questo, come detto, viene invocato ogni volta che la classe "admin" desidera comunicare con S3 / DO.

Quello che faremo qui è "falsificare" l'endpoint, nel senso che lo codifichiamo. Ciò cambierà l'URL a cui l'SDK AWS invia le richieste, il che significa che le nostre credenziali DigitalOcean devono essere accettate. Per farlo, aggiungi semplicemente le seguenti due righe rispettivamente alla riga 73 e 74 :

# 73 $ args ['region'] = 'us-east-1';
# 74 $ args ['endpoint'] = 'https://ams3.digitaloceanspaces.com';

Quanto sopra imporrà la modifica dell'endpoint ogni volta che si utilizza una delle funzionalità "admin".

Funziona prendendo i dettagli di cui sopra e unendoli con le credenziali S3 memorizzate (nel tuo caso, chiave API DigitalOcean), consentendo allo script di comunicare con DO. Ho descritto sopra che questo è limitato perché significa che sei in grado di comunicare solo con una singola regione DO (qualcosa che affronterò completamente in un minuto).

-

Dopo aver fatto ciò, l'ultima cosa che dobbiamo fare è cambiare l '"URL" per ciascuno degli allegati sincronizzati con DO.

Questo viene fatto all'interno della classe "admin", nelle funzioni "wpGetAttachmentUrl" (# 2048) e "addMetaInfo" (# 1121):

1121.png

2048 .png

Non sono sicuro di quale di queste funzioni fornisca effettivamente la funzionalità (credo sia # 2048), ma le ho comunque modificate entrambe.

Alla fine, tutto ciò che stai facendo è cambiare il link AWS in uno DigitalOcean. Quello che ha funzionato bene per questo trucco è stato il seguente:

# 2057 restituisce 'https: //'. $ infos ['Bucket']. ".ams3.digitaloceanspaces.com /". str_replace ('', '% 20', $ infos ['Key']);

Ciò modifica il "collegamento" che i media WP hanno su DigitalOcean Spaces, che dovrebbe mostrarlo nel backend e nel frontend del tuo sito.

--

Descriverò in dettaglio la correzione più ampia in un altro post.
Allegati ( 6 )
Risposta accettata Moderazione in attesa
2. "Pieno"

Come accennato in precedenza, la correzione "completa" dipende da come DigitalOcean si interfaccia con l'SDK AWS.

In parole semplici, S3 ti permette di "connetterti" e quindi scegliere un bucket in qualsiasi regione; DigitalOcean ti consente solo di connetterti e interagire con a singolo regione ogni volta.

Se vuoi ottenere la piena funzionalità del plugin (con DigitalOcean), c'è molta personalizzazione che deve avvenire nella classe "admin". Fondamentalmente è necessario assicurarsi che OGNI richiesta sia indirizzata all'endpoint corretto, che richiede tempo e è piuttosto costoso (in termini di connessioni API).

-

Abbiamo "un po '" funzionato, anche se in modo approssimativo. Sto scrivendo questo qui come mezzo per condividere i progressi, e forse qualcun altro preferirebbe prenderlo o qualcosa del genere.

--

Devi fare 4 cose principali per farlo funzionare separatamente:

1. Creare un flusso UI "DigitalOcean" separato
2 Rimuovere eventuali riferimenti a S3 (sostituendo con DigitalOcean se necessario)
3 Modifica il flusso di alcune funzionalità per consentire il supporto tra regioni
4 Assicurarsi che DO non interferisca con S3

-

1. Per aggiungere una scheda "DigitalOcean" separata, è necessario andare al plug-in originale e individuare il file "cloud.php" (./class/pages/settings/cloud.php):

<div id="do" class="tab-content">
<div class="wpmf_width_100 p-tb-20 wpmf_left top_bar">
<h1 class="wpmf_left"><?php esc_html_e('DigitalOcean', 'wpmf') ?></h1>
<?php
require WP_MEDIA_FOLDER_PLUGIN_DIR . '/class/pages/settings/submit_button.php';
?>
</div>
<div class="content-box content-wpmf-general">
<?php
// phpcs:ignore WordPress.Security.NonceVerification.Missing -- View request, no action
if (isset($_POST['btn_wpmf_save'])) {
?>
<div class="wpmf_width_100 top_bar saved_infos" style="padding: 20px 0">
<?php
require WP_MEDIA_FOLDER_PLUGIN_DIR . '/class/pages/settings/saved_info.php';
?>
</div>
<?php
}
?>

<div>
<div class="wpmf_row_full">
<?php
if (is_plugin_active('wp-media-folder-addon/wp-media-folder-addon.php')) {
// phpcs:ignore WordPress.Security.EscapeOutput -- Content already escaped in the method
echo $html_tabdo;
}
?>
</div>
</div>
</div>
</div>


L'ho appena aggiunto dopo la scheda S3.

Per farlo funzionare, devi quindi compilare la variabile $ html_tabdo, che viene fatta cambiando due file.

Il primo è il file ./class/pages/settings/wp-folder-options.php (plugin principale / originale):

S3.png

Il secondo è ./class/class-wp-folder-option.php:

html_do.png

Questo popolerà la scheda con le varie impostazioni DigitalOcean.

-

2 Per sostituire S3 con DO, è necessario assicurarsi di disporre di un set completamente diverso di file e impostazioni della coda per garantire che i due sistemi non siano in conflitto.

Ciò richiede molte cose, principalmente creando un nuovo set di classi "admin" e "connection". Non approfondirò come farlo, ma fondamentalmente si desidera creare un nuovo set di classi che creino le proprie impostazioni di configurazione e utilizzarle per connettersi agli endpoint per DO:

api_code.png

-

3 Supporto tra regioni.

Come menzionato nel post precedente, il sistema di DO funziona in modo diverso da S3, in quanto ogni richiesta è indirizzata a una regione specifica (S3 è indipendente dalla regione).

Ciò significa che se vuoi lavorare con secchi / spazi di altre regioni, devi fare un po 'di magia per far funzionare tutto insieme.

Sto ottenendo poco tempo, quindi non tratterò tutto qui, ma dirò che se si desidera far funzionare il sistema, è necessario modificare il file "./class/wpmfDo.php" nel backend - assicurandoti di essere in grado di passare l'endpoint che desideri invocare l'istanza dell'SDK per ...

endpoint.png

Questo ci dà la possibilità di definire diversi "endpoint" ("regioni";) per quando è necessario elencare spazi diversi ecc.

Un buon esempio di ciò in azione è quando si desidera elencare i bucket disponibili:

region.png

Per ottenere quanto sopra, è necessario scorrere tutte le aree disponibili in DO, quindi creare un nuovo array di bucket disponibili. Come apprezzerai, questa è stata una soluzione complicata per creare:

buckets_list.png

Questo crea la variabile $ list_buckets dalle diverse regioni (non solo quella con cui hai usato la connessione).

-

4 Non l'ho ancora fatto

Fondamentalmente, devi essere in grado di far funzionare DigitalOcean con S3, anche quando S3 è presente.

Ciò richiederà il funzionamento della funzionalità di "sincronizzazione" e una serie di altre cose, che non ho ancora completato.
Allegati ( 6 )
  • Pagina :
  • 1


Non ci sono ancora risposte per questo post.
Sii uno dei primi a rispondere a questo post!