ข้ามไปที่เนื้อหาหลัก
  วันอังคารที่ 14 มกราคม 2020
  6 ตอบกลับ
  การเข้าชม 2.7K ครั้ง
  ติดตาม
สวัสดี

มันเข้ากันได้กับพื้นที่ digitalocean และ S3 ที่ชอบอื่น ๆ หรือไม่?

และเข้ากันได้กับตัวสร้าง UX ที่แบนราบ

ขอบคุณ!
5 ปีที่แล้ว
สวัสดี,

ขอขอบคุณที่ติดต่อเราเกี่ยวกับส่วนขยายนี้

มันเข้ากันได้กับพื้นที่ digitalocean และชอบ S3 อื่น ๆ หรือไม่?

เรายังไม่รองรับ Digital Ocean คุณสามารถใช้ Amazon S3 ได้ในขณะนี้: สำหรับรายละเอียดเพิ่มเติม:

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

และเข้ากันได้กับ UX Builder หรือไม่?

ใช่ มันเข้ากันได้กับเครื่องมือสร้างเพจเกือบ

หวังว่ามันจะช่วยได้!
ไชโย
5 ปีที่แล้ว
สวัสดี

ขอบคุณสำหรับคำตอบของคุณ

เนื่องจาก DO เข้ากันได้กับ S3 จึงอาจใช้งานได้กับข้อมูลรับรอง DO และที่อยู่เซิร์ฟเวอร์ ไม่ใช่ ?:) คุณลองแล้วหรือยัง
5 ปีที่แล้ว
สวัสดี,

ขอขอบคุณที่ติดต่อกลับมาพร้อมข้อมูลเพิ่มเติม

เนื่องจาก DO เข้ากันได้กับ S3 จึงอาจใช้งานได้กับข้อมูลรับรอง DO และที่อยู่เซิร์ฟเวอร์ ไม่ใช่ ?:) คุณลองแล้วหรือยัง


เรายังไม่ได้ทดสอบกับ DO และฉันคิดว่ามันเป็นไปไม่ได้

ไชโย
NS
4 ปีที่แล้ว
คุณสามารถใช้มันกับ DigitalOcean ได้ มีแฮ็คง่ายๆ ที่จะทำให้มันใช้งานได้:

digitalocean.png

เนื่องจากฉันเพิ่งทำให้กับลูกค้า ฉันจะให้รายละเอียดเกี่ยวกับการแฮ็ก จากนั้นอธิบายว่าคุณจะแยกการทำงานออกจากกันได้อย่างไร

--

แม้ว่าเรายังไม่ได้ทำงาน 100% แต่เรามีความคืบหน้าอย่างมาก:

1. สับ

DigitalOcean Spaces สร้างขึ้นโดยใช้ API ของ S3 และใช้ ไลบรารี PHP "AWS SDK" ของ Amazon (ซึ่งเป็น bundled กับปลั๊กอิน)

เมื่อค้นพบสิ่งนี้ ฉันก็คิดได้ว่าตั้งแต่ DigitalOcean ส่งเสริมการใช้ SDK กับผลิตภัณฑ์ของตัวเองการแฮ็กโค้ดบางส่วนเพื่อให้ใช้งานได้ไม่ยากเกินไป

ในการทำเช่นนี้ ฉันพบว่าวิธีการทำงานของปลั๊กอินคือไฟล์คลาสสองไฟล์ (สำหรับแต่ละบริการ) -
./class/wpmfAddonAws3Admin.php
&
./class/wpmfAws3.php
(สำหรับ S3)

ไฟล์ "admin" คือตำแหน่งที่ฟังก์ชันฟรอนต์เอนด์ตั้งอยู่ อีกอันใช้สำหรับเชื่อมต่อกับ S3 SDK กล่าวโดยย่อ ไฟล์ "admin" ถูกโหลดผ่าน Ajax หรือ WP front-end และฟังก์ชันของไฟล์จะเรียกใช้ไฟล์ S3 (โดยใช้ข้อมูลประจำตัวที่จัดเก็บไว้) ทำให้สามารถดำเนินการต่างๆ (เช่น การซิงค์) กับบัคเก็ต S3 ของคุณ วิธีนี้ใช้ได้ผลดี แต่มีปัญหาสำคัญประการหนึ่งในการทำให้ DigitalOcean ใช้งานได้:

