メインコンテンツにスキップ
  2020年1月14日火曜日
  6 返信
  2.8K訪問
  申し込む
こんにちは。digitalocean

スペースやその他の S3 と互換性がありますか?

それは flatsome UX Builder と互換性がありますか

? ありがとう!
5年前
こんにちは、

この拡張機能についてお問い合わせいただきありがとうございます。

Digitalocean スペースやその他の S3 と互換性がありますか?

Digital Ocean はまだサポートされていませんが、現在 Amazon S3 を使用できます: 詳細:

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

それは flatsome UX Builder と互換性がありますか?

はい、ほとんどのページビルダーと互換性があります。

それが役に立てば幸い!
乾杯、
W
こんにちは、

ご回答ありがとうございます。

DOはS3と互換性があるため、DOのクレデンシャルとサーバーアドレスで機能する可能性があります。:) やってみましたか?
5年前
こんにちは、

詳細についてご連絡いただきありがとうございます。

DO は S3 と互換性があるため、DO 認証情報とサーバー アドレスで動作する可能性があります。:) 試してみましたか?


DO でテストしたことはありませんが、不可能だと思います。

乾杯、
R
4年前
DigitalOcean で使用できます。これを機能させるための簡単なハックがあります。

デジタルオーシャン.png

私はクライアントのためにそれを行っただけなので、ハックの詳細を説明し、それからそれを動作させる方法を個別に説明します。

--

まだ 100% 機能しているわけではありませんが、大幅な進歩を遂げました。

1. ハック

DigitalOcean Spaces は S3 の API を中心に構築されており、 Amazonの「AWS SDK」PHPライブラリ (これはプラグインの bundleです)。

これを発見して、私は次のように考えました。 DigitalOcean は自社製品での SDK の使用を推進しています、コードの一部をハッキングして機能させることは、それほど難しいことではありません。

これを行うには、プラグインが 2 つのクラス ファイル (サービスごとに) を使用して動作することがわかりました。
./class/wpmfAddonAws3Admin.php
&
./class/wpmfAws3.php
(S3の場合)。

「admin」ファイルはフロントエンド機能が存在する場所です。 もう 1 つは S3 SDK とのインターフェース用です。 つまり、「admin」ファイルは Ajax または WP フロントエンド経由でロードされ、その機能によって S3 ファイルが (保存された認証情報を使用して) 呼び出され、S3 バケットに対してアクション (同期など) を実行できるようになります。 これは非常にうまく機能しますが、DigitalOcean で動作させるには 1 つの大きな問題があります。

エンドポイント.png

デジタルオーシャンは ない 地域にとらわれない。 これは、各リクエストのスコープが特定のリージョンに限定されるのに対し、S3 のスコープは特定のリージョンに限定されないことを意味します。 これ自体は問題ではありません (ハックは引き続き機能します) が、「完全な」機能 (さまざまなリージョン/バケット) を実現したい場合は、次のコマンドで「非管理」クラスを呼び出す必要があることを確認する必要があります。毎回カスタム資格情報設定を行います。

-

ハッキングは次の内容で構成されます。

a) DigitalOcean Spaces リージョンの「エンドポイント」を使用するように「admin」ファイルを変更します。
b) 「us-east-1」リージョンが常に設定されていることを確認します。
c) メディア ライブラリ内の同期された各添付ファイルの「添付ファイル URL」を変更します。

-

最初のステップは、「admin」ファイルの「default」オプションを変更することです。

管理者.png

の 34 行目から始まります
./class/wpmfAddonAws3Admin.php
をクリックすると、他のクラス用に一連のデフォルト設定が作成されていることがわかります。 次のことを行う必要があります。


  • 「リージョン」を「us-east-1」に変更します。
  • 行を追加
    "endpoint" => "https://[[REGION]].digitaloceanspaces.com"



上記の場合、「リージョン」は AMS3 です。 これは、スペースが保管されている場所によって異なる場合があります。

このコードを変更することは実際には大したことはありませんが、毎回同じデフォルトが使用されるようになります (そして、ハッキング全体の基礎となる「エンドポイント」が設定されるようになります)。

-

これを行った後、他のクラスファイルに移ります。
./class/wpmfAws3.php
:

クラス.png

前述したように、これは「管理者」クラスが S3/DO との通信を希望するたびに呼び出されます。

ここで行うのは、エンドポイントを「スプーフィング」することです。つまり、ハードコーディングします。 これにより、AWS SDKがリクエストを送信するURLが変更されます。つまり、DigitalOcean認証情報を受け入れる必要があります。 これを行うには、73行目と74行目にそれぞれ次の2行を追加します。

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

上記により、「管理」機能のいずれかを使用するたびに「エンドポイント」が強制的に変更されます。

