Hosting

Express Hosting on Node.js 22 with Git Deploy

Deploy an Express 5 app on VeloxaHost: Node.js 22, npm ci and a restart on every Git deploy, a CI webhook for push-to-deploy, and HTTPS on your domain.

An Express app on VeloxaHost runs on a Node.js site: its own container with Node.js 22, your app as the veloxa-app system service, and the site's web server in front of it on your domain with a free Let's Encrypt certificate. Requests are forwarded to your app on port 3000. Each Git deploy pulls your code, installs dependencies and restarts the app.

Express 5 needs Node.js 18 or newer, so the site's Node.js 22 runs it, and Express 4 apps run too.

Deploy from Git

Prepare the app

Listen on the port in PORT and tell Express it sits behind one proxy on the same machine:

const express = require("express");
const app = express();

app.set("trust proxy", "loopback");
app.get("/", (req, res) => res.send(`Hello over ${req.protocol}`));

app.listen(process.env.PORT || 3000);

With trust proxy set to loopback, req.protocol reads https from the X-Forwarded-Proto header and req.ip is the visitor's address, not 127.0.0.1. Express's guide lists loopback as a preset for exactly this case.

Give package.json a start script, such as "start": "node server.js", and commit package-lock.json so deploys use npm ci.

Create and deploy the site

  1. In the console, open Websites and click Add Website.

  2. Enter your domain and pick Node.js under Hosting type.

  3. Leave Start Command empty to run npm start, or enter another command. It runs from /opt/app.

  4. Click Create Website. Setup takes a few minutes and serves a placeholder app until your first deploy.

  5. Add the DNS records shown under DNS — point your domain here: an A record for the domain and for www, and a TXT record that proves the domain is yours. HTTPS is issued once they resolve.

  6. In the Deploy from Git card, click Deploy and enter the Repository URL (https), Branch, an optional Subdirectory for a monorepo, and Auto-deploy: Manual / webhook only, Every hour or Every day.

  7. Click Deploy Now. The deploy makes a shallow clone, replaces /opt/app with it but keeps node_modules, runs npm ci when there is a lockfile (otherwise npm install) and restarts the app. Refresh to see it under Recent deploys.

  8. For push-to-deploy, save the CI Webhook URL as a CI secret and call it after your tests:

    - name: Deploy to VeloxaHost
      run: curl -fsS -X POST "$VELOXAHOST_DEPLOY_HOOK"
      env:
        VELOXAHOST_DEPLOY_HOOK: ${{ secrets.VELOXAHOST_DEPLOY_HOOK }}
    

    One deploy runs per site at a time; a call during a deploy gets a 409.

Environment variables

The console has no environment form yet, and each deploy replaces files in /opt/app, so a .env there would be lost. Open the console (Advanced > Open Console) and run systemctl edit veloxa-app, then add under [Service]:

Environment=NODE_ENV=production
Environment=DATABASE_URL=postgres://...

Then systemctl restart veloxa-app. Express's performance guide recommends NODE_ENV=production set this way, through the init system. The deploy's npm ci runs outside the service, so your devDependencies still install.

Supported versions

Component Version
Node.js 22, from NodeSource's 22.x repository
Express 5 (needs Node.js 18+) and 4
npm The one that ships with Node.js 22

Node.js 22 is in maintenance LTS until April 2027. It is the only version a Node.js site sets up; for another major, use a VPS.

Which plan fits

A typical Express API or server-rendered site fits Launch ($6.99/month: 1 vCPU, 1 GB RAM, 3 websites). Grow ($12.99/month: 2 vCPU, 4 GB RAM, 10 websites) gives room for heavier apps or several services. Each site can use up to its plan's RAM and vCPU, with 5 GB of disk per site on Launch and Grow and 2 GB on Scale and Business, which node_modules counts against. Yearly billing is ten times the monthly price. See pricing.

Limits and when to use a VPS

  • WebSockets and Socket.IO. Upgrades reach your app, but the platform closes a connection that is idle for five minutes, so send a ping or heartbeat more often than that. With one process there is nothing to balance across; real-time apps that need several instances belong on a VPS.
  • One app process. Queue workers and schedulers (BullMQ, Agenda) need their own processes and usually Redis; run them on a VPS, or start from the Node.js (Docker) app.
  • No database. Node.js sites include none. Use a database on a VPS, such as MongoDB or PostgreSQL.
  • No build step. A deploy runs npm ci and restarts. For TypeScript, add a prestart script, as the Node.js hosting page shows.
  • Public repositories only, and the install must finish within five minutes.

Building a React front end with server rendering? See Next.js hosting.

FAQ

Which port should Express listen on?

process.env.PORT, which is 3000. The site's web server forwards your domain to it and handles HTTPS, so your app speaks plain HTTP.

Why does Express think requests are plain HTTP?

Express does not trust proxy headers by default. Add app.set("trust proxy", "loopback") and req.secure and req.protocol follow the X-Forwarded-Proto header the site's web server sends.

Can I run TypeScript directly?

Build it. Add "prestart": "tsc" (or your build) to package.json; npm runs it before npm start, including after each deploy.

How do I read my app's logs?

Your app's output goes to the service journal. In the console, run journalctl -u veloxa-app -n 100.

Does it work with Express 4?

Yes. Node.js 22 runs both. Express 5 changed some routing syntax, so read its migration guide before you upgrade.

Express sites run on any managed hosting plan, from Launch at $6.99/month. Framework facts were checked on 2026-10-18 against: expressjs.com/en/starter/installing.html, expressjs.com/en/guide/behind-proxies.html, expressjs.com/en/advanced/best-practice-performance.html, github.com/nodejs/Release, registry.npmjs.org/express/latest.

Ready to deploy?

Start a free trial, or compare plans to match your team's scale.