Local Dev Setup
:::info Source
Sourced from services/content-service/LOCAL_DEV_SETUP.md in the documentation repo.
:::
1. Prerequisites
Node 20, pnpm 9, Docker 24.
2. Quick Start
cd services/content-service
cp .env.example .env.local
pnpm install
docker compose -f docker-compose.dev.yml up -d
pnpm db:migrate
pnpm kms:init # generates dev signing keypair in localstack
pnpm seed
pnpm dev # API on :3080
pnpm dev:builder # Package builder worker
pnpm dev:bundler # Bundle worker
3. Dependencies
| Service | Port | Purpose |
|---|---|---|
| postgres | 5432 | Schema content |
| redis | 6379 | Job queues (BullMQ) |
| nats | 4222 | Events |
| minio | 9000 | S3 emulator |
| localstack | 4566 | KMS emulator |
| authoring-service (mock) | 3010 | Draft snapshots |
| catalog-service (mock) | 3070 | CourseVersion registration |
| sync-service (mock) | 3090 | Bundle delta projection |
| clamav | 3310 | AV scanning for SCORM imports |
4. Environment
PORT=3080
LOG_LEVEL=debug
ENV=dev
DATABASE_URL=postgres://content:content@localhost:5432/content
REDIS_URL=redis://localhost:6379/20
NATS_URL=nats://localhost:4222
NATS_STREAM=CONTENT
S3_ENDPOINT=http://localhost:9000
S3_ACCESS_KEY=minioadmin
S3_SECRET_KEY=minioadmin
S3_BUCKET_PACKAGES=content-packages-dev
S3_BUCKET_BUNDLES=content-bundles-dev
S3_BUCKET_EXPORTS=content-exports-dev
KMS_ENDPOINT=http://localhost:4566
KMS_TENANT_SIGNING_KEY_PREFIX=alias/ghasi-content-signer-
BUNDLE_LICENSE_DEFAULT_TTL_DAYS=30
SCORM_IMPORT_MAX_MB=500
BUILD_TIMEOUT_MS=900000
CLAMAV_HOST=localhost
CLAMAV_PORT=3310
5. Seed Data
- Creates 2 published PlayPackages (ACME onboarding, Globex safety) for pilot tenants.
- Creates 4 pre-built bundles for seeded devices from identity-service.
- Seeds a SCORM 1.2 fixture course (
fixtures/scorm12-golden.zip) for import testing.
6. Useful Commands
pnpm dev
pnpm test
pnpm test:integration
pnpm test:scorm:conformance # runs against SCORM Cloud test suite (requires token)
pnpm test:e2e:offline # mount → play → revoke flow
pnpm bundle:verify <bundleId> # CLI to decrypt + verify bundle locally
pnpm package:inspect <pkgId>
pnpm saga:trace <sagaId>
pnpm openapi:check
7. Fixtures
fixtures/ contains:
scorm12-golden.zip— valid SCORM 1.2 course (ADL fixture).scorm2004-golden.zip— valid SCORM 2004 4th ed.scorm-malicious-rce.zip— expected to quarantine (security test fixture).scorm-path-traversal.zip— expected reject.play-package-expected.json— golden package for snapshot tests.
8. Debugging
pnpm saga:trace <sagaId>shows publish-saga state transitions.pnpm bundle:decrypt <bundleId> --device <deviceId>— decrypts locally for inspection.- MinIO UI at
http://localhost:9001. - NATS dashboard at
http://localhost:8222.