mirror of
https://github.com/apidoorman/doorman.git
synced 2026-02-08 10:08:49 -06:00
2.4 KiB
2.4 KiB
Memory-Mode (MEM) Dumps: Localhost and AWS Docker
Overview
- Memory-mode keeps state in-process (Mongo memory-only). This doc shows how to persist and restore that state via encrypted memory dumps on localhost and on AWS with Docker/ECS.
What’s implemented
- Auto-dump on graceful shutdown, plus signal handlers for SIGTERM/SIGINT/SIGUSR1.
- Encrypted dumps written to
MEM_DUMP_PATH(default:backend-services/generated/memory_dump.bin). - Optional autosave with
MEM_AUTO_SAVE_ENABLEDandMEM_AUTO_SAVE_FREQ(seconds). - Startup auto-restore from the latest dump in the target directory.
Requirements
MEM_OR_EXTERNAL=MEMandTHREADS=1(single worker for memory mode).MEM_ENCRYPTION_KEYset to a strong secret (>= 8 chars).- The directory for
MEM_DUMP_PATHmust be writable and persisted (bind mount or volume).
Localhost (docker compose)
-
docker-compose.yml already mounts
./generated:/app/backend-services/generatedso dumps persist to your working tree. -
Configure environment in
.env(recommended):MEM_ENCRYPTION_KEY=some-strong-secret- Optional:
MEM_AUTO_SAVE_ENABLED=true - Optional:
MEM_AUTO_SAVE_FREQ=300# seconds
-
Or override via shell when running
docker compose up.
AWS ECS (task definition outline)
-
Persist dumps to a mounted volume (EFS or EBS). Example container config:
- Mount EFS to
/app/backend-services/generated(same path used in compose) - Set env vars:
MEM_OR_EXTERNAL=MEMTHREADS=1MEM_ENCRYPTION_KEY=your-strong-keyMEM_DUMP_PATH=/app/backend-services/generated/memory_dump.binMEM_AUTO_SAVE_ENABLED=trueMEM_AUTO_SAVE_FREQ=300
- Mount EFS to
-
Ensure your service sends
SIGTERMon scale-in/stop and allows a short drain period so the dump completes.
Signals / Manual dump
- SIGTERM / SIGINT: triggers a dump and then shutdown.
- SIGUSR1: triggers an on-demand dump without terminating.
- HTTP route (requires auth):
POST /platform/memory/dumpaccepts optional{ "path": "<dir or file>" }.
Verification tips
- After changes (onboard user/API), send SIGUSR1 and check a new
*.binin the dump directory. - Restart the service; logs will report "restored from dump " if a dump exists.
Notes
- Dumps are encrypted (AES-GCM with derived key) using
MEM_ENCRYPTION_KEY. - In multi-worker or HA, use Redis-backed persistence and external databases (MEM mode is single-worker only).