Перейти до вмісту

Ізоляція

Rudel — це система накладних шарів, що вибираються для кожного запиту. Вибраний запит використовує таблиці бази даних і файли теми ізольованого середовища, водночас виконуючись у встановленні хоста WordPress.

Ізольовано для кожного середовища

Таблиці WordPress

Кожне ізольоване середовище отримує згенерований префікс таблиць: префікс хоста плюс перші сім шістнадцяткових символів MD5 ID середовища.

Text
wp_b65338d_options
wp_b65338d_posts
wp_b65338d_users

Rudel перемикає префікс таблиць WordPress до завершення завантаження WordPress, тож кожен запит у запиті ізольованого середовища читає копії середовища й записує в них.

Користувачі

Таблиці users і usermeta клонуються разом з іншими. Під час створення ізольоване середовище отримує користувачів і паролі хоста; після цього створення, зміни чи видалення користувачів у середовищі не впливають на хост, а зміни на хості не переходять до середовища.

Файли активної теми

Вибрана тема копіюється до каталогу ізольованого середовища:

Text
wp-content/rudel-environments/{environment_id}/themes/{theme_slug}

Якщо тема дочірня, Rudel також копіює батьківську тему, щоб зв’язок шаблонів залишався чинним. Ізольоване середовище завжди обслуговує тему, зафіксовану під час створення; перемикання теми всередині середовища ні на що не впливає.

Спільне з хостом

  • ядро WordPress
  • файли плагінів
  • завантажені медіафайли

Плагін, встановлений або оновлений на хості, встановлюється або оновлюється для кожного ізольованого середовища. Активні плагіни зберігаються в таблиці параметрів, тому стан активації окремий для кожного середовища. Завантажені файли з середовища потрапляють до каталогу завантажень хоста. Так створення середовища пришвидшується і немає потреби глобально замінювати WP_CONTENT_DIR.

Залишайте сам Rudel активним у кожному ізольованому середовищі. Блокування пошти й накладний шар теми працюють із плагіна, а його деактивація, коли вибрано середовище, також видаляє рядок початкового налаштування зі спільного wp-config.php, вимикаючи вибір ізольованого середовища для всього встановлення (проблема № 13).

Вибір ізольованого середовища

Запити HTTP вибирають ізольоване середовище через:

  • заголовок X-Rudel-Environment (застарілий псевдонім X-Rudel-Sandbox)
  • cookie rudel_environment (застарілий псевдонім rudel_sandbox)

Rudel ніколи не встановлює і не видаляє cookie. Видаліть його, щоб повернутися до хоста; пункт Sandbox на панелі адміністратора веде на хост URL, але залишає cookie (проблема № 10).

Команди WP-CLI вибирають ізольоване середовище через:

  • змінну середовища RUDEL_ENVIRONMENT
  • --url, ім’я хоста якого починається з ID ізольованого середовища, наприклад --url=http://alpha-3be7.example.test

Селектор не автентифікується. Будь-який клієнт, що має доступ до сайту й надсилає дійсний ID ізольованого середовища, потрапляє в це середовище, а ID (назва та чотири шістнадцяткові символи) легко вгадати. Не вважайте вибір середовища межею контролю доступу; захищайте публічний хост на рівні вебсервера або мережі.

Типові параметри запиту

Для вибраного запиту Rudel:

  • блокує вихідну пошту фільтром pre_wp_mail
  • задає WP_TEMP_DIR як каталог tmp ізольованого середовища
  • задає WP_CACHE_KEY_SALT окреме для середовища значення, щоб ключі в постійному кеші об’єктів не перетиналися
  • увімкне журналювання WP_DEBUG для debug.log середовища, а також ключі та солі автентифікації, похідні від ID середовища

Початкове налаштування визначає кожну з цих констант, лише якщо wp-config.php її ще не визначив. Стандартне встановлення wp-config.php визначає WP_DEBUG, а також усі ключі та солі, тож у такому встановленні запити ізольованого середовища використовують налагоджувальне налаштування хоста й ключі та солі хоста (проблема № 4). Оскільки користувачів також клоновано, cookie входу хоста може бути дійсним в ізольованому середовищі.

Метадані середовища виконання

Метадані середовища виконання Rudel зберігаються в таблицях хоста WordPress MySQL:

Text
wp_rudel_environments
wp_rudel_worktrees

Ці таблиці є єдиним достовірним джерелом даних для Rudel. Каталоги середовищ містять керовані файли й артефакти, а не стан реєстру середовища виконання.