Skip to main content
  Martes, 14 de enero de 2020
  6 Respuestas
  3,1K visitas
  Suscribir
Hola,

¿es compatible con DigitalOcean Spaces y otros S3 similares?

¿Y con Flatsome UX Builder?

¡Gracias!
UNA
Hace 5 años
Hola,

Gracias por contactarnos aquí sobre esta extensión.

¿Es compatible con los espacios digitalocean y otros similares a S3?

Aún no hemos brindado soporte a Digital Ocean, actualmente puedes usar Amazon S3: Para más detalles:

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

¿Y es compatible con Flatsome UX Builder?

Sí, es compatible con casi todos los creadores de páginas.

¡Espero eso ayude!
Salud,
Hola,

gracias por tu respuesta.

Como DO es compatible con S3, tal vez funcione con las credenciales y la dirección del servidor de DO, ¿no? ¿:) Lo probaste?
UNA
Hace 5 años
Hola,

Gracias por contactarme con más información.

Como DO es compatible con S3, tal vez funcione con las credenciales de DO y la dirección del servidor, ¿no? ¿:) Lo probaste?


No hemos probado con DO y creo que no es posible.

Salud,
R
Hace 5 años
Puedes usarlo con DigitalOcean, hay un truco simple para que funcione:

océano digital.png

Como lo acabo de hacer para un cliente, detallaré el truco y luego explicaré cómo hacerlo funcionar por separado.

--

Si bien aún no lo tenemos funcionando al 100%, hemos logrado un progreso significativo:

1. Cortar

DigitalOcean Spaces está construido alrededor de la API de S3 y utiliza Biblioteca PHP "AWS SDK" de Amazon (que viene bundlecon el complemento).

Al descubrir esto, me di cuenta de que, dado que DigitalOcean promueve el uso del SDK con su propio productoHackear parte del código para hacerlo funcionar no sería demasiado difícil.

Para hacer esto, descubrí que la forma en que funciona el complemento es con dos archivos de clase (para cada servicio):
./class/wpmfAddonAws3Admin.php
&
./class/wpmfAws3.php
(para S3).

El archivo "admin" es donde se encuentra la funcionalidad del frontend; el otro se utiliza para la interfaz con el SDK de S3. En resumen, el archivo "admin" se carga mediante Ajax o el frontend de WP, y su funcionalidad invoca el archivo S3 (usando las credenciales almacenadas), lo que le permite realizar acciones (como la sincronización) con su bucket de S3. Esto funciona muy bien, pero hay un problema importante para que funcione con DigitalOcean:

punto final.png

DigitalOcean es NO Independiente de la región. Esto significa que cada solicitud se limita a una región específica, a diferencia de S3. Esto no supone un problema en sí mismo (nuestra solución funcionará), pero si desea obtener una funcionalidad completa (diferentes regiones/buckets), debe asegurarse de invocar la clase "no administrador" con la configuración de credenciales personalizada cada vez.

-

El hack consiste en lo siguiente:

a) Cambie el archivo "admin" para utilizar el "punto final" para su región de DigitalOcean Spaces
b) Asegúrese de que la región 'us-east-1' esté configurada en todo momento
c) Cambie la "URL del archivo adjunto" para cada uno de los archivos adjuntos sincronizados en su biblioteca multimedia

-

El primer paso es cambiar las opciones "predeterminadas" en el archivo "admin":

administrador.png

A partir de la línea 34 de
./class/wpmfAddonAws3Admin.php
Verá que se crea un conjunto de configuraciones predeterminadas para la otra clase. Debe hacer lo siguiente:


  • Cambie la "región" a 'us-east-1'
  • Añade la línea
    "endpoint" => "https://[[REGION]].digitaloceanspaces.com"



En el caso anterior, nuestra "región" es AMS3. Esto puede variar según la ubicación donde se encuentre su espacio.

Cambiar este código realmente no hace mucho, pero garantiza que se utilicen los mismos valores predeterminados cada vez (y que se configure el "punto final", que es la base de todo el truco).

-

Después de hacer esto, pasamos al otro archivo de clase.
./class/wpmfAws3.php
:

clase.png

Esto, como se mencionó, se invoca cada vez que la clase "admin" desea comunicarse con S3/DO.

Lo que haremos aquí es falsificar el punto final, es decir, lo codificaremos. Esto cambiará la URL a la que el SDK de AWS envía las solicitudes, lo que significa que nuestras credenciales de DigitalOcean deberían ser aceptadas. Para ello, simplemente agregue las dos líneas siguientes en las líneas 73 y 74, respectivamente:

#73 $args['región'] = 'us-east-1';
#74 $args['punto final'] = 'https://ams3.digitaloceanspaces.com';

Lo anterior forzará que se cambie el "punto final" cada vez que utilice cualquiera de las funciones de "administración".

