TYPE: TOOL LANG: MARKDOWN

deployment

Deploy applications to production environments. Use when configuring deployments, creating deployment scripts, managing release processes, or setting up CI/CD pipelines.

DIRECTIVE_TEXTUELLE

Deployment Skill

Deploy applications to production environments.

When to Use

Use this skill when the user wants to:

  • Configure deployment configurations
  • Create deployment scripts
  • Set up CI/CD pipelines
  • Manage deployment strategies
  • Handle release management
  • Configure environments
  • Deploy to cloud providers
  • Implement blue-green deployments

Deployment Types

Local Deployment

# Start application
npm start
python app.py

Development Deployment

# Local server with hot reload
npm run dev
nodemon app.js

Staging Deployment

# Deploy to staging environment
npm run deploy:staging

Production Deployment

# Deploy to production
npm run deploy:production

Deployment Configurations

Environment Variables

// .env files
NODE_ENV=production
DATABASE_URL=postgresql://user:pass@localhost/db
API_KEY=your-api-key
PORT=3000

Configuration Files

Environment-based Config

// config.js
const config = {
  development: {
    database: 'dev_db',
    port: 3000
  },
  staging: {
    database: 'staging_db',
    port: 3000
  },
  production: {
    database: 'prod_db',
    port: process.env.PORT || 3000
  }
};

module.exports = config[process.env.NODE_ENV];

Docker Compose

version: '3.8'
services:
  app:
    image: myapp:latest
    environment:
      - NODE_ENV=production
      - DATABASE_URL=${DATABASE_URL}
    ports:
      - "3000:3000"
    restart: always

Deployment Scripts

Deployment Script

#!/bin/bash
set -e

# Build
npm run build

# Test
npm run test

# Deploy
echo "Deploying to production..."
scp dist/* server:/var/www/app/
ssh server "pm2 restart app"

NPM Scripts

{
  "scripts": {
    "dev": "NODE_ENV=development nodemon app.js",
    "build": "npm run clean && npm run bundle",
    "start": "NODE_ENV=production node dist/app.js",
    "deploy:staging": "npm run build && scp -r dist/* staging-server:/var/www/app/",
    "deploy:production": "npm run build && scp -r dist/* production-server:/var/www/app/"
  }
}

Deployment Strategies

Rolling Deployment

# Update one instance at a time
docker pull myapp:latest
docker stop $(docker ps -q --filter ancestor=myapp:previous)
docker run -d -p 80:80 myapp:latest

Blue-Green Deployment

# Blue environment
docker run -d -p 8080:80 myapp:1.0.0

# Green environment
docker run -d -p 80:80 myapp:1.0.0

# Switch traffic
nginx -s reload

Canary Deployment

# Deploy to subset of servers
for i in {1..5}; do
  docker run -d -p 808$i:80 myapp:1.0.0
done

# Monitor metrics
# Gradually shift traffic

Rolling Update

# Docker rolling update
docker service update --replicas=5 myapp

# Kubernetes rolling update
kubectl set image deployment/myapp myapp=myapp:1.0.0

Cloud Deployment

AWS Deployment

# Deploy with AWS CLI
aws deploy create-deployment \
  --application-name myapp \
  --deployment-group-name myapp-prod \
  --s3-location s3Bucket=my-s3-bucket,s3Key=app.zip

Docker Deployment

# Build and push
docker build -t myapp:1.0.0 .
docker tag myapp:1.0.0 registry.example.com/myapp:1.0.0
docker push registry.example.com/myapp:1.0.0

# Deploy
docker run -d -p 80:80 \
  --name myapp \
  --restart unless-stopped \
  registry.example.com/myapp:1.0.0

Kubernetes Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:1.0.0
        ports:
        - containerPort: 80

Release Management

Version Bump

# Major version
npm version major

# Minor version
npm version minor

# Patch version
npm version patch

# Manual version
npm version 2.0.0

Changelog

# Changelog

## [1.0.0] - 2024-02-08
### Added
- Initial deployment
- Authentication system
- User dashboard

### Fixed
- Login bug
- Database connection

Pre-release

# Pre-release version
npm version prerelease --preid=beta

Post-deployment

Health Checks

// Health check endpoint
app.get('/health', (req, res) => {
  const health = {
    status: 'ok',
    uptime: process.uptime(),
    timestamp: Date.now()
  };
  res.json(health);
});

Monitoring

# Monitor application
pm2 logs myapp
pm2 monit
pm2 status

Rollback

# Rollback to previous version
docker stop $(docker ps -q -f name=myapp)
docker rm $(docker ps -q -f name=myapp)
docker pull registry.example.com/myapp:previous
docker run -d -p 80:80 myapp:previous

CI/CD Integration

GitHub Actions

name: Deploy
on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
      - run: npm ci
      - run: npm run build
      - run: npm test
      - name: Deploy
        env:
          DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }}
        run: ./deploy.sh

GitLab CI

deploy_production:
  stage: deploy
  script:
    - npm run build
    - scp dist/* production-server:/var/www/app/
  only:
    - main

Environment Setup

Configuration Files

// .env.example
NODE_ENV=production
DATABASE_URL=postgresql://localhost:5432/myapp
REDIS_URL=redis://localhost:6379

Database Migrations

# Apply migrations
npm run migrate:up
npm run migrate:down

# Seed database
npm run db:seed

Rollback Procedures

Quick Rollback

# Rollback deployment
./scripts/rollback.sh

Full Rollback

# Restore from backup
./scripts/restore-backup.sh

Deployment Documentation

Deployment Checklist

  • Build completed successfully
  • Tests passed
  • Environment variables configured
  • Database migrations applied
  • Health checks passing
  • Monitoring is active
  • Rollback plan is ready

Deployment Logs

# View deployment logs
tail -f logs/deployment.log

# Deployment status
cat .deployment-status

Deliverables

  • Deployment configuration files
  • Deployment scripts
  • Environment documentation
  • Rollback procedures
  • Monitoring setup
  • CI/CD configuration
  • Deployment documentation

Quality Checklist

  • Deployments are automated
  • Environment variables are configured
  • Health checks are in place
  • Rollback procedures documented
  • Monitoring is set up
  • Deployment logs are accessible
  • Environment is consistent
  • Documentation is updated
[RETOUR_AUX_MODULES]

>> AUTRES_MODULES