본문으로 건너뛰기

격리

Rudel은 요청에서 선택하는 오버레이 시스템입니다. 선택된 요청은 호스트 WordPress 설치에서 계속 실행되면서 샌드박스 데이터베이스 테이블과 샌드박스 테마 파일을 사용합니다.

샌드박스별 격리 항목

WordPress 테이블

각 샌드박스에는 생성된 테이블 접두사가 지정됩니다. 호스트 접두사에 샌드박스 ID의 MD5 중 앞의 7개 16진수 문자를 덧붙입니다.

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)
  • rudel_environment 쿠키(이전 별칭 rudel_sandbox)

Rudel은 쿠키를 설정하거나 지우지 않습니다. 호스트로 돌아가려면 쿠키를 삭제하세요. 관리 표시줄의 Sandbox 항목은 호스트 URL로 연결되지만 쿠키는 그대로 둡니다(문제 #10).

WP-CLI 명령에서는 다음 방식으로 샌드박스를 선택합니다:

  • RUDEL_ENVIRONMENT 환경 변수
  • 호스트가 샌드박스 ID로 시작하는 --url(예: --url=http://alpha-3be7.example.test)

선택기는 인증되지 않습니다. 사이트에 접속할 수 있는 클라이언트가 유효한 샌드박스 ID를 보내면 해당 샌드박스가 선택됩니다. 샌드박스 ID(이름과 16진수 문자 4개)는 쉽게 추측할 수 있습니다. 샌드박스 선택을 접근 제어 경계로 간주하지 마세요. 공개 호스트는 웹 서버 또는 네트워크 수준에서 보호하세요.

요청 기본값

요청에서 샌드박스를 선택하면 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). 사용자도 복제되므로 호스트 로그인 쿠키가 샌드박스에서 유효할 수 있습니다.

런타임 메타데이터

Rudel 런타임 메타데이터는 호스트 WordPress MySQL 테이블에 저장됩니다:

Text
wp_rudel_environments
wp_rudel_worktrees

이 테이블은 Rudel의 기준 데이터입니다. 환경 디렉터리에는 관리되는 파일과 아티팩트가 들어 있으며 런타임 레지스트리 상태는 저장되지 않습니다.