これは、上記の詳細を取得し、保存されている S3 認証情報 (この場合は DigitalOcean API キー) と結合することで機能し、スクリプトが DO と通信できるようにします。 上で、これは単一の DO 領域とのみ通信できることを意味するため、制限があると説明しました (これについては後ほど詳しく説明します)。

-

これを行った後、最後に行う必要があるのは、DO と同期された各添付ファイルの「URL」を変更することです。

これは、「admin」クラス内の関数「wpGetAttachmentUrl」 (#2048) および「addMetaInfo」 (#1121) で行われます。

1121.png

2048.png

これらの関数のどれが実際にその機能を提供しているのかはわかりませんが (#2048 だと思います)、とにかく両方を変更しました。

最終的に行うことは、AWS リンクを DigitalOcean リンクに変更することだけです。 このハックでうまく機能したのは次のとおりです。

#2057 return'https:// '。 $ infos ['バケット']。 '.ams3.digitaloceanspaces.com /'。 str_replace( ''、 '%20'、$ infos ['Key']);

これにより、WP メディアの DigitalOcean Spaces への「リンク」が変更され、サイトのバックエンドとフロントエンドに表示されるはずです。

--

より広範な修正については、別の投稿で詳しく説明します。
R
4年前
2. "満杯"

上で述べたように、「完全な」修正は、DigitalOcean が AWS SDK とどのようにインターフェースするかによって異なります。

簡単に言えば、S3 を使用すると、任意のリージョンで「接続」してバケットを選択できます。 DigitalOcean では、接続および対話のみが許可されます。 シングル 毎回地域。

(DigitalOcean を使用して) プラグインの完全な機能を実現したい場合は、「admin」クラスで多くのカスタマイズを行う必要があります。 基本的に、すべてのリクエストのスコープが正しいエンドポイントに設定されていることを確認する必要がありますが、これには時間がかかり、(API 接続の観点から) かなりのコストがかかります。

-

大まかではありますが、「なんとか」これが機能するようになりました。 私は進捗状況を共有する手段としてこれをここに書いていますが、もしかしたら他の誰かがそれを取り上げたいと思うかもしれません。

--

個別に動作させるには、次の 4 つの主要な作業を行う必要があります。

1. 別の「DigitalOcean」UIフローを作成する
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 変数を設定する必要があります。これを行うには、2 つのファイルを変更します。

1 つ目は ./class/pages/settings/wp-folder-options.php ファイル (メイン/オリジナルのプラグイン) です。

S3.png

2 番目は ./class/class-wp-folder-option.php です。

html_do.png

これにより、タブに DigitalOcean のさまざまな設定が入力されます。

-

2. S3 を DO に置き換えるには、2 つのシステムが競合しないように、ファイルとキューの設定が完全​​に異なることを確認する必要があります。

これには、主に「admin」クラスと「connection」クラスの新しいセットを作成するなど、多くのことを行う必要があります。 これを行う方法については詳しく説明しませんが、基本的には、独自の構成設定を作成する新しいクラスのセットを作成し、それらを使用して DO のエンドポイントに接続する必要があります。

API_コード.png

-

3. 地域を超えたサポート。

上記の投稿で述べたように、DO のシステムは、すべてのリクエストのスコープが特定のリージョンに限定されるという点で、S3 とは動作が異なります (S3 はリージョンに依存しません)。

つまり、他のリージョンのバケット/スペースを操作したい場合は、すべてを連携させるために何らかの魔法を使う必要があります。

時間がなくなってきたので、ここではすべてを説明しませんが、システムを動作させたい場合は、バックエンドの「./class/wpmfDo.php」ファイルを編集する必要があると言います。 SDK のインスタンスを呼び出す「エンドポイント」を渡せることを確認します...

エンドポイント.png

これにより、さまざまな「エンドポイント」(「リージョン」)を定義できるようになります。;) さまざまなスペースをリストする必要がある場合などに使用します。

これを実際に実行する良い例は、使用可能なバケットをリストする場合です。

地域.png

上記を実現するには、DO で使用可能なすべてのリージョンを循環してから、使用可能なバケットの新しい配列を作成する必要があります。 おわかりのように、これは作成するのが難しいソリューションでした。

バケットリスト.png

これにより、さまざまなリージョン (接続に使用したリージョンだけでなく) から $list_buckets 変数が作成されます。

-

4. まだこれを行っていません

基本的に、S3 が存在する場合でも、DigitalOcean を S3 で動作させることができる必要があります。

これには、「同期」機能を機能させることや、その他の多くの作業が必要ですが、まだ完了していません。
こんにちは、

この機能は最近プラグインに実装されました。:)

以下の詳細を参照してください。 乾杯、
  • ページ:
  • 1
この投稿に対する返信はまだありません。