Configuration
NestJS applications are built using the NestJS CLI, which compiles TypeScript to JavaScript. Sevalla runsnpm run build then npm start and the build output goes to dist/ directory.
The package.json file should include the following:
Environment variables
Set your environment variables directly in Sevalla. For managing them inside your NestJS application, we recommend the following best practices:- Use the
@nestjs/configpackage for structured environment configuration - Install with:
npm install @nestjs/config - Load
.envfiles automatically usingConfigModule - Access variables through
ConfigServicevia dependency injection - Validate all environment variables at startup to prevent misconfiguration
- Never commit
.envfiles to version control
ConfigModule setup:
Containerization
Dockerfile
The build for Dockerfiles is fully customizable. We recommend the following best practices when using a Dockerfile for NestJS on Sevalla:- Use Alpine images - Smaller image size (~40MB vs ~900MB).
- Multi-stage builds - Separate build and runtime dependencies.
- Layer caching - Copy
package.jsonbefore the source code. - Security - Run as a non-root user in production.
- .dockerignore - Exclude unnecessary files.
Nixpacks
You can customize the Nixpacks build process by defining anixpacks.toml file and using Nixpacks-specific environment variables. This allows you to fine-tune how dependencies are installed, how your application is built, and which runtime settings are applied.
You can control the Node.js version used during the build by using an .nvmrc file, the engines field in package.json, or the NIXPACKS_NODE_VERSION environment variable. If none are set, Nixpacks defaults to Node.js 18.
The following is an example nixpacks.toml configuration for NestJS:
nixpacks.toml for NestJS with additional system dependencies:
Buildpacks
Buildpacks automatically detect your project’s lock file and install dependencies using the appropriate package manager. With Buildpacks, you cannot modify the underlying build phases or control how dependencies are installed; this is determined entirely by your project’s structure and configuration. However, you can influence the final runtime behavior by defining the correctstart script in your package.json, which Buildpacks will use when launching your NestJS application.
CDN
Sevalla provides a premium, Cloudflare-powered CDN for Application Hosting at no additional cost. To get the most out of Sevalla’s CDN when deploying your NestJS application, we recommend the following best practices:- Enable the CDN for all production applications.
- Set appropriate
Cache-Controlheaders on API routes to ensure proper caching behavior. - Purge the CDN cache after deploying critical updates to avoid serving stale content.
- Use versioned URLs for static assets, for example
/static/app.v123.js.
Optimizing NestJS for CDN
Static files with cache headers
Edge caching
Edge caching stores your Sevalla site cache on Cloudflare’s 260+ global data centers, delivering responses from the location nearest to each visitor for faster performance. To maximize the benefits of Sevalla’s Edge Caching for your NestJS application, we recommend the following best practices:- Set appropriate
Cache-Controlheaders in loaders to control caching behavior. - Combine edge caching with the CDN for a complete caching strategy.
Optimizing NestJS for edge caching
Cache-Control
With Sevalla’s Cloudflare integration,Cache-Controlheaders are respected at the edge, giving you precise control over how content is cached and served globally. The following are some common directives you can use in your NestJS application:
public, s-maxage=3600- Caches the response on the CDN for 1 hour, improving performance for frequently accessed content.public, max-age=31536000, immutable- Ideal for versioned static assets, allowing them to be cached for up to 1 year with no revalidation.private- Prevents CDN caching and ensures the response is only cached by the end user’s browser, for personalized or sensitive data.
Sevalla does not yet support the
stale-while-revalidate Cache-Control directive. To prevent unexpected caching behavior, we recommend not using this directive in your API or asset caching settings.Health checks
Ensure your application remains available during deployments by implementing health checks:- Always implement health checks for production applications.
- Keep checks lightweight; responses should complete in under 1 second.
- Verify critical dependencies (e.g., databases, Redis) using
@nestjs/terminusas part of the checks.
Basic health check
Graceful shutdown
NestJS has built-in support for graceful shutdown withenableShutdownHooks() :
OnModuleDestroy for custom cleanup logic for custom cleanup logic: