The Node.js preset provides Node.js with npm, managed by a systemd service for automatic restarts and logging.
Available Versions
| Version | Status |
|---|
| Node.js 18 | LTS |
| Node.js 20 | LTS (default) |
| Node.js 22 | LTS |
Select a version when creating your pod. If not specified, Node.js 20 is used.
instapods pods create my-app -p nodejs --version 22
What’s Included
| Component | Version | Details |
|---|
| Node.js | 18, 20, or 22 (your choice) | JavaScript runtime |
| npm | Bundled with Node.js | Package manager |
| systemd | — | Process manager (app service) |
| git | Latest | Version control |
| SSH | OpenSSH | Access via dedicated port |
Pre-installed utilities: curl, wget, vim, htop, unzip.
Directory Structure
/home/instapod/app/
├── package.json
├── index.js # Entry point (configurable)
└── node_modules/ # (after npm install)
- App Root:
/home/instapod/app
- App Port: 3000 (your app must listen on this port)
- Environment:
NODE_ENV=production is set by default
How the App Service Works
Your Node.js app runs as a systemd service called app. It:
- Runs
/usr/bin/node index.js from /home/instapod/app
- Starts automatically on boot
- Restarts on crash (
on-failure policy)
- Logs to the system journal (viewable via the Logs tab or CLI)
- Runs as the
instapod user
The service expects your app to listen on port 3000. The nginx proxy on the server forwards traffic from your pod’s public URL to this port.
Your app must bind to 0.0.0.0 (not localhost or 127.0.0.1) on port 3000, otherwise it won’t be reachable from the public URL.
Deploying Your App
Upload and Reload
# Sync your project
instapods files sync my-node-app --local ./my-project
# Reload (auto-installs deps + restarts)
instapods pods reload my-node-app
pods reload automatically runs npm install --production when it detects a package.json in your app directory. You don’t need to install dependencies manually.
Example Express App
// index.js
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello from InstaPods!');
});
app.listen(3000, '0.0.0.0', () => {
console.log('Server running on port 3000');
});
{
"name": "my-app",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"dependencies": {
"express": "^4.18.0"
}
}
No Hot Reload
Node.js does not support hot reloading of code. Every code change requires a full process restart via pods reload. The restart takes about 1 second and causes a brief interruption.
Viewing Logs
instapods logs my-node-app -s app
Adding a Database
instapods services add my-node-app -s postgresql -w
instapods services creds my-node-app -s postgresql
Database services require the Build plan or higher.
Use Cases
- Express / Fastify APIs
- Next.js applications (standalone mode)
- GraphQL servers
- Real-time apps with WebSockets
- Background workers and job queues