Skip to Content
πŸš€ Faable DeployGuides & MigrationsDeploy Node.js Express

Deploy a Node.js Express App

Push your Express project to GitHub and Faable builds and runs it β€” no Dockerfile, no YAML. The builder detects Node.js from your package.json, installs your dependencies, runs your build step if you have one, and serves the app behind automatic SSL at https://<app>.faable.link, hosted 100% in Europe. Supported Node.js versions: 20, 22 and 24.

Give your app a start script

Make sure your app has a start script inside package.json

{ "name": "app_name", "scripts": { "start": "<your start script here>" } }

Serve your app at $PORT

Start a server that listens on 0.0.0.0 and serves http traffic using environment variable PORT to configure its port binding. This variable will be automatically configured in Faable Cloud when routing requests to your app.

const express = require('express') const app = express() // NOTE: To work on Faable Cloud, use the $PORT environment variable const port = process.env.PORT app.get('/', (req, res) => { res.send('Hello World!') }) app.listen('0.0.0.0', port, () => { console.log(`Example app listening on port ${port}`) })

Deploy

From the dashboard β€” the normal path:

  1. Create a Project and an App in the Faable DashboardΒ .
  2. Click Link repository and pick your Express repo.
  3. Push to your release branch. Faable builds and takes it live.

Or from your laptop, for an ad-hoc deploy:

npm i -g @faable/faable faable login faable deploy

Your app is ready at https://<app>.faable.link, with automatic SSL and the WAF already inspecting traffic.

Environment variables

Read configuration from process.env and set it with the CLI or the dashboard:

faable deploy secrets set DATABASE_URL=postgres://… NODE_ENV=production

Faable also injects PORT, FAABLE_APP_ID, FAABLE_RELEASE and FAABLE_GIT_COMMIT. See Environment & Releases.

Troubleshooting

  • Requests time out β€” the server binds a hardcoded port instead of process.env.PORT, or it listens on 127.0.0.1 instead of 0.0.0.0.
  • Build fails on npm ci β€” package-lock.json is out of sync with package.json. Commit an updated lockfile.
  • The app exits right after boot β€” a missing environment variable usually throws at startup; check the deployment logs in the dashboard.

Last updated on