Node.js / Express API
Dockerfile de Producción
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:20-alpine
RUN addgroup -S app && adduser -S app -G app
WORKDIR /app
COPY --from=builder /app/package*.json ./
RUN npm ci --production && npm cache clean --force
COPY --from=builder --chown=app:app /app/dist ./dist
USER app
ENV NODE_ENV=production
EXPOSE 4000
CMD ["node", "dist/server.js"]
Endpoint de Health Check
// server.js — Endpoint de health check
app.get('/health', (req, res) => {
res.status(200).json({
status: 'healthy',
uptime: process.uptime(),
timestamp: new Date().toISOString()
});
});
Apagado Elegante
// Apagado elegante para contenedores Docker
process.on('SIGTERM', () => {
console.log('SIGTERM recibido. Apagando elegantemente...');
server.close(async () => {
await db.end();
await redis.quit();
process.exit(0);
});
setTimeout(() => {
console.error('Apagado forzado después del timeout');
process.exit(1);
}, 30000);
});
Lista de Verificación de Producción
- ✅ Usa builds multi-etapa para minimizar el tamaño de la imagen
- ✅ Ejecuta como usuario no-root
- ✅ Implementa endpoints de health check
- ✅ Maneja SIGTERM para apagado elegante
- ✅ Registra logs en stdout/stderr en formato JSON estructurado