Claude Code Plugins

Community-maintained marketplace

Feedback

tg-deployment

@charlesmsiegel/tg
1
0

Production deployment patterns for the World of Darkness Django application. Use when deploying to staging/production, configuring security settings, setting up Redis cache, planning database migrations, or preparing rollback procedures. Triggers on deployment tasks, production configuration, security hardening, or environment-specific settings.

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name tg-deployment
description Production deployment patterns for the World of Darkness Django application. Use when deploying to staging/production, configuring security settings, setting up Redis cache, planning database migrations, or preparing rollback procedures. Triggers on deployment tasks, production configuration, security hardening, or environment-specific settings.

Deployment Patterns

Environment Configuration

Settings Structure

tg/settings/
├── __init__.py        # Auto-loads based on DJANGO_ENVIRONMENT
├── base.py            # Common settings (all environments)
├── development.py     # DEBUG=True, local cache
└── production.py      # Full security, Redis, HTTPS

Set DJANGO_ENVIRONMENT=production in .env for production.

Required Production Environment Variables

# Critical - must be set
DJANGO_ENVIRONMENT=production
SECRET_KEY=<generated-secret-key>
DJANGO_ALLOWED_HOSTS=example.com,www.example.com
CSRF_TRUSTED_ORIGINS=https://example.com

# Database (PostgreSQL recommended)
DB_NAME=tg_db
DB_USER=tg_user
DB_PASSWORD=<secure-password>
DB_HOST=localhost
DB_PORT=5432

# Redis cache
REDIS_URL=redis://127.0.0.1:6379/1

Generate secret key: python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"

Security Configuration

Production Security Settings (in production.py)

# HTTPS enforcement
SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True

# HSTS (1 year)
SECURE_HSTS_SECONDS = 31536000
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
SECURE_HSTS_PRELOAD = True

# Content security
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_BROWSER_XSS_FILTER = True
X_FRAME_OPTIONS = "DENY"
SECURE_REFERRER_POLICY = "same-origin"

# Cookie security
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_SAMESITE = "Lax"
CSRF_COOKIE_SAMESITE = "Strict"

Verify with: python manage.py check --deploy

Redis Cache Setup

Installation

pip install django-redis redis

Configuration

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": os.environ.get("REDIS_URL", "redis://127.0.0.1:6379/1"),
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "CONNECTION_POOL_KWARGS": {"max_connections": 50},
            "RETRY_ON_TIMEOUT": True,
            "IGNORE_EXCEPTIONS": True,
            "COMPRESSOR": "django_redis.compressors.zlib.ZlibCompressor",
        },
    }
}

# Session storage in Redis
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"

Verification

from django.core.cache import cache
cache.set('test', 'value', 60)
cache.get('test')  # Should return 'value'

Database Migration Deployment

Pre-deployment

# Backup database
pg_dump production_db > backup_$(date +%Y%m%d_%H%M%S).sql

# Validate existing data
python manage.py validate_data_integrity --verbose
python manage.py validate_data_integrity --fix  # If issues found

Deployment Steps

# 1. Enable maintenance mode
touch /var/www/tg/maintenance.flag

# 2. Pull code
git fetch origin && git checkout <branch> && git pull

# 3. Install dependencies
pip install -r requirements.txt --upgrade

# 4. Run migrations
python manage.py showmigrations  # Preview
python manage.py migrate

# 5. Collect static
python manage.py collectstatic --noinput

# 6. Restart services
sudo systemctl restart gunicorn
sudo systemctl restart nginx

# 7. Disable maintenance mode
rm /var/www/tg/maintenance.flag

Post-deployment

# Health check
curl -I https://your-domain.com/
python manage.py monitor_validation

Rollback Procedures

Code-only Rollback

git log --oneline  # Find previous commit
git checkout <previous-commit>
sudo systemctl restart gunicorn

Full Rollback (Code + Database)

# 1. Stop application
sudo systemctl stop gunicorn

# 2. Restore database
dropdb production_db
createdb production_db
pg_restore -d production_db backup_TIMESTAMP.sql

# 3. Revert code
git checkout <previous-commit>
python manage.py migrate <app> <previous-migration>

# 4. Restart
sudo systemctl start gunicorn

Deployment Checklist

Pre-deployment

  • All tests passing locally
  • Database backup created and verified
  • Rollback plan documented
  • Team notified of deployment window

During deployment

  • Maintenance mode enabled
  • Code pulled and dependencies updated
  • Data validation passed
  • Migrations applied successfully
  • Static files collected
  • Services restarted

Post-deployment

  • Health check passed
  • Key functionality tested (login, create, edit)
  • Error logs clean
  • Maintenance mode disabled
  • Monitor for 30 minutes

Monitoring Commands

# Validation health check
python manage.py monitor_validation

# JSON output for monitoring tools
python manage.py monitor_validation --json

# Analyze specific time period
python manage.py monitor_validation --period 48