Nestjs deployment
Containerize NestJS apps with multi-stage Docker builds, tune Node.js memory, and implement graceful shutdown hooks. Use when writing Dockerfiles, configuring K8s deployments, or adding shutdown hooks for NestJS.From its SKILL.md
npx -y skills add FilippoDeSilva/skills --skill nestjs-deploymentAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its file declares
Copied from the file, not written here
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
2.9 KB, 590 tokens by cl100k_base, as published. Nobody here has run it
Deployment & Ops Standards
Priority: P1 (OPERATIONAL)
Workflow: Containerize NestJS App
- Write multi-stage Dockerfile — Build stage installs devDeps and runs
nest build; run stage copies onlydistand prunednode_modules. - Set non-root user — Add
USER nodeto Dockerfile. - Tune memory — Set
--max-old-space-sizeto ~75% of container memory limit. - Enable shutdown hooks — Call
app.enableShutdownHooks()inmain.ts. - Add K8s pre-stop — Configure 5-10s sleep pre-stop hook for LB draining.
Dockerfile Example
Runtime Tuning (Node.js)
- Memory Config: Container memory != Node memory.
- Rule: Explicitly set Max Old Space.
- Command:
node --max-old-space-size=XXX dist/main - Calculation: Set to ~75-80% of Kubernetes Limit. (Limit: 1GB -> OldSpace: 800MB).
- Graceful Shutdown:
- Signal: Listen to
SIGTERM. - NestJS:
app.enableShutdownHooks()mandatory. - Sleep: Add "Pre-Stop" sleep in K8s (5-10s) to allow Load Balancer to drain connections before Node process stops accepting traffic.
Init Patterns
- Database Migrations:
- Anti-Pattern: Running migration in
main.tson startup. - Pro Pattern: Use Init Container in Kubernetes that runs
npm run typeorm:migration:runbefore app container starts.
Environment Variables & CI/CD
- CI/CD Pipelines (GitHub, GitLab, Azure, etc.):
- If you modify
src/config/env.validation.tsto add new environment variable, you MUST map it explicitly in your deployment pipeline/infrastructure-as-code. - Platform Context:
- Cloud Run/ECS: Variables must explicitly passed in service definition.
- Kubernetes: New variables must added to
Deploymentmanifest orConfigMap/Secret. - Lambda/Serverless: Must added to
serverless.ymlor provider console. - Fundamental Rule: Application code configuration changes "breaking changes" for infrastructure layer. Never assume environment inheritance.
Anti-Patterns
- No migrations in main.ts: Use K8s Init Containers or pre-deploy CI steps for migration runs.
- No root user in Docker: Always add
USER nodeto Dockerfile; running as root security risk. - No unbounded Node heap: Set
--max-old-space-sizeto ~75% of container memory limit.
What ships with it: 2 files
2.2 KB alongside SKILL.md
evals/
- evals.json1.8 KB
references/
- example.md394 B