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.