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