Funciona fusionando los datos anteriores con las credenciales de S3 almacenadas (en su caso, la clave API de DigitalOcean), lo que permite que el script se comunique con DO. Como mencioné anteriormente, esto es limitado, ya que solo permite comunicarse con una única región de DO (algo que abordaré en detalle en breve).

-

Después de hacer esto, lo último que debemos hacer es cambiar la "URL" de cada uno de los archivos adjuntos sincronizados con DO.

Esto se hace dentro de la clase "admin", en las funciones "wpGetAttachmentUrl" (#2048) y "addMetaInfo" (#1121):

1121.png

2048.png

No estoy seguro de cuál de estas funciones realmente proporciona la funcionalidad (creo que es #2048), pero las cambié ambas de todos modos.

En definitiva, lo único que haces es cambiar el enlace de AWS a uno de DigitalOcean. El que funcionó bien para este truco fue el siguiente:

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

Esto cambia el "enlace" que tiene el medio de WP a DigitalOcean Spaces, que debería mostrarlo en el backend y frontend de su sitio.

--

Detallaré la solución más amplia en otra publicación.
R
Hace 5 años
2. "Lleno"

Como se mencionó anteriormente, la solución "completa" depende de cómo DigitalOcean interactúa con el SDK de AWS.

En términos simples, S3 le permite "conectarse" y luego elegir un bucket en cualquier región; DigitalOcean solo le permite conectarse e interactuar con un bucket. soltero región cada vez.

Si desea obtener la funcionalidad completa del complemento (con DigitalOcean), es necesario realizar mucha personalización en la clase "admin". Básicamente, debe asegurarse de que CADA solicitud se dirija al endpoint correcto, lo cual requiere mucho tiempo y es bastante costoso (en términos de conexiones API).

-

Ya lo hemos conseguido, aunque de forma informal. Escribo esto para compartir el progreso, y quizás alguien más prefiera retomarlo o algo similar.

--

Necesitas hacer 4 cosas principales para que funcione por separado:

1. Cree un flujo de interfaz de usuario "DigitalOcean" independiente
2. Elimine cualquier referencia a S3 (reemplácela con DigitalOcean según sea necesario)
3. Cambiar el flujo de ciertas funciones para permitir el soporte entre regiones
4. Asegúrese de que el DO no interfiera con S3

-

1. Para agregar una pestaña "DigitalOcean" independiente, debe acceder al complemento original y localizar el archivo "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>


Acabo de agregarlo después de la pestaña S3.

Para que funcione, es necesario completar la variable $html_tabdo, lo que se hace modificando dos archivos.

El primero es el archivo ./class/pages/settings/wp-folder-options.php (complemento principal/original):

S3.png

El segundo es ./class/class-wp-folder-option.php:

html_do.png

Esto completará la pestaña con las distintas configuraciones de DigitalOcean.

-

2. Para reemplazar S3 con DO, debe asegurarse de tener un conjunto de archivos y configuraciones de cola completamente diferentes para garantizar que los dos sistemas no entren en conflicto.

Esto requiere varias acciones, principalmente la creación de un nuevo conjunto de clases "admin" y "connection". No profundizaré en cómo hacerlo, pero básicamente se trata de crear un nuevo conjunto de clases que generen sus propios ajustes de configuración y los usen para conectarse a los endpoints de DO:

código api.png

-

3. Soporte entre regiones.

Como se mencionó en la publicación anterior, el sistema de DO funciona de manera diferente a S3, en el sentido de que cada solicitud está limitada a una región específica (el de S3 es independiente de la región).

Esto significa que si quieres trabajar con contenedores o espacios de otras regiones, necesitas hacer algo de magia para que todo funcione en conjunto.

Me estoy quedando corto de tiempo, por lo que no cubriré todo el asunto aquí, pero diré que si desea que el sistema funcione, debe editar el archivo "./class/wpmfDo.php" en el backend, asegurándose de que puede pasar el "punto final" que desea invocar la instancia del SDK para...

punto final.png

Esto nos da la capacidad de definir diferentes "puntos finales" ("regiones").;) para cuando necesitas enumerar diferentes espacios, etc.

Un buen ejemplo de esto en acción es cuando desea enumerar los depósitos disponibles:

región.png

Para lograr lo anterior, debe recorrer todas las regiones disponibles en DO y luego crear una nueva matriz de buckets disponibles. Como comprenderá, esta fue una solución complicada de crear:

lista_de_cubos.png

Esto crea la variable $list_buckets a partir de las diferentes regiones (no solo aquella con la que se conectó).

-

4. No lo he hecho todavía

Básicamente, debes poder hacer que DigitalOcean funcione con S3, incluso cuando S3 esté presente.

Esto requerirá que la funcionalidad de "sincronización" funcione y una serie de otras cosas que aún no he completado.
T
Hola,

esta función se implementó recientemente en el complemento. Consulta los detalles a continuación.:)

Saludos.
  • Página :
  • 1
Aún no se han realizado respuestas para esta publicación.