Перейти к основному содержанию

WP Media Folder Addon: интеграция с DigitalOcean

1. Как создать новый API‑ключ в DigitalOcean?

Сначала вам следует войти в свою учетную запись DigitalOcean на сайте. Затем перейдите сюда или перейдите в раздел API в левом меню, нажмите Создать новый ключ кнопку.

 

generate-new-key

 

После этого введите название ключа и нажмите кнопку с зелёной галочкой.

 

name-new-key

 

Наконец, там будут отображены ID ключа и секретный ключ. Сохраните их для следующего шага входа в WP Media Folder.

 

new-key-generate

 

Создать новое пространство

Новое пространство можно создать в DigitalOcean или плагине WP Media Folder.

Первый способ — создать на сайте DigitalOcean и нажать на Кнопку «Create» > Spaces в правом верхнем углу панели управления.

 

create-space

 

Choose a datacenter region, and input the name for space. Click on Create a space button.

 

name-space-digital-ocean

 

The second way is to create on WP Media Folder settings. Navigate to menu Settings > WP Media Folder > Cloud > Offload Media > DigitalOcean, click on Space settings and selection button.

 

Space-settings-selection

 

Then select Region and name for the space.

 

create-space-mf

 

2. Войти в DigitalOcean из WP Media Folder

Вернуться к WordPress Thing панели управления и нажмите на меню Настройки > WP Media Folder > Cloud > Offload Media. Далее, нажмите на Редактировать значок у Выберите поставщика облака и выберите DigitalOcean

 

выбрать-поставщика-облака-digital-ocean

 

Затем вставьте следующее в поля формы:

  • Идентификатор ключа доступа
  • Секретный ключ доступа

 

ввод-ключа-digital-ocean

 

После этого сохраните настройки, и соединение должно быть успешным. Затем нажмите на Настройки и выбор пространства кнопку, чтобы выбрать пространство или создать новое. Пожалуйста, перейдите к следующему шагу, чтобы узнать возможности DigitalOcean.

 

выбрать-пространство

 

3. Как это работает? Что можно сделать с DigitalOcean?

Как это работает?

Как только вы подключили WP Media Folder к DigitalOcean и включили Копировать в DigitalOcean опцию, все новые загруженные медиа будут отправлены в DigitalOcean.

 

copy-to-DigitalOcean

 

Не забудьте создать и выбрать пространство, где будут храниться все ваши данные. И если вы хотите синхронизировать загруженные медиа перед использованием интеграции DigitalOcean, нажмите на Синхронизировать с DigitalOcean кнопку. Затем она отправит всю вашу существующую медиатеку в ваше пространство DigitalOcean.

 

sync-media-button-digital

 

Примечание: При выполнении этого действия URL вашего медиа будет заменён URL‑адресом DigitalOcean. Пожалуйста, смотрите пример ниже.
С https://joomunited.com/wp-content/uploads/2019/02/image.jpg на >> https://joomunited-space.nyc3.digitaloceanspaces.com/wp-media-folder-joomunited/wp-content/uploads/2019/02/image.jpg

 

Чтобы выгрузить медиа с вашего сайта, вам следует включить Удалять после загрузки опцию, ваша медиатека будет полностью храниться в DigitalOcean вместо вашего сервера.

 

remove-after-upload-digital-ocean

 

Включив метку вложения опцию, информация о каждом медиа будет отображаться при наведении на метку DigitalOcean в правом верхнем углу.

 

label-digitalOcean

 

Когда вы хотите изменить расположение медиа или удалить плагин, нажмите Получить Медиа кнопку, тогда все ваши медиа будут скопированы из DigitalOcean в вашу медиатеку. Все прежние ссылки, добавленные в ваш контент, останутся на месте (без битых ссылок).

 

retrieve-media-digitalocean

 

Примечание: Вы можете синхронизировать файлы из DigitalOcean в медиатеку только если они загружены через наш плагин.

 