endpoint.png

DigitalOcean คือ ไม่ ภูมิภาคไม่เชื่อเรื่องพระเจ้า ซึ่งหมายความว่าคำขอแต่ละรายการมีการกำหนดขอบเขตไปยังภูมิภาคเฉพาะ ในขณะที่ S3 ไม่ใช่ นี่ไม่ใช่ปัญหาในตัวเอง (การแฮ็กของเราจะยังใช้ได้อยู่) แต่ถ้าคุณต้องการใช้ฟังก์ชัน "เต็มรูปแบบ" (ภูมิภาค/ที่เก็บข้อมูลต่างกัน) คุณต้องแน่ใจว่าคุณจะต้องเรียกใช้คลาส "ไม่ใช่ผู้ดูแลระบบ" ด้วย การตั้งค่าข้อมูลรับรองที่กำหนดเองในแต่ละครั้ง

-

แฮ็คประกอบด้วยสิ่งต่อไปนี้:

a) เปลี่ยนไฟล์ "admin" เพื่อใช้ "endpoint" สำหรับภูมิภาค DigitalOcean Spaces ของคุณ
b) ตรวจสอบให้แน่ใจว่าได้ตั้งค่าภูมิภาค 'us-east-1' ไว้ตลอดเวลา
c) เปลี่ยน "URL ของไฟล์แนบ" สำหรับแต่ละไฟล์แนบที่ซิงค์ในไลบรารีสื่อของคุณ

-

ขั้นตอนแรกคือการเปลี่ยนตัวเลือก "ค่าเริ่มต้น" ในไฟล์ "admin":

admin.png

เริ่มต้นที่สาย 34 ของ
./class/wpmfAddonAws3Admin.php
คุณจะเห็นว่ามีการสร้างชุดการตั้งค่าเริ่มต้นสำหรับชั้นเรียนอื่น คุณต้องทำสิ่งต่อไปนี้:


  • เปลี่ยน "ภูมิภาค" เป็น 'us-east-1'
  • แอดไลน์
    "endpoint" => "https://[[REGION]].digitaloceanspaces.com"



ในกรณีข้างต้น "ภูมิภาค" ของเราคือ AMS3 อาจแตกต่างกันไปขึ้นอยู่กับตำแหน่งที่เก็บพื้นที่ของคุณ

การเปลี่ยนรหัสนี้ไม่ได้ช่วยอะไรมาก แต่ทำให้แน่ใจว่ามีการใช้ค่าเริ่มต้นเดียวกันในแต่ละครั้ง (และตั้งค่า "จุดสิ้นสุด" ซึ่งเป็นพื้นฐานของการแฮ็กทั้งหมด)

-

เสร็จแล้วก็เปิดไฟล์คลาสอื่น
./class/wpmfAws3.php
:

class.png

ตามที่กล่าวไว้ จะมีการเรียกสิ่งนี้ทุกครั้งที่คลาส "ผู้ดูแลระบบ" ต้องการสื่อสารกับ S3/DO

สิ่งที่เราจะทำที่นี่คือ "หลอก" จุดปลาย หมายความว่าเราฮาร์ดโค้ดมัน การดำเนินการนี้จะเปลี่ยน URL ที่ AWS SDK ส่งคำขอไป ซึ่งหมายความว่าควรยอมรับข้อมูลประจำตัว DigitalOcean โดยเพิ่มสองบรรทัดต่อไปนี้ที่บรรทัด 73 & 74 ตามลำดับ:

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

ข้อมูลข้างต้นจะบังคับให้เปลี่ยน "ปลายทาง" ทุกครั้งที่คุณใช้ฟังก์ชัน "ผู้ดูแลระบบ" ใดๆ

มันทำงานโดยนำรายละเอียดข้างต้นมารวมกับข้อมูลประจำตัว S3 ที่เก็บไว้ของคุณ (ในกรณีของคุณคือคีย์ DigitalOcean API) ทำให้สคริปต์สามารถสื่อสารกับ DO ฉันอธิบายไว้ข้างต้นว่าสิ่งนี้ถูกจำกัดเพราะหมายความว่าคุณสามารถสื่อสารกับภูมิภาค DO เดียวเท่านั้น (สิ่งที่ฉันจะกล่าวถึงอย่างสมบูรณ์ในหนึ่งนาที)

