관리자는 플러그인 레지스트리에서 샌드박스 플러그인을 설치하거나 astro.config.mjs에 npm 패키지를 등록할 수 있습니다. 구성 기반 플러그인은 샌드박스 또는 사이트 프로세스에서 실행될 수 있습니다.
관리자 설치 준비
레지스트리 설치에는 다음이 필요합니다.
plugins:manage권한이 있는 관리자 계정.- 다운로드한 플러그인 번들을 위한 구성된 스토리지.
- 사용 가능한 샌드박스 러너.
Cloudflare Workers에서는 @emdash-cms/cloudflare의 sandbox()를 사용하세요.
import { sandbox } from "@emdash-cms/cloudflare";
import { defineConfig } from "astro/config";
import emdash from "emdash/astro";
export default defineConfig({
integrations: [
emdash({
sandboxRunner: sandbox(),
}),
],
});
Cloudflare 러너는 Worker Loader를 사용해 플러그인마다 별도 Worker를 만듭니다. Workers Paid 플랜과 LOADER라는 이름의 worker_loaders 바인딩이 필요합니다. 샌드박스 플러그인은 PluginBridge를 통해 콘텐츠, 미디어, 스토리지, 네트워크, 이메일 API에 도달하므로 사이트의 Worker 진입점은 해당 클래스를 내보내야 합니다.
*-cloudflare 템플릿은 PluginBridge를 내보내지만 Worker Loader 바인딩은 주석 처리해 두어, 새 프로젝트가 Workers 무료 플랜에 배포될 수 있습니다. 스캐폴딩 중 샌드박스 플러그인을 활성화하거나 Cloudflare 샌드박스 설정을 따라 나중에 바인딩을 추가하세요. sandbox() 헬퍼는 빌드 시 유효한 Wrangler 구성을 읽습니다. LOADER가 없으면 레지스트리 탐색은 계속 가능하지만 구성 관리 샌드박스 플러그인은 로드되지 않고, 설치 또는 업데이트 요청은 SANDBOX_NOT_AVAILABLE을 반환합니다.
Node.js에서는 러너와 workerd 피어 의존성을 설치하세요.
npm install @emdash-cms/sandbox-workerd workerd
workerd 프로세스는 Node.js 서버와 별도로 플러그인 코드를 실행합니다. EmDash 통합에서 러너를 선택하세요.
import { defineConfig } from "astro/config";
import emdash from "emdash/astro";
export default defineConfig({
integrations: [
emdash({
sandboxRunner: "@emdash-cms/sandbox-workerd/sandbox",
}),
],
});
두 플랫폼의 개발 설정, 런타임 요구 사항, 리소스 한도, 러너 사용 불가 오류는 플러그인 샌드박스를 보세요.
레지스트리에서 설치
- 관리 패널에서 Registry를 엽니다.
- 플러그인을 검색하고 상세 페이지를 엽니다.
- 릴리스를 선택하고 게시자, 메타데이터, 요청된 권한, 검증 상태를 검토합니다.
- Install을 선택합니다.
- 동의 대화상자에서 검증된 릴리스 식별자와 권한을 검토한 뒤 확인합니다.
EmDash는 게시자의 현재 서명된 레코드를 검증하고, 샌드박스 러너를 통해 로드하기 전에 다운로드한 번들을 확인합니다. 플러그인은 Plugins에 나타나며 비활성화하거나 구성할 수 있습니다. 전체 검증 및 신뢰 모델은 플러그인 레지스트리를 보세요.
권한 검토
동의 대화상자는 플러그인이 선언한 모든 권한을 보여 줍니다. 일반적인 권한은 다음과 같습니다.
| 권한 | 부여된 접근 |
|---|---|
content:read | 사이트 콘텐츠 읽기 |
content:write | 콘텐츠 생성, 업데이트, 삭제 |
content:revisions:read | 유지된 콘텐츠 개정 이력 읽기 |
schema:read | 컬렉션 및 필드 정의 읽기 |
redirects:read | 리다이렉트 규칙 읽기 |
redirects:write | 방문자 전송 위치 변경 |
media:read | 준비된 미디어의 안전한 메타데이터 읽기 |
media:bytes:read | 준비된 미디어의 파일 내용 및 콘텐츠 해시 읽기 |
media:metadata:write | 미디어 대체 텍스트, 캡션, 초점 변경 |
media:write | 미디어 업로드, 교체, 삭제 |
network:request | 플러그인의 허용 호스트 목록으로 요청 보내기 |
대화상자는 플러그인이 선언한 경우 Model Context Protocol(MCP) 도구로 노출된 플러그인 라우트도 식별합니다. 전체 권한 모델은 Capabilities 및 보안을 보세요.
플러그인 업데이트
- 관리 패널에서 Plugins를 엽니다.
- Check for updates를 선택합니다.
- 사용 가능한 릴리스가 있는 레지스트리 플러그인에서 Update를 선택합니다.
- 동의 대화상자를 검토한 뒤 업데이트를 확인합니다.
레지스트리 업데이트는 권한이나 MCP 도구를 추가하거나, 라우트가 인증됨에서 공개로 바뀔 때 다시 확인이 필요합니다. EmDash는 변경을 승인할 때까지 설치된 버전을 유지합니다.
플러그인 제거
- 관리 패널에서 Plugins를 열고 설치된 플러그인을 펼칩니다.
- Uninstall을 선택합니다.
- 이후 재설치를 위해 플러그인 저장 데이터가 필요 없을 때만 Also delete plugin storage data를 선택합니다.
- 제거를 확인합니다.
EmDash는 설치된 번들을 제거하고 플러그인 로드를 중지합니다. 플러그인 스토리지 데이터는 기본적으로 유지됩니다.
npm에서 설치
네이티브 플러그인과 구성 관리 샌드박스 플러그인은 npm 의존성으로 설치합니다. 패키지 안내에 따라 plugins: [] 또는 sandboxed: []를 선택하세요.
다음 예는 네이티브 Field Kit 플러그인을 등록합니다.
import { defineConfig } from "astro/config";
import emdash from "emdash/astro";
import { fieldKitPlugin } from "@emdash-cms/plugin-field-kit";
export default defineConfig({
integrations: [
emdash({
plugins: [fieldKitPlugin()],
}),
],
});
구성 관리 플러그인은 npm 의존성을 업데이트하고 사이트를 배포할 때 바뀝니다. 관리 패널에서 설치하거나 제거할 수 없습니다.
설치 방법 선택
| 레지스트리 | npm의 sandboxed: [] | npm의 plugins: [] | |
|---|---|---|---|
| 설치 및 업데이트 | 관리 패널 | 의존성 변경 및 배포 | 의존성 변경 및 배포 |
| 실행 | 구성된 샌드박스 러너 | 구성된 샌드박스 러너 | 사이트 프로세스 |
| EmDash 접근 | 선언된 플러그인 API만 | 선언된 플러그인 API만 | 선언된 플러그인 API와 직접 프로세스 접근 |
Node.js API 및 직접 fetch() | 사용 불가 | 사용 불가 | 사용 가능 |
| React 관리 컴포넌트 | 사용 불가 | 사용 불가 | 사용 가능 |
| Portable Text 렌더러 | 사용 불가 | 사용 불가 | 사용 가능 |
React 관리 컴포넌트, Portable Text 렌더러, 페이지 프래그먼트, 또는 사이트 프로세스에 대한 직접 접근이 필요할 때 네이티브 플러그인을 사용하세요. 선언된 플러그인 API로 동작할 수 있을 때 샌드박스 플러그인을 사용하세요.