Как подключить CloudFront?

Cloudfront интегрирован с нашим плагином. DigitalOcean предоставляет два метода установления соединения с CloudFront. Один — с использованием Amazon S3, другой — через DigitalOcean's метод по умолчанию.

Let's начнём с DigitalOcean's default.

Сначала вам следует перейти к вашему Spaces на DigitalOcean и выбрать бакет, подключенный к вашему сайту. Затем перейдите к Настройки вкладке.

В CDN (Сеть доставки контента) опцию, нажмите Редактировать кнопку, затем отметьте Включить CDN опцию. И нажмите Сохранить кнопку.

 

digital-ocean-cdn-default

 

Всплывающее уведомление показывает, что CDN был включен после нескольких секунд загрузки. В правом углу выберите Конечная точка CDN опцию, затем скопируйте URL и вставьте его в Пользовательский домен (CNAME) поле.

 

cdn-endpoint-url-digital-ocean-default


Наконец, вы можете увидеть изменения в URL файла поле в каждом изображении.

 

file-url-cdn-digital-ocean-default

 

И второй способ, вы можете использовать Amazon S3 Cloudfront. Сначала, в панели Amazon, перейдите к Сервисы > CloudFront или перейти к этой ссылка.

 

cloudfront-menu

 

Отсюда нажмите на Создать распределение кнопку в правом углу.

 

create-distribution-button

 

Затем вставьте ваш домен в Origin domain поле. Например: "https://joomunited.us-east-1.digitaloceanspaces.com"

 

создать-распределение-digital-ocean

 

В Поведение кэша по умолчанию > Ключ кэша и запросы к источнику раздел, выберите Legacy cache settings опцию. 

 

legacy-cache-setting

 

Далее, прокрутите вниз до Web Application Firewall (WAF) раздел, и выберите "Не включать защиту безопасности" опцию. После этого прокрутите вниз до самого низа и нажмите на Создать дистрибутив кнопку.

 

web-application-firewall-digital-ocean

 

Затем открываются детали Distribution, скопируйте доменное имя распределения. Перейдите к настройкам Amazon в WP Media Folder и вставьте его в Custom Domain (CNAME) поле.

 

copy-distribution

 

Пожалуйста, подождите несколько минут, пока изображение полностью загрузится, когда поле «Последнее изменение» изменится с "Deploying" до текущей даты и времени.

Наконец, вы можете увидеть изменения в URL файла поле у каждого изображения.

 

file-url-cdn-digital-ocean-s3

 

Расширенные настройки и действия

Вы можете выбрать пространство для импорта папок и файлов с сервера DigitalOcean в вашу медиатеку. Или скопировать все файлы из одного пространства в другое.

 

copy-spaces

 

Duplicate entry '49263e4176ff53f5ff1efff72d6df4fb-ru' for key 'bk24_linguise_urls.hash_translation' (500 Whoops, looks like something went wrong.)

mysqli_sql_exception

HTTP 500 Whoops, looks like something went wrong.

Duplicate entry '49263e4176ff53f5ff1efff72d6df4fb-ru' for key 'bk24_linguise_urls.hash_translation'

Exception

mysqli_sql_exception

