Awesome-omni-skill NestJS Deployment

Docker builds, Memory tuning, and Graceful shutdown.

install
source · Clone the upstream repo
git clone https://github.com/diegosouzapw/awesome-omni-skill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/diegosouzapw/awesome-omni-skill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/devops/nestjs-deployment" ~/.claude/skills/diegosouzapw-awesome-omni-skill-nestjs-deployment && rm -rf "$T"
manifest: skills/devops/nestjs-deployment/SKILL.md
source content

Deployment & Ops Standards

Priority: P1 (OPERATIONAL)

Docker optimization and production deployment standards for NestJS applications.

Docker Optimization

  • Multi-Stage Builds: Mandatory.
    1. Build Stage: Install
      devDependencies
      , build NestJS (
      nest build
      ).
    2. Run Stage: Copy only
      dist
      and
      node_modules
      (pruned), use
      node:alpine
      .
  • Security: Do not run as
    root
    .
    • Dockerfile:
      USER node
      .

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()
      is mandatory.
    • Sleep: Add a "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.ts
      on startup.
    • Pro Pattern: Use an Init Container in Kubernetes that runs
      npm run typeorm:migration:run
      before the app container starts.

Environment Variables & CI/CD

  • CI/CD Pipelines (GitHub, GitLab, Azure, etc.):
    • If you modify
      src/config/env.validation.ts
      to add a new environment variable, you MUST map it explicitly in your deployment pipeline/infrastructure-as-code.
    • Platform Context:
      • Cloud Run/ECS: Variables must be explicitly passed in the service definition.
      • Kubernetes: New variables must be added to the
        Deployment
        manifest or
        ConfigMap
        /
        Secret
        .
      • Lambda/Serverless: Must be added to
        serverless.yml
        or provider console.
    • Fundamental Rule: Application code configuration changes are "breaking changes" for the infrastructure layer. Never assume environment inheritance.