Chapter 15: Production Deployment
Chapter 15 of 15
Chapter 15: Production Deployment
15.1 Deployment Strategies
Proper deployment ensures applications run reliably in production environments.
Process Management:
// PM2 - Process manager
// pm2 start ecosystem.config.js
// ecosystem.config.js
module.exports = {
apps: [{
name: 'my-app',
script: './app.js',
instances: 'max',
exec_mode: 'cluster',
env: {
NODE_ENV: 'production'
}
}]
};
15.2 Docker Deployment
# Dockerfile
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
# docker-compose.yml
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
restart: always
15.3 CI/CD Pipeline
# .github/workflows/deploy.yml
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup Node.js
uses: actions/setup-node@v2
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm test
- name: Deploy
run: npm run deploy
15.4 Environment Configuration
// Use environment variables
require('dotenv').config();
const config = {
port: process.env.PORT || 3000,
db: {
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD
}
};
15.5 Zero-Downtime Deployment
// Graceful shutdown
process.on('SIGTERM', () => {
console.log('SIGTERM received, shutting down gracefully');
server.close(() => {
console.log('Process terminated');
});
});
Conclusion
Master advanced Node.js to build scalable, high-performance applications.