Show exception properties
mysqli_sql_exception {#896
  #sqlstate: "23000"
}
  1. foreach ($urls as $translation => $source) {
  2. $elements[] = '("'.mysqli_real_escape_string($this->_database, Request::getInstance()->getLanguage()).'", "'.mysqli_real_escape_string($this->_database, $source).'", "'.mysqli_real_escape_string($this->_database, $translation).'", "'.md5($source).'", "'.md5($translation).'")';
  3. }
  4. $query .= implode(',', $elements);
  5. $query .= ' ON DUPLICATE KEY UPDATE source=VALUES(source), translation=VALUES(translation), hash_source=VALUES(hash_source), hash_translation=VALUES(hash_translation)';
  6. $this->_database->query($query);
  7. }
  8. public function removeUrls($urls)
  9. {
  10. $query = 'DELETE FROM '.mysqli_real_escape_string($this->_database, $this->_database_table_urls).' WHERE (hash_source) IN ';
  1. foreach ($urls as $translation => $source) {
  2. $elements[] = '("'.mysqli_real_escape_string($this->_database, Request::getInstance()->getLanguage()).'", "'.mysqli_real_escape_string($this->_database, $source).'", "'.mysqli_real_escape_string($this->_database, $translation).'", "'.md5($source).'", "'.md5($translation).'")';
  3. }
  4. $query .= implode(',', $elements);
  5. $query .= ' ON DUPLICATE KEY UPDATE source=VALUES(source), translation=VALUES(translation), hash_source=VALUES(hash_source), hash_translation=VALUES(hash_translation)';
  6. $this->_database->query($query);
  7. }
  8. public function removeUrls($urls)
  9. {
  10. $query = 'DELETE FROM '.mysqli_real_escape_string($this->_database, $this->_database_table_urls).' WHERE (hash_source) IN ';
  1. public function saveUrls($urls) {
  2. if (empty($urls)) {
  3. return;
  4. }
  5. return $this->_database->saveUrls($urls);
  6. }
  7. public function removeUrls($urls) {
  8. if (empty($urls)) {
  9. return;
  1. if (isset($result->url_translations)) {
  2. Defer::getInstance()->defer(function() use ($result) {
  3. $new_urls = $result->url_translations;
  4. $new_urls = get_object_vars($new_urls);
  5. Database::getInstance()->saveUrls((array)$new_urls);
  6. });
  7. }
  8. if (isset($result->urls_untranslated)) {
  9. Defer::getInstance()->defer(function() use ($result) {
Translation->Linguise\Script\Core\{closure}()
  1. }
  2. public function finalize()
  3. {
  4. foreach ($this->_actions as $action) {
  5. call_user_func($action['function'], $action['args']);
  6. }
  7. }
  8. }
  1. Helper::prepareDataDir();
  2. // Finalize defer actions on shutdown
  3. // @codeCoverageIgnoreStart
  4. register_shutdown_function(function() {
  5. Defer::getInstance()->finalize();
  6. Database::getInstance()->close();
  7. });
  8. // @codeCoverageIgnoreEnd
  9. }
Processor->Linguise\Script\Core\{closure}()

Stack Trace

mysqli_sql_exception
mysqli_sql_exception:
Duplicate entry '49263e4176ff53f5ff1efff72d6df4fb-ru' for key 'bk24_linguise_urls.hash_translation'

  at /var/www/staging.joomunited.com/public_html/plugins/system/linguise/vendor/linguise/script-php/src/Databases/Mysql.php:170
  at mysqli->query()
     (/var/www/staging.joomunited.com/public_html/plugins/system/linguise/vendor/linguise/script-php/src/Databases/Mysql.php:170)
  at Linguise\Script\Core\Databases\Mysql->saveUrls()
     (/var/www/staging.joomunited.com/public_html/plugins/system/linguise/vendor/linguise/script-php/src/Database.php:232)
  at Linguise\Script\Core\Database->saveUrls()
     (/var/www/staging.joomunited.com/public_html/plugins/system/linguise/vendor/linguise/script-php/src/Translation.php:119)
  at Linguise\Script\Core\Translation->Linguise\Script\Core\{closure}()
  at call_user_func()
     (/var/www/staging.joomunited.com/public_html/plugins/system/linguise/vendor/linguise/script-php/src/Defer.php:42)
  at Linguise\Script\Core\Defer->finalize()
     (/var/www/staging.joomunited.com/public_html/plugins/system/linguise/vendor/linguise/script-php/src/Processor.php:31)
  at Linguise\Script\Core\Processor->Linguise\Script\Core\{closure}()