DevOps30-50 min
PM2 Node.js Deployment
Configure PM2 for process management, environment variables, log rotation, and automatic restart after server reboot.
PM2Node.jsLinux
Prerequisites
- A Linux server with Node.js installed.
- A built application and start command.
- Production environment variables available on the server.
1
Plan the implementation
Start by choosing the exact page, route, API, or deployment surface you want to improve. A narrow target makes the implementation measurable and easier to verify.
- Write down the current behavior and the user-facing problem it creates.
- Pick one measurable success signal such as bundle size, latency, error rate, security coverage, or UI responsiveness.
- Identify the files, routes, providers, and environment variables involved.
- Create a rollback note before changing production-sensitive configuration.
2
Set up the required tools
Install or configure only the tools needed for this implementation. Keep config close to the feature so future developers can find the moving parts quickly.
Implementation snippet
npm install -g pm2
pm2 --versionChecklist
- Dependencies are added to the correct workspace package.
- Environment variables are documented in `.env.example` when needed.
- Local development still starts without production-only secrets.
- The change is small enough to review in one pull request.
3
Implement the core pattern
- Create an ecosystem config file for the app.
- Point PM2 to the built server entry file.
- Configure environment name, instances, and restart behavior.
- Start the app with PM2 and save the process list.
- Enable startup so the app restarts after reboot.
Implementation snippet
module.exports = {
apps: [{
name: "api",
script: "dist/server.js",
instances: 2,
exec_mode: "cluster",
env: { NODE_ENV: "production" },
}],
};4
Handle edge cases
Checklist
- PM2 logs show successful startup.
- The app restarts after an intentional crash.
- Startup scripts are installed for the server user.
- Log rotation is configured for long-running servers.
5
Verify before production
- Run the app locally and test the normal success path.
- Test one failure path, one empty state, and one slow-network or retry path.
- Run the project build and any related unit or integration tests.
- Check browser console, server logs, and network responses for hidden warnings.
- Document the final behavior, commands used, and any follow-up work.