Saltar al contenido

Aislamiento

Rudel es un sistema de superposición seleccionado por solicitud. Una solicitud seleccionada usa las tablas de base de datos y los archivos de tema del sandbox, pero sigue ejecutándose mediante la instalación de WordPress del host.

Aislado por sandbox

Tablas de WordPress

Cada sandbox recibe un prefijo de tabla generado: el prefijo del host más los primeros siete caracteres hexadecimales del MD5 del ID del sandbox.

Text
wp_b65338d_options
wp_b65338d_posts
wp_b65338d_users

Rudel cambia el prefijo de tabla de WordPress antes de que WordPress termine de iniciarse, así que cada consulta de una solicitud de sandbox lee y escribe las copias del sandbox.

Usuarios

Las tablas users y usermeta se clonan junto con las demás. Al crearse, un sandbox comienza con los usuarios y las contraseñas del host; a partir de entonces, los usuarios creados, modificados o eliminados en el sandbox no afectan al host, y los cambios del host no llegan al sandbox.

Archivos del tema activo

El tema seleccionado se copia en el directorio del sandbox:

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

Si el tema es un tema hijo, Rudel también copia el tema principal para mantener válida la relación entre plantillas. Un sandbox siempre sirve el tema registrado al crearse; cambiar de tema dentro del sandbox no tiene efecto.

Compartido con el host

  • Núcleo de WordPress
  • Archivos de plugins
  • Archivos multimedia subidos

Un plugin instalado o actualizado en el host también se instala o actualiza en cada sandbox. Los plugins activos se guardan en la tabla de opciones, así que su estado de activación es propio de cada sandbox. Los archivos subidos desde un sandbox se guardan en el directorio de cargas del host. Esto agiliza la creación de sandboxes y evita reemplazar WP_CONTENT_DIR globalmente.

Mantenga Rudel activo en cada sandbox. El bloqueo del correo y la superposición del tema se ejecutan desde el plugin; además, desactivarlo mientras hay un sandbox seleccionado elimina la línea de arranque del wp-config.php compartido, lo que desactiva la selección de sandbox en toda la instalación (problema n.º 13).

Seleccionar un sandbox

Las solicitudes de HTTP seleccionan un sandbox mediante:

  • el encabezado X-Rudel-Environment (alias heredado X-Rudel-Sandbox)
  • la cookie rudel_environment (alias heredado rudel_sandbox)

Rudel nunca establece ni borra la cookie. Elimínela para volver al host; el elemento Sandbox de la barra de administración enlaza al URL del host, pero deja la cookie intacta (problema n.º 10).

Los comandos WP-CLI seleccionan un sandbox mediante:

  • la variable de entorno RUDEL_ENVIRONMENT
  • un --url cuyo host empieza por el ID del sandbox, como --url=http://alpha-3be7.example.test

El selector no está autenticado. Cualquier cliente que pueda acceder al sitio y envíe un ID de sandbox válido obtiene ese sandbox, y los ID de sandbox (nombre más cuatro caracteres hexadecimales) son fáciles de adivinar. No considere la selección de sandbox un límite de control de acceso; proteja el host público en el servidor web o a nivel de red.

Valores predeterminados de las solicitudes

Para una solicitud seleccionada, Rudel:

  • bloquea el correo saliente mediante un filtro pre_wp_mail
  • establece WP_TEMP_DIR en el directorio tmp del sandbox
  • establece WP_CACHE_KEY_SALT en un valor específico del sandbox para que las cachés de objetos persistentes mantengan separadas las claves de cada sandbox
  • ofrece registro de WP_DEBUG en el sandbox debug.log y claves y sales de autenticación derivadas del ID del sandbox

El arranque define cada una de estas constantes solo si wp-config.php aún no la ha definido. Una instalación estándar de wp-config.php define WP_DEBUG y todas las claves y sales; por eso, en una instalación así, las solicitudes de sandbox usan el ajuste de depuración y las claves y sales del host (problema n.º 4). Como los usuarios también se clonan, una cookie de inicio de sesión del host puede ser válida en un sandbox.

Metadatos de ejecución

Los metadatos de ejecución de Rudel permanecen en las tablas MySQL de WordPress del host:

Text
wp_rudel_environments
wp_rudel_worktrees

Estas tablas son la fuente de verdad de Rudel. Los directorios de entorno contienen archivos y artefactos gestionados, no el estado del registro de ejecución.