Skip to main content

Node.js

A Node application serving its own HTTP — Next.js, Nuxt, Express or anything else that listens on a port

A Node application serving its own HTTP — Next.js, Nuxt, Express or anything else that listens on a port. Replaces PHP-FPM and nginx rather than joining them: it is the web server as well as the application. In front of it is the platform's proxy, which terminates TLS, routes the hostname and compresses responses; behind it, whatever the project chose.

The container runs as vallic with the release at /var/www/html/current (WEB_ROOT), read-only, and the release's own node_modules/.bin on PATH. The release keeps node_modules: for a Node application they are the runtime, not a build input, so the build's last step prunes what production does not need.

A Next.js project

vallic.yaml at the root of the repository:

version: 1
type: nodejs

runtime:
  node: '24'

build:
  steps:
    - name: Dependencies
      run: npm ci
    - name: Build
      run: npm run build
    - name: Production dependencies only
      run: npm prune --omit=dev
  cache:
    - node_modules
    - .next/cache

start: npm start
port: 3000

health:
  path: /
  timeout: 30

npm start is next start, which serves the .next directory the build produced and listens on PORT. Both start and port are the defaults, so they can be left out; they are written here so the file says what runs. Next.js binds HOSTNAME, which the platform sets to 0.0.0.0, and NODE_ENV is production.

Uploads and anything else written at runtime go under /mnt/files (VALLIC_PUBLIC_DIR, VALLIC_PRIVATE_DIR), which outlive the release; the release itself is read-only. Environment variables — a database URL, an API key — are set on the environment in the console and reach the process as ordinary environment variables, not as an .env file in the checkout.

Versions

Version Status
26.10 Supported, and the default
24.21 Supported
22.23 Supported
26.8 Deprecated — still runs, but move to something newer
24.20 Deprecated — still runs, but move to something newer

A deprecated version still runs and is still what some sites are on. It is listed so you can move before it goes, rather than finding out on the morning a build stops resolving it.

Pin the version, not the build: name 26.10 and the platform matches it to the current build, so a security rebuild reaches you without anybody editing a repository.

What you can change

In vallic.yaml — what each one does is on Service settings:

services:
  - nodejs:
      version: '26.10'
      environment:
        NODE_OPTIONS: …

Anything not on this list refuses the deploy, naming the variable — rather than being accepted and quietly ignored.