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

Дополнение WP Media Folder: интеграция с Amazon S3

1. Вход в Amazon S3 из WP Media Folder

Вернитесь к WordPress Thing панели управления и нажмите на меню Настройки > WP Media Folder > Cloud > Offload Media > Amazon S3. Вставьте следующее в поля формы:

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

 

ввод-ключ

 

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

 

2. Как это работает? Что я могу сделать с Amazon S3?

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

После того как вы подключили WP Media Folder к Amazon S3, пожалуйста, выберите бакет или создайте новый, где будут храниться все ваши данные.

 

создать-бакет

 

Вы можете включить Copy to Amazon S3 опцию, и все новые загруженные медиа будут отправлены в Amazon S3.

 

копировать-в-aws

 

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

Примечание: Когда вы выполните это действие, URL ваших медиа будет заменён URL Amazon S3. Пожалуйста, смотрите пример ниже.
С https://joomunited.com/wp-content/uploads/2019/02/image.jpg до >> https://s3.amazonaws.com/{bucket}/wp-media-folder-joomunited/wp-content/uploads/2019/02/image.jpg

Структура папок в Amazon S3: Введите пользовательский путь, где будут храниться выгруженные файлы в вашем бакете S3.

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

 

offload-media-amazon-s3

 

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

 

amazon-label

 

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

 

retrieve-aws

 

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

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

Cloudfront интегрирован с нашим плагином. Чтобы создать пользовательский домен (CNAME), сначала в панели Amazon перейдите к Сервисы > CloudFront или перейти к этому ссылка.

 

cloudfront-menu

 

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

 

create-distribution-button

 

Затем вставьте ваш домен в Исходный домен поле. Если ваш домен: "https://s3-us-west-1.amazonaws.com/joom-united" пожалуйста, переключите на "https://joom-united.s3-us-west-1.amazonaws.com"

 

create-distribution

 

В Default cache behaviour > Cache key and origin requests раздел, выберитеLegacy cache settings параметр. Затем прокрутите вниз до самого низа и нажмите Create Distribution кнопку.

 

legacy-cache-setting

 

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

 

copy-distribution

 

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

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

 

file-url-cdn-s3

 

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

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

 

копировать‑корзины

 

3. Создать пользователя IAM


Интеграция Amazon S3 с WP Media Folder включена в дополнение. Вам необходимо установить это дополнение (плагин) в дополнение к WP Media Folder. Дополнение также включает интеграцию с Google Drive, Google Photo, Dropbox и OneDrive.

Сначала вам нужно войти в консоль Amazon или зарегистрироваться, если у вас нет аккаунта AWS S3.

После входа в консоль вам потребуется создать нового пользователя IAM. Затем перейдите к странице пользователей IAM в консоли AWS, нажмите кнопку Добавить пользователя.

Шаг 1: введите имя пользователя, затем нажмите Далее кнопку.

 

создать-пользователя

 

Шаг 2: Чтобы позволить новому пользователю управлять корзинами и объектами в сервисе S3, необходимо предоставить конкретные разрешения. Нажмите на “Attach policies directly” кнопку, а затем введите “S3” в поле ввода фильтра политик. Выберите “AmazonS3FullAccess” политику, затем нажмите Далее кнопку.

 

разрешение-пользователя

 

Шаг 3: Если всё выглядит правильно, нажмите на Создать пользователя кнопку.

 

обзор-пользователя

 

Создать ключ доступа

После успешного создания нового пользователя, вам следует перейти к Access management > Users > {select a user} > Security credentials вкладке.

 

учетные-данные

 

Затем прокрутите вниз до Access keys раздела и нажмите Create access key кнопку.

 

создать-ключ-доступа

 

На шаге 1: Access key best practices & alternatives, выберите Application running outside AWS опцию. Затем нажмите Next кнопку.

 

шаг1-создать-ключ

 

Далее на шаге 2: укажите описание в поле. Затем нажмите Create access key кнопку.

 

шаг2-имя-ключа

 

Наконец, будет отображен экран получения ключей доступа с учетными данными безопасности для пользователя, которые состоят из Идентификатор ключа доступа и секретный ключ доступа. Amazon не покажет их снова, поэтому, пожалуйста, скачайте их в виде .csv и также скопируйте их в безопасное место. Если вы их потеряете, вы всегда можете создать новый набор ключей в консоли, но вы не сможете снова получить секретный ключ позже.

 

step3-retrieve-access-key

 

Создать бакет

Чтобы использовать Amazon S3, вам следует создать новый бакет. Пожалуйста, перейдите в область бакетов: https://s3.console.aws.amazon.com/s3/buckets. Затем нажмите на Создать бакет кнопку.

 

создать-бакет

 

В Общая конфигурация, введите название бакета, выберите регион AWS, и в Владение объектом разделе, выберите ACL включены > Запись объекта опцию.

 

имя-бакета

 

В настройках Block Public Access для этого бакета раздел, снимите галочку с опции: "Блокировать весь публичный доступ" и установите галочку на опции: "Я подтверждаю, что текущий..." как на изображении ниже.

 

block-public-access-s3

 

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

 

final-step-create-bucket

 

Наконец, новый бакет должен быть успешно создан со статусом Столбец доступа: "Объекты могут быть публичными".

 

created-new-bucket

 

Или вы можете создать новый бакет в настройках WP Media Folder. Перейдите к меню Настройки > WP Media Folder > Cloud > Offload Media > Amazon S3, нажмите на Настройки бакета и выбор кнопку. В нижней части всплывающего окна введите название бакета и нажмите на Создать кнопку.

 

create-bucket-wp

 

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}()