-

หลังจากทำเช่นนี้ สิ่งสุดท้ายที่เราต้องทำคือเปลี่ยน "URL" สำหรับแต่ละไฟล์แนบที่ซิงค์กับ DO

สิ่งนี้ทำได้ภายในคลาส "admin" ในฟังก์ชัน "wpGetAttachmentUrl" (#2048) และ "addMetaInfo" (#1121):

1121.png

2048.png

ฉันไม่แน่ใจว่าฟังก์ชันใดมีฟังก์ชันเหล่านี้ (ฉันเชื่อว่ามันคือ #2048) แต่ฉันเปลี่ยนทั้งสองอย่าง

ท้ายที่สุด สิ่งที่คุณทำคือเปลี่ยนลิงก์ AWS เป็นลิงก์ของ DigitalOcean สิ่งที่ทำงานได้ดีสำหรับแฮ็คนี้มีดังต่อไปนี้:

#2057 ส่งคืน 'https://' . $infos['Bucket'] . '.ams3.digitaloceanspaces.com/' str_replace(' ', '%20', $infos['Key']);

สิ่งนี้จะเปลี่ยน "ลิงก์" ที่สื่อ WP ต้องมี DigitalOcean Spaces ซึ่งควรแสดงในแบ็กเอนด์และส่วนหน้าของไซต์ของคุณ

--

ฉันจะให้รายละเอียดการแก้ไขที่กว้างขึ้นในโพสต์อื่น
NS
4 ปีที่แล้ว
2. "เต็ม"

ดังที่กล่าวไว้ข้างต้น การแก้ไข "แบบเต็ม" ขึ้นอยู่กับวิธีที่ DigitalOcean เชื่อมต่อกับ AWS SDK

พูดง่ายๆ ก็คือ S3 ให้คุณ "เชื่อมต่อ" แล้วเลือกบัคเก็ตในภูมิภาคใดก็ได้ DigitalOcean อนุญาตให้คุณเชื่อมต่อและโต้ตอบกับ a . เท่านั้น เดี่ยว ภูมิภาคทุกครั้ง

หากคุณต้องการใช้งานปลั๊กอินอย่างเต็มรูปแบบ (ด้วย DigitalOcean) มีการปรับแต่งมากมายที่ต้องเกิดขึ้นในคลาส "ผู้ดูแลระบบ" โดยพื้นฐานแล้วคุณต้องตรวจสอบให้แน่ใจว่าคำขอทุกรายการมีการกำหนดขอบเขตไปยังปลายทางที่ถูกต้อง ซึ่งใช้เวลานานและค่อนข้างแพง (ในแง่ของการเชื่อมต่อ API)

-

เราได้ "ประเภท" นี้ใช้งานได้แม้ว่าจะหลวม ฉันกำลังเขียนสิ่งนี้ที่นี่เพื่อแบ่งปันความคืบหน้าและอาจมีคนอื่นอยากจะเอามันขึ้นมาหรืออะไรทำนองนั้น

--

คุณต้องทำ 4 สิ่งสำคัญเพื่อให้มันทำงานแยกกัน:

1. สร้างโฟลว์ UI "DigitalOcean" แยกต่างหาก
2. ลบการอ้างอิงถึง S3 (แทนที่ด้วย DigitalOcean ตามความจำเป็น)
3. เปลี่ยนโฟลว์ของคุณสมบัติบางอย่างเพื่ออนุญาตการสนับสนุนข้ามภูมิภาค
4. ตรวจสอบให้แน่ใจว่า DO ไม่รบกวน S3

-

1. ในการเพิ่มแท็บ "DigitalOcean" แยกต่างหาก คุณต้องไปที่ปลั๊กอินดั้งเดิมและค้นหาไฟล์ "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>


ฉันเพิ่งเพิ่มมันหลังจากแท็บ S3

เพื่อให้ใช้งานได้ คุณต้องมีตัวแปร $html_tabdo ที่จะเติม ซึ่งทำได้โดยการเปลี่ยนสองไฟล์

ไฟล์แรกคือ ./class/pages/settings/wp-folder-options.php (ปลั๊กอินหลัก/ดั้งเดิม):

S3.png

ประการที่สองคือ ./class/class-wp-folder-option.php:

html_do.png

สิ่งนี้จะเติมแท็บด้วยการตั้งค่า DigitalOcean ต่างๆ

-

2. ในการแทนที่ S3 ด้วย DO คุณต้องแน่ใจว่าคุณมีชุดไฟล์และการตั้งค่าคิวที่แตกต่างกันโดยสิ้นเชิง เพื่อให้แน่ใจว่าทั้งสองระบบจะไม่ขัดแย้งกัน

สิ่งนี้จำเป็นต้องทำหลายอย่าง โดยหลักแล้วคือการสร้างชุดคลาส "admin" และ "connection" ใหม่ ฉันจะไม่ลงลึกถึงวิธีการทำสิ่งนี้ แต่โดยพื้นฐานแล้วคุณต้องการสร้างชุดคลาสใหม่ซึ่งสร้างการตั้งค่า config ของตัวเอง และใช้สิ่งเหล่านี้เพื่อเชื่อมต่อกับปลายทางสำหรับ DO:

api_code.png

-

3. การสนับสนุนข้ามภูมิภาค

ดังที่กล่าวไว้ในโพสต์ข้างต้น ระบบของ DO ทำงานแตกต่างไปจาก S3 โดยที่ทุกคำขอมีการกำหนดขอบเขตไปยังภูมิภาคเฉพาะ (S3 เป็นแบบไม่เชื่อเรื่องพระเจ้าของภูมิภาค)

ซึ่งหมายความว่าหากคุณต้องการทำงานกับบัคเก็ต/สเปซจากภูมิภาคอื่น คุณต้องใช้เวทย์มนตร์เพื่อทำให้ทุกอย่างทำงานร่วมกันได้

ฉันมีเวลาไม่มาก ดังนั้นจะไม่ครอบคลุมทั้งหมดที่นี่ แต่จะบอกว่าหากคุณต้องการให้ระบบทำงาน คุณต้องแก้ไขไฟล์ "./class/wpmfDo.php" ในแบ็กเอนด์ - ตรวจสอบให้แน่ใจว่าคุณสามารถผ่าน "จุดปลาย" ที่คุณต้องการเรียกใช้อินสแตนซ์ของ SDK สำหรับ...

endpoint.png

สิ่งนี้ทำให้เราสามารถกำหนด "จุดปลาย" ("ภูมิภาค" ที่แตกต่างกัน;) สำหรับเมื่อคุณต้องการแสดงรายการช่องว่างต่างๆ เป็นต้น

ตัวอย่างที่ดีของการดำเนินการนี้คือเมื่อคุณต้องการแสดงรายการที่เก็บข้อมูลที่มีอยู่:

region.png

เพื่อให้บรรลุผลข้างต้น คุณจะต้องวนรอบภูมิภาคทั้งหมดที่มีใน DO แล้วสร้างอาร์เรย์ใหม่ของบัคเก็ตที่พร้อมใช้งาน อย่างที่คุณจะประทับใจ นี่เป็นวิธีแก้ปัญหาที่ยุ่งยากในการสร้าง:

buckets_list.png

สิ่งนี้จะสร้างตัวแปร $list_buckets จากภูมิภาคต่างๆ (ไม่ใช่แค่ที่คุณใช้ในการเชื่อมต่อ)

-

4. ยังไม่ได้ทำสิ่งนี้เลย

โดยพื้นฐานแล้ว คุณต้องทำให้ DigitalOcean ทำงานร่วมกับ S3 ได้ แม้ว่าจะมี S3 อยู่ก็ตาม

สิ่งนี้จะต้องทำให้ฟังก์ชัน "การซิงค์" ทำงานได้และอีกหลายอย่างซึ่งฉันยังไม่ได้ดำเนินการให้เสร็จสิ้น
NS
2 ปีที่แล้ว
สวัสดี

คุณลักษณะนี้เพิ่งได้รับการติดตั้งในปลั๊กอิน:)

ดูรายละเอียดด้านล่าง ไชโย
  • หน้าหนังสือ :
  • 1
ยังไม่มีการตอบกลับสำหรับโพสต์นี้