Phase 1b: Rename all ~94 commands across 12 plugins to /<noun> <action> sub-command pattern. Git-flow consolidated from 8→5 commands (commit variants absorbed into --push/--merge/--sync flags). Dispatch files, name: frontmatter, and cross-reference updates for all plugins. Phase 2: Design documents for 8 new plugins in docs/designs/. Phase 3: Scaffold 8 new plugins — saas-api-platform, saas-db-migrate, saas-react-platform, saas-test-pilot, data-seed, ops-release-manager, ops-deploy-pipeline, debug-mcp. Each with plugin.json, commands, agents, skills, README, and claude-md-integration. Marketplace grows from 12→20. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
3.3 KiB
3.3 KiB
Rollback Patterns Skill
Strategies for reverting deployments safely with minimal data loss and downtime.
Strategy: Recreate (Default)
Simple stop-and-restart with previous configuration.
Steps
-
Backup current state
cp docker-compose.yml docker-compose.yml.bak cp .env .env.bak docker compose images > current-images.txt -
Backup volumes with data
docker run --rm -v <volume_name>:/data -v $(pwd)/backups:/backup \ alpine tar czf /backup/<volume_name>-$(date +%Y%m%d%H%M).tar.gz /data -
Stop current deployment
docker compose down -
Restore previous config
git checkout <previous_commit> -- docker-compose.yml .env -
Start previous version
docker compose pull docker compose up -d -
Verify health
docker compose ps docker compose logs --tail=20
Estimated Downtime
- Small stack (1-3 services): 10-30 seconds
- Medium stack (4-8 services): 30-60 seconds
- Large stack with DB: 1-3 minutes (depends on DB startup)
Strategy: Blue-Green
Zero-downtime rollback by running both versions simultaneously.
Prerequisites
- Available ports for the alternate deployment
- Reverse proxy that can switch upstream targets
- No port conflicts between blue and green instances
Steps
-
Start previous version on alternate ports
- Modify docker-compose to use different host ports
- Start with
docker compose -p <stack>-green up -d
-
Verify previous version health
- Hit health endpoints on alternate ports
- Confirm service functionality
-
Switch reverse proxy
- Update Caddyfile to point to green deployment
- Reload Caddy:
docker exec caddy caddy reload --config /etc/caddy/Caddyfile
-
Stop current (blue) version
docker compose -p <stack>-blue down -
Rename green to primary
- Restore original ports in docker-compose
- Recreate with standard project name
Estimated Downtime
- Near zero: Only the Caddy reload (sub-second)
Database Rollback Considerations
Safe (Reversible)
- Data inserts only (can delete new rows)
- No schema changes
- Configuration changes in env vars
Dangerous (May Cause Data Loss)
- Schema migrations that drop columns
- Data transformations (one-way)
- Index changes on large tables
Mitigation
- Always backup database volume before rollback
- Check for migration files between versions
- If schema changed, may need to restore from backup rather than rollback
- Document migration reversibility in deploy notes
Volume Backup and Restore
Backup
docker run --rm \
-v <volume>:/data:ro \
-v $(pwd)/backups:/backup \
alpine tar czf /backup/<volume>.tar.gz -C /data .
Restore
docker run --rm \
-v <volume>:/data \
-v $(pwd)/backups:/backup \
alpine sh -c "rm -rf /data/* && tar xzf /backup/<volume>.tar.gz -C /data"
Post-Rollback Verification
- All containers running:
docker compose ps - Health checks passing:
docker compose ps --format json | grep -c healthy - Logs clean:
docker compose logs --tail=50 --no-color - Application responding:
curl -s http://localhost:<port>/health - Data integrity: Spot-check